不懂代码也能爬取数据?
|
02、 静态方法 “说完静态变量,我们来说静态方法。”说完,我准备点一支华子来抽,三妹阻止了我,她指一指烟盒上的「吸烟有害身体健康」,我笑了。 “好吧。”我只好喝了一口咖啡继续说,“如果方法上加了 static 关键字,那么它就是一个静态方法。” “静态方法有以下这些特征。” 静态方法属于这个类而不是这个类的对象; 调用静态方法的时候不需要创建这个类的对象; 静态方法可以访问静态变量。 “来,继续上代码” public class StaticMethodStudent { String name; int age; static String school = "郑州大学"; public StaticMethodStudent(String name, int age) { this.name = name; this.age = age; } static void change() { school = "河南大学"; } void out() { System.out.println(name + " " + age + " " + school); } public static void main(String[] args) { StaticMethodStudent.change(); StaticMethodStudent s1 = new StaticMethodStudent("沉默王二", 18); StaticMethodStudent s2 = new StaticMethodStudent("沉默王三", 16); s1.out(); s2.out(); }} “仔细听,三妹。change() 方法就是一个静态方法,所以它可以直接访问静态变量 school,把它的值更改为河南大学;并且,可以通过类名直接调用 change() 方法,就像 StaticMethodStudent.change() 这样。” “来看一下程序的输出结果吧。” 沉默王二 18 河南大学沉默王三 16 河南大学 “需要注意的是,静态方法不能访问非静态变量和调用非静态方法。你看,三妹,我稍微改动一下代码,编译器就会报错。”
“先是在静态方法中访问非静态变量,编译器不允许。” 我们创建一个成员变量 count,并且在构造函数中让它自增。因为成员变量会在创建对象的时候获取内存,因此每一个对象都会有一个 count 的副本, count 的值并不会随着对象的增多而递增。” 我在侃侃而谈,而三妹似乎有些不太明白。 “没关系,三妹,你先盲猜一下,这段代码输出的结果是什么?” “按照你的逻辑,应该输出三个 1?是这样吗?”三妹眨眨眼,有点不太自信地回答。 “哎呀,不错哟。” 我在 IDEA 中点了一下运行按钮,程序跑了起来。 111 “每创建一个 Counter 对象,count 的值就从 0 自增到 1。三妹,想一下,如果 count 是静态的呢?” “我不知道啊。” “嗯,来看下面这段代码。” public class StaticCounter { static int count = 0; StaticCounter() { count++; System.out.println(count); } public static void main(String args[]) { StaticCounter c1 = new StaticCounter(); StaticCounter c2 = new StaticCounter(); StaticCounter c3 = new StaticCounter(); }} “来看一下输出结果。” 123 “简单解释一下哈,由于静态变量只会获取一次内存空间,所以任何对象对它的修改都会得到保留,所以每创建一个对象,count 的值就会加 1,所以最终的结果是 3,明白了吧?三妹。这就是静态变量和成员变量之间的差别。”
“另外,需要注意的是,由于静态变量属于一个类,所以不要通过对象引用来访问,而应该直接通过类名来访问,否则编译器会发出警告。” (编辑:广元站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



