您的位置:首页 > 职场人生

黑马程序员--03.面向对象--01.静态方法调用非静态成员【个人总结】

2013-07-18 09:41 711 查看

静态方法调用非静态成员

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
 

静态成员方法只能访问静态的成员 (方法/变量) ------静态只能访问静态

       非静态可以访问静态(原因就是对象也可以调用静态成员)。

       结论静态 (方法)只能访问静态但是非静态
(方法)
可以访问任意

*******************************************************************************

       【个人理解】

       [1].澄清一下:这个静态成员方法调用的是本类的非静态成员才会出问题

原因:所以一旦在静态方法中调用了本类非静态的成员,那就说明一定有一个具体的对象来调用非静态的成员才对。没有写出来,就是说明是this。而this表示调用这个方法的对象。但是静态方法的调用是不需要对象存在的。所以this就没有具体的指向。

所以,如果通过静态方法调用

{1}.没有“对象.”非静态成员

{2}. “this.本类非静态成员”

都是错误的,编译无法通过!!

       

[2].如果调用有“非this的具体对象引用.非静态成员”是可以的。

       所以,大原则:如果静态方法调用的非静态的成员,这个成员之前的对象是存在,那就没有问题。

       分析案例:

      


       show方法是Person类的静态方法。所以,一旦Person加载到内存的时候,show方法也在方法区开辟了内存空间。这个时候是没有某个对象来调用show方法的。但是,里面的p1.name ="Benjamin";
没有报错,原因就是在于在这个show加载的时候,已经为name这个变量的使用实例化了一个Person类对象p1。有明确存在的对象来调用非静态的name,所以编译通过。

但是System.out.println(name);重要调用这个name,没有显式给出对象引用名,说明是this。但是,静态方法show随着类Person加载的时候,没有什么实例变量来调用这个show方法,所以静态方法中不存在this
è 找不到调用这个name的对象 è报错。

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐