黑马程序员技术交流社区

标题: 给刚学习java面向对象同学们点经验 [打印本页]

作者: a767175432    时间: 2013-6-16 13:15
标题: 给刚学习java面向对象同学们点经验
刚开始学面向对象的时候 感觉最难的在于一个问题 就是静态成员不能直接访问非静态成员,但是当时很不理解,所以后面写代码会出现了很多这方面的错误,所以发此贴给大家分享一下

为什么静态成员不能直接访问非静态成员

答 : 非静态成员也就是不被static修饰的属性或者方法等,  而静态成员就是被static修饰的,例如main方法
请看下面代码:
  1. public class A
  2. {
  3. private int a;
  4. public void f()
  5. {
  6. }
  7. public static void g()
  8. {
  9. }
  10. public static void main(String[] args)
  11. {
  12. //a = 10;  这句代码错误
  13. //f(); 这句代码也是错误的
  14. g(); //这句代码是对的
  15. }
  16. }
复制代码
原因是什么呢
因为非静态成员只有在实例化该类对象的时候才会在内存中出现(因为非静态成员伴随着实例产生,也伴随着实例死亡),否则不会出现的,例如上面那段代码 A ademo = new A(); 只有这样a才会在内存中出现

A这个类被加载时首先将被static修饰的成员加载到内存中 所以刚开始main方法和g()方法加载到内存中,所以在main中能直接调用g(),因为g()在内存中已经出现了,
f()和a却没有在内存中出现,在main方法里直接调用没有在内存中出现的成员肯定会出错。
所以这就是静态成员不能直接调用非静态成员,除非将非静态的成员改成静态的在开始时就加载到内存 或者new该类对象
希望对初学者有帮助。。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2