黑马程序员技术交流社区

标题: 关于static [打印本页]

作者: 王小乖    时间: 2015-3-29 20:46
标题: 关于static
都说被static修饰的变量会随着类的加载而加载,优先于对象的存在,可是我想知道的是,什么时候算是类加载进来了呢?是编译完成生成字节码文件的时候吗?
作者: 黑马:二师兄    时间: 2015-3-29 21:01
+1!!!!!!!!!!!!!!!!!!!!
作者: 王小乖    时间: 2015-3-30 09:21
别沉啊,求大神给讲一下
作者: 零点Crazy    时间: 2015-3-30 09:35
是的.....................
作者: DxxD    时间: 2015-3-30 09:42
我记得视频貌似加了很多打印信息啊。。。。
作者: 天马行空_黑马    时间: 2015-3-30 10:21
代码里面应该是new之后分配了栈内存空间之后吧
作者: wenhb    时间: 2015-3-30 10:42
应该是在new了一个该类的对象的时候才会加载这个类
作者: 小七的    时间: 2015-3-30 16:00
静态变量存储的位置是方法区内,随着类的加载而加载,属于类变量,对象需要new的时候,才会分配内存空间,所以静态变量优先于对象。
作者: longlongint    时间: 2015-3-30 19:49
貌似是new之后
作者: rzd5995692    时间: 2015-3-30 19:53
我感觉应该是main()  主函数执行前,因为只有加载了其他类,主函数才能调用
作者: JarryHorse    时间: 2015-3-30 20:22
生成字节码的时候JVM还没启动呢,编译只是编译器把java文件按固定语法编译成字节码保存到硬盘中而已。关于加载类的问题请看下面:JVM的内存空间大体可分为三层,分别是新生代、老生代和持久层,其中持久层是存放类文件对象的,当你调用到类中的成员时(不管是调用静态成员还是调用构造函数),类加载器就会把类文件(就是字节码文件)从硬盘中加载到JVM内存的持久层成为类文件对象,静态成员就随着类加载进来了(注意:这时候还没在新生代中产生实例对象),比如调用静态方法的时候不需要new对象,但要加载类文件,在加载类文件到持久层时类中的所有静态成员都会加载进内存,,其次,new对象也是先做这一部,要等类和静态成员都先进来,再用类文件对象这个”模板“搞个对象出来,如果之前已经new过该类的对象,那么类文件对象就已经并且一直存在持久层中
作者: l540144279    时间: 2015-3-30 21:28
new之后吧,在方法区开辟一点空间,,,不知道对不对,今天刚学的。。。
作者: JARVIS_YJ    时间: 2015-3-30 21:30
走过。。。。
作者: leonard    时间: 2015-3-30 21:30
static修饰的成员变量是被所有对象所共享的,存在方法区中,由类名标识,随类的加载而加载,当一个对象调用并修改了该变量,另外的对象再去调用时,变量的值是前一个对象修改之后的的值,也就是在对象创建之前类加载之后,static修饰的变量就存在了。即使没有创建对象,也可以直接用类名.的方式调用静态变量并赋值。
作者: 夏鹏    时间: 2015-3-30 21:42
路过就看看,
作者: 温大帅    时间: 2015-3-30 21:57
应该是在运行的时候加载的,不是编译期间加载的
作者: 花独恋水    时间: 2015-3-30 22:17
应该是调用这个类时由类加载器加载进内存,这时静态的也会被加载进入内存
作者: 浮夸    时间: 2015-3-30 22:26
静态修饰呀
作者: 幕丶落    时间: 2015-3-30 22:45
当用到那个类的时候,就会把那个类加载到内存中,如果内存中有static代码块,就会对类进行初始化
作者: luoyu1530    时间: 2015-3-30 22:46
当你new这个类的对象的时候,就会加载static修饰的方法
作者: 快乐ABC    时间: 2015-3-30 23:35
static修饰的成员都是属于类的,都被本类的对象所共享,存储在方法区内。随着类的加载而加载,优先于对象的存在。类加载进内存:1.当调用类的静态成员函数时,此时类就会加载进内存,此时没有对象而只有类在内存中。2 我们new类的对象时,类也会加载进内存,也是先加载类,此时静态成员就在内存中了,后new的对象。
作者: xss222    时间: 2016-12-7 13:17
留下脚步深藏功与名




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