先看一段代码
package study_static;
public class Childgame {
public static void main(String[] args) {
//定义一个变量 count 统计有多少小孩假如游戏
int count=0;
Child child1 = new Child("白骨精");
child1.join();
count++;
Child child2 = new Child("白蛇精");
child2.join();
count++;
Child child3 = new Child("青蛇精");
child3.join();
count++;
System.out.println("共有" + count + "小孩子加入了游戏");
}
}
class Child{
private String name;
public Child(String name) {
this.name = name;
}
public void join(){
System.out.println(name +"加入游戏");
}
}
问题分析
count 是一个独立的对象 以后需要访问count非常的麻烦,没有用到面向对象编程
因此就有了 类变量/静态变量
如果涉及一个int count 表示总人数。在创建一个对象的时候就把count加1,并且count是对这些对象都共享的就好了。所以就需要用类变量来解决问题。
修改过后的代码
package study_static;
public class Childgame {
public static void main(String[] args) {
Child child1 = new Child("白骨精");
child1.join();
child1.count++;
Child child2 = new Child("白蛇精");
child2.join();
child2.count++;
Child child3 = new Child("青蛇精");
child3.join();
child3.count++;
System.out.println("共有" + Child.count + "小孩子加入了游戏");
//类变量可以通过类名来访问
System.out.println("child1.count=" + child1.count);
System.out.println("child2.count=" + child2.count);
System.out.println("child3.count=" + child3.count);
}
}
class Child{
private String name;
//定义一个变量 count,是一个类变量(静态变量)static 静态
//静态变量的最大特点就是会被Child 类的所有对象实例共享
public static int count = 0;
public Child(String name) {
this.name = name;
}
public void join(){
System.out.println(name +"加入游戏");
}
}
运行结果
System.out.println("child1.count=" + child1.count);
System.out.println("child2.count=" + child2.count);
System.out.println("child3.count=" + child3.count);
这三条语句输出一样的原因是
静态量的最大特点就是会被Child 类的所有对象实例共享
child1.count
child1.count
child1.count
这三个指向的都是同一个内存地址所以它们的值也是一样的。