jvm虚拟机加载类,是把类的属性和方法全加载了吗?
比如我一个程序里有30个类1程序运行时候,虚拟机是一下把30类都加载还是用哪个类加载哪个类?2类里有属性和方法,那加载某个类的时候,是把该类里的所有属性和方法都加载,还是...
比如我一个程序里有30个类
1程序运行时候,虚拟机是一下把30类都加载还是用哪个类加载哪个类?
2类里有属性和方法,那加载某个类的时候,是把该类里的所有属性和方法都加载,还是根据我调用该类的哪个方法就加载哪个方法,,其它没用到的方法并不加载?
下面这俩句话
懒汉式是,只有用到这个用例的时候,再将他实例化,不会浪费,所以效率要高一些。
饿汉式则是程序只要开始,就将他实例化,到用到他的时候就省去了再实例的时间,所以速度和反应快。
什么叫程序开始?难道说程序一运行就把所有类都加载了吗?不是说用到那个类才加载哪个类吗?请解释下咋回事 展开
1程序运行时候,虚拟机是一下把30类都加载还是用哪个类加载哪个类?
2类里有属性和方法,那加载某个类的时候,是把该类里的所有属性和方法都加载,还是根据我调用该类的哪个方法就加载哪个方法,,其它没用到的方法并不加载?
下面这俩句话
懒汉式是,只有用到这个用例的时候,再将他实例化,不会浪费,所以效率要高一些。
饿汉式则是程序只要开始,就将他实例化,到用到他的时候就省去了再实例的时间,所以速度和反应快。
什么叫程序开始?难道说程序一运行就把所有类都加载了吗?不是说用到那个类才加载哪个类吗?请解释下咋回事 展开
展开全部
我来回答一下你的问题:
1、类的加载时机:当这个类被实例化的时候如:new A();或者执行这个类里面的static(静态方法时)如:main方法,这个类才会被加载。你说的30个类它不会一下被加载,只有出现以上2种情况的时候才会加载。当然java.lang这个包里的类会在java虚拟机启动的时候加载(加载是将编译后的.class文件加载)。
2、类里面的属性分为静态的属性,和非静态的属性。
2.1 静态的属性只会加载一次,第一次实例化的时候分配空间,以后再实例化这个类的时候不会再分配内存空间。这个静态属性属于这个类的,供这个类的所有实例共享。
2.2非静态的属性会在每次实例化的时候就会分配内存空间,假如一个类被实例化10次,那么这个属性会分配10次内存空间,并且它只属于当前自己实例,不属于其他的实例对象。
2.3至于方法就是方法被调用的时候才会执行,你说的加载其实在实例化这个类的时候这个方法就被以.class文件加载到虚拟机里了。
3、程序的开始一般是以main方法开始执行的时候就叫程序的开始。
希望我的回答对你有帮助。^_^
1、类的加载时机:当这个类被实例化的时候如:new A();或者执行这个类里面的static(静态方法时)如:main方法,这个类才会被加载。你说的30个类它不会一下被加载,只有出现以上2种情况的时候才会加载。当然java.lang这个包里的类会在java虚拟机启动的时候加载(加载是将编译后的.class文件加载)。
2、类里面的属性分为静态的属性,和非静态的属性。
2.1 静态的属性只会加载一次,第一次实例化的时候分配空间,以后再实例化这个类的时候不会再分配内存空间。这个静态属性属于这个类的,供这个类的所有实例共享。
2.2非静态的属性会在每次实例化的时候就会分配内存空间,假如一个类被实例化10次,那么这个属性会分配10次内存空间,并且它只属于当前自己实例,不属于其他的实例对象。
2.3至于方法就是方法被调用的时候才会执行,你说的加载其实在实例化这个类的时候这个方法就被以.class文件加载到虚拟机里了。
3、程序的开始一般是以main方法开始执行的时候就叫程序的开始。
希望我的回答对你有帮助。^_^
更多追问追答
追问
那是不是说实例化的时候,这个类的属性和方法都会加载到内存?
比如我只new A了但是我没调用任何属性和方法,那请问这个类里面的属性和方法是否已经全被加载到内存里了?即使我没有调用这个类里面的属性和方法,但是我只实例化了而已
追答
在你实例化的时候就已经加载到内存里,并给你的属性分配空间,分配大小按照属性类型来分,这个和你调不调用没有关系,这个java机制就是这样的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询