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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄克帅 中级黑马   /  2012-5-24 17:03  /  2019 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄克帅 于 2012-6-11 13:30 编辑

毕老师的视频上说
静态成员变量和普通成员变量的区别:
1 存放位置  静态成员变量随着类的加载而存在于方法区中,普通成员变量随着对象的建立而存在于堆内存中
2 生命周期  静态成员变量生命周期最长,随着类的消失而消失。普通成员变量随着对象的消失而消失

问类的加载和对象的建立是不是同一时间,他们消失又是不是同一时间。如果是,那么静态成员变量和普通成员变量的什么周期是不是一样? 如果不是 类和对象在内存中又是怎么独立存在的?

6 个回复

倒序浏览
一个类在你没有new的时候,并没有在内存中分配地址。所以说是不存在的,和对象类似
回复 使用道具 举报
只要使用到了这个类,那么这个类就被加载进内存中,以Class的一个实例对象而存在,比如说
@Override,或者Person p ,使用注解,使用类的引用等,虽然你没有创建该类对象,但是类已经被加载进内存中了。
        public static void main(String[] args) {
                MyClass a ;
                System.out.println(MyClass.class.getName());
        }
上面代码能够很好的说明这个。
第二个问题,如果没有创建对象,不能访问非静态的方法,记住一点就是静态优于对象而存在,非静态方法都是对特有对象的,没有对象不能调用它的方法。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
注解可能说的不太准确,当你加了注解那行代码的时候,机器会给你new一个该注解的对象
回复 使用道具 举报
public static void main(String[] args) {
                 MyClass a ;
                 System.out.println(MyClass.class.getName());
         }

这里 你没有new MyClass  是不是类也已经加载了?   还有 这个时候MyClass 类里面的普通属性是不是还不存在?
回复 使用道具 举报
一、问类的加载和对象的建立是不是同一时间
类是在对象第一次建立的时候加载
二、他们消失又是不是同一时间。
对象什么消失就要看你有没有引用在,内存满没满,
如果没引用在并且内存满了,垃圾回收机制自动消除
如果没引用在但是内存没满,对象就还是在内存中,就随程序关闭释放。类是程序关闭了释放。
回复 使用道具 举报
类随程序关闭消失
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马