黑马程序员技术交流社区
标题:
给刚学习java面向对象同学们点经验
[打印本页]
作者:
a767175432
时间:
2013-6-16 13:15
标题:
给刚学习java面向对象同学们点经验
刚开始学面向对象的时候 感觉最难的在于一个问题 就是静态成员不能直接访问非静态成员,但是当时很不理解,所以后面写代码会出现了很多这方面的错误,所以发此贴给大家分享一下
为什么静态成员不能直接访问非静态成员
答 : 非静态成员也就是不被static修饰的属性或者方法等, 而静态成员就是被static修饰的,例如main方法
请看下面代码:
public class A
{
private int a;
public void f()
{
}
public static void g()
{
}
public static void main(String[] args)
{
//a = 10; 这句代码错误
//f(); 这句代码也是错误的
g(); //这句代码是对的
}
}
复制代码
原因是什么呢
因为非静态成员只有在实例化该类对象的时候才会在内存中出现(因为非静态成员伴随着实例产生,也伴随着实例死亡),否则不会出现的,例如上面那段代码 A ademo = new A(); 只有这样a才会在内存中出现
A这个类被加载时首先将被static修饰的成员加载到内存中 所以刚开始main方法和g()方法加载到内存中,所以在main中能直接调用g(),因为g()在内存中已经出现了,
f()和a却没有在内存中出现,在main方法里直接调用没有在内存中出现的成员肯定会出错。
所以这就是静态成员不能直接调用非静态成员,除非将非静态的成员改成静态的在开始时就加载到内存 或者new该类对象
希望对初学者有帮助。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2