黑马程序员技术交流社区

标题: [已解决]类在内存中是怎么存在的? [打印本页]

作者: 黄克帅    时间: 2012-5-24 17:03
标题: [已解决]类在内存中是怎么存在的?
本帖最后由 黄克帅 于 2012-6-11 13:30 编辑

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

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


作者: 林翔    时间: 2012-5-24 17:17
一个类在你没有new的时候,并没有在内存中分配地址。所以说是不存在的,和对象类似
作者: 闾丘日月    时间: 2012-5-24 17:46
只要使用到了这个类,那么这个类就被加载进内存中,以Class的一个实例对象而存在,比如说
@Override,或者Person p ,使用注解,使用类的引用等,虽然你没有创建该类对象,但是类已经被加载进内存中了。
        public static void main(String[] args) {
                MyClass a ;
                System.out.println(MyClass.class.getName());
        }
上面代码能够很好的说明这个。
第二个问题,如果没有创建对象,不能访问非静态的方法,记住一点就是静态优于对象而存在,非静态方法都是对特有对象的,没有对象不能调用它的方法。
作者: 闾丘日月    时间: 2012-5-24 17:47
注解可能说的不太准确,当你加了注解那行代码的时候,机器会给你new一个该注解的对象
作者: 黄克帅    时间: 2012-5-24 17:52
public static void main(String[] args) {
                 MyClass a ;
                 System.out.println(MyClass.class.getName());
         }

这里 你没有new MyClass  是不是类也已经加载了?   还有 这个时候MyClass 类里面的普通属性是不是还不存在?
作者: niceBoy    时间: 2012-5-24 17:59
一、问类的加载和对象的建立是不是同一时间
类是在对象第一次建立的时候加载
二、他们消失又是不是同一时间。
对象什么消失就要看你有没有引用在,内存满没满,
如果没引用在并且内存满了,垃圾回收机制自动消除
如果没引用在但是内存没满,对象就还是在内存中,就随程序关闭释放。类是程序关闭了释放。

作者: niceBoy    时间: 2012-5-24 18:04
类随程序关闭消失




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