/*
* static属性i是属于类本身的,或者讲没有对象我们可以直接用类名调用
* 这个程序的结果是20,20.因为static是一个静态的,所有的对象共用这个一个
* 另外,在main函数里又把i的值改变了,最终大家共用20
* 若果再写个aa2.i=30.则最终结果会为30.以最后的i为准,前面的都会被覆盖*/
public class A {
public static int i=10;
public void show(){
System.out.printf("%d\n",i);
}
}
class tttttt
{
public static void main(String[] agrs){
A aa1=new A();
A aa2=new A();
aa1.i=20;
aa2.i=23;
aa1.show();
aa2.show();
}
}
二。
/*
2009年5月29日15:14:29
本程序证明了:
只有非private的static成员才可以通过类名的方式访问
static只是表明了该成员具有了可以通过类名访问的潜在特征
但是否可以通过类名访问,还必须满足一个条件: 该成员必须是非private
*/
public class A {
private static int i = 10;
private static void f() {
System.out.printf("2009年5月29日15:15:50\n");
}
}
class tttttt {
public static void main(String[] args) {
A.f();// 这里会报错
A.i = 22;// 这里会报错
}
}
三。
/*
2009年5月29日15:14:29
本程序证明了:
静态方法不能访问非静态成员
非静态方法可以访问静态成员
*/
class A {
private static int i = 10;
public int j = 99;
public static void f() {
// g(); //error 静态方法不能访问非静态成员
// j = 22; //error
System.out.printf("FFFF\n");
}
public void g() {
// f(); //OK 说明非静态方法可以访问静态成员
System.out.printf("GGGG\n");
System.out.printf("%d\n", i);
}
}
class tttttt {
public static void main(String[] args) {
A aa = new A();
// aa.g();
aa.f();
// A.g(); //error
}
}