成员变量随着对象创建而创建,对象存在,成员变量才存在,每个对象都各自拥有自己的成员变量
例:在main方法中使用Stu的成员变量name,必须先初始对象(先创建对象)
publicclass Stu { intage ; publicstaticvoid main(String[] args) { //创建对象1 Stu s1=new Stu(); //创建完对象后,才能使用对象s1的成员变量age s1.age=12; //只能通过对象名s1输出age的值 System.out.println(s1.age);
//输出匿名对象的age默认值 System.out.println("匿名对象age的值:"+new Stu().age); } } |
4.2)静态变量也叫类变量,随着类存在而存在,每个类有一份,所有实例对象共享,在一个对象中修改了静态变量的值,就等于修改了其他所有对象中该静态变量的值.用static修饰符来声明一个静态变量.和一个静态常量,如:
publicclass Stu { staticintage ; publicstaticvoid main(String[] args) { //创建对象1 Stu s1=new Stu(); s1.age=12; System.out.println(s1.age); //输出对象s1的值为12;
Stu s2=new Stu(); //输出对象s2的值为12?因为静态变量age被所有实例对象共享,s1对象赋值age后,所有对象的age值都是12; System.out.println(s2.age); s2.age=20; //输出对象s2的值为20 System.out.println(s2.age); //输出对象s1的值为20?对象s2修改了静态变量age的值,就等于修改了其他所有对象中该静态变量age的值 System.out.println(s1.age);
}
} |
4.3静态变量的内存空间是在程序中第一次使用该变量所在的类时分配的,所以静态变量可以通过类名直接调用。
publicclass Stu { staticintage ; publicstaticvoid main(String[] args) { //直接通过类名对age赋值 Stu.age=12; System.out.println(Stu.age); //所有的对象值都赋为12,直接通过类名输出所有对象的age值 System.out.println(new Stu().age); //也可以通过对象输出age的值 } } |
备注:1、方法内的局部变量不能声明为静态的,因为程序无法知道什么时候会调用该方法.
2、在使用final修饰符声明常量时,通常会使用static进行再次声明.因为常量的值是不可变的,索性就让它们当做类的所有对象所共享的唯一值.
4.3)在同一个类中,静态变量只能被静态方法直接调用;而成员变量可被所有的方法直接调用