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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王小乖 中级黑马   /  2015-3-29 20:46  /  2835 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

都说被static修饰的变量会随着类的加载而加载,优先于对象的存在,可是我想知道的是,什么时候算是类加载进来了呢?是编译完成生成字节码文件的时候吗?

21 个回复

倒序浏览
+1!!!!!!!!!!!!!!!!!!!!
回复 使用道具 举报
别沉啊,求大神给讲一下
回复 使用道具 举报
是的.....................
回复 使用道具 举报
我记得视频貌似加了很多打印信息啊。。。。
回复 使用道具 举报
代码里面应该是new之后分配了栈内存空间之后吧
回复 使用道具 举报
wenhb 中级黑马 2015-3-30 10:42:51
7#
应该是在new了一个该类的对象的时候才会加载这个类
回复 使用道具 举报
静态变量存储的位置是方法区内,随着类的加载而加载,属于类变量,对象需要new的时候,才会分配内存空间,所以静态变量优先于对象。
回复 使用道具 举报
貌似是new之后
回复 使用道具 举报
我感觉应该是main()  主函数执行前,因为只有加载了其他类,主函数才能调用
回复 使用道具 举报
生成字节码的时候JVM还没启动呢,编译只是编译器把java文件按固定语法编译成字节码保存到硬盘中而已。关于加载类的问题请看下面:JVM的内存空间大体可分为三层,分别是新生代、老生代和持久层,其中持久层是存放类文件对象的,当你调用到类中的成员时(不管是调用静态成员还是调用构造函数),类加载器就会把类文件(就是字节码文件)从硬盘中加载到JVM内存的持久层成为类文件对象,静态成员就随着类加载进来了(注意:这时候还没在新生代中产生实例对象),比如调用静态方法的时候不需要new对象,但要加载类文件,在加载类文件到持久层时类中的所有静态成员都会加载进内存,,其次,new对象也是先做这一部,要等类和静态成员都先进来,再用类文件对象这个”模板“搞个对象出来,如果之前已经new过该类的对象,那么类文件对象就已经并且一直存在持久层中
回复 使用道具 举报
new之后吧,在方法区开辟一点空间,,,不知道对不对,今天刚学的。。。
回复 使用道具 举报
走过。。。。
回复 使用道具 举报
static修饰的成员变量是被所有对象所共享的,存在方法区中,由类名标识,随类的加载而加载,当一个对象调用并修改了该变量,另外的对象再去调用时,变量的值是前一个对象修改之后的的值,也就是在对象创建之前类加载之后,static修饰的变量就存在了。即使没有创建对象,也可以直接用类名.的方式调用静态变量并赋值。
回复 使用道具 举报
路过就看看,
回复 使用道具 举报
应该是在运行的时候加载的,不是编译期间加载的
回复 使用道具 举报
花独恋水 来自手机 中级黑马 2015-3-30 22:17:47
17#
应该是调用这个类时由类加载器加载进内存,这时静态的也会被加载进入内存
回复 使用道具 举报
静态修饰呀
回复 使用道具 举报
当用到那个类的时候,就会把那个类加载到内存中,如果内存中有static代码块,就会对类进行初始化
回复 使用道具 举报
当你new这个类的对象的时候,就会加载static修饰的方法
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马