类的静态成员
当类的一个成员变量或者成员方法被声明为静态时,这个类的所有对象将共用这个成员变量或成员方法。
意味着无论这个类上生成多少个对象,静态成员变量都是只有一份;
一旦静态成员变量的值改变,则所有对象都会受到影响。
class a{
int x,y;
static int z;
}
public class sentence{
public static void main(String[] args)
{
a a1=new a(),a2=new a();
a.z=10;
a1.x=1;
a1.z=2;
a2.x=11;
a2.z=12;
System.out.println("a1.x="+a1.x);
System.out.println("a2.x="+a2.x);
System.out.println("a1.z="+a1.z);
System.out.println("a2.z="+a2.z);
System.out.println("a.z="+a.z);
}
}
当执行语句
a.z=10;
共享静态属性z的值为10;
当执行语句
a1.x=1;
对象a1中的x成员变量值为1;
当执行语句
a1.z=2;
共享静态属性z的值为2;
当执行语句
a2.x=11;
对象a2中的x成员变量值为11;
当执行语句
a2.z=12;
共享静态属性z的值为12;
静态方法不能直接访问类的其他成员,除非这些成员也被声明为static,即静态方法不能直接处理非静态的成员,非静态成员只能通过对象来访问,这意味着在访问非静态成员前必须先创建一个对象,创建对象后,可以通过对象去访问静态和非静态成员。
class a{
int x,y;
static int z;
}
public class sentence{
public static void main(String[] args)
{
a a1=new a(),a2=new a();
a.z=10;
System.out.println("a.z="+a.z);
System.out.println("a1.y="+a1.y);
System.out.println("a1.z="+a1.z);
}
}
运行结果
a.z=10
a1.y=0
a1.z=10
而以下代码无法运行
class a{
int x,y;
static int z;
}
public class sentence{
public static void main(String[] args)
{
a a1=new a(),a2=new a();
a1.y=10;
System.out.println("a.y="+a.y);
}
}
原因:无法从静态上下文中引用非静态 变量 y。