A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在黑马已经学习完了面向对象的内容,最近进行了一下总结。
静态只能访问静态,非静态都可以访问,这是我们听到的一个结论。
那么,静态为什么不能访问非静态,我在mian方法里不是访问了很多对象吗,main方法就是静态的。
其实,静态可以间接的访问对象的成员:
static void setName(String name) {
           Person p = new Person();
           p.name = name;
}
这样做是可以的,可以在静态方法内访问对象的非静态属性。但是为什么老师说不可以呢?
答案是:这样的访问没有任何意义,只有当这个静态方法进栈运行的时候,才会创建这个对象p,然后设置了一下p对象的属性,
              这时候方法弹栈,刚才的对象消失不见,没有任何价值,仅存在着这么一下。

下面再看非静态方法和这个有什么区别?
Person p = new Person();
p.setName(String name);
非静态方法访问的是  “已经存在” 的对象,方法运行完弹栈后,该对象还存在,还有价值,该方法仅仅是修改了一下。
结论:
可以这样理解:静态方法可以间接的访问对象的属性,但是无法访问已经存在的对象,导致访问没有任何意义。

1 个回复

倒序浏览
欢迎大家一块儿交流。{:2_30:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马