日期:2014-05-20  浏览次数:20667 次

大侠进来看一个类和实例的例子
我对类变量,类方法,实例变量,实例方法之间的引用理解有限,大侠们看一下我这个例子哪个地方欠妥?谁能指点一下下?感激不尽  

//有关类变量,类方法,实例变量,实例方法的调用例子  
public   class   A{  
int   a=1;  
static   int   b=2;  
void   m1(){//实例方法m1,可以直接调用类变量b和实例变量a  
System.out.println(a+ "   "+b);  
}  
static   void   m2(){//类方法m2,可以直接调用类变量b,用实例引用实例变量s.a  
A   s=new   A();  
System.out.println(s.a+ "   "+b);  
}  
void   m3(){//实例方法m3,可以直接调用类方法m2和实例方法m1  
m1();  
m2();  
}  
static   void   m4(){//类方法m4,可以直接调用类方法m2,用实例引用实例方法s.m1  
A   s=new   A();  
s.m1();  
m2();  
}  

public   static   void   main(String[]   args){  
A   s=new   A();  
s.m1();  
s.m2();  
s.m3();  
s.m4();  

}  
}  


------解决方案--------------------
类方法不用声明为静态的,声明为静态的是为了高效的利用内存,以及公共的变量的地址引用,不是象你这样的即声明为Static 又还要用类对象去调用是不科学的!!!!
------解决方案--------------------
你写的都是静态方法,除了m1以外

你可以指定为动态方法的嘛!然后用this来引用咯
------解决方案--------------------
如果是static 类型的.如果两个类在同一个包里(你没学可以不管这句话),一般情况下来说不new 就可以直接调用
------解决方案--------------------
可以把static理解成全局的(也就是一直存在的:确切的说是伴随着类的存在)

new出来的实例不是全局的;
关系:
全局的可以调用全局的,非全局的可以调用非全局的
非全局的可以可以调用全局的,全局的不可以调用非全局的(你说的s.a是s调用了a,属于非全局的调用非全局的)
------解决方案--------------------
关系:
1.全局的可以调用全局的,非全局的可以调用非全局的
2.非全局的可以可以调用全局的,全局的不可以调用非全局的。

一般只使用关系1, 尽量别用2。

如,你的例子中,A.m2(),s.m2()都是合法的,但是后者容易使人产生歧义