有谁对类的生命周期理解的比较透彻呢 各抒己见用你最精简的话语,来描述下你对类的生命周期的理解吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当类不被用到的时候,什么都不提前加载,一旦类被使用到,首先加载的是它的静态变量,然后是静态初始化块,静态方法。当此类要被构造一个对象的时候,即被new,或者用反射生成其对象的时候,加载其成员部分。依次为成员变量(即非静态变量)、非静态初始化块、非静态方法、最后才是构造器。成员部分除方法外,每个对象都有其一份副本,其中,非静态方法并不是每个对象都有一个,而是所有对象共享一个副本,这点要注意。静态部分一旦被加载,就不会被销毁,直到程序结束,关闭虚拟机。非静态的,即,被各个对象所拥有的东西,当对象不被引用时,这个类就结束了他的生命周期。但是,它还要在内存中驻留一段时间,等垃圾处理器来将它清除。在失去引用后,被垃圾处理前的这段时间,虽然它驻留在内存中,但是没法被再次引用。欢迎造访JAVA技术交流QQ群:26277577 生命周期 这个应该根据对象在jvm中的运行时间来判断 也可以用Class.forName()手动加载。只要包含main的类没有显式的引用其他的类。 按照这个说法,静态方法是最后加载的。那么在下面这个代码,a会输出多少呢?按照说法应该是a=10吧?为什么输出却是a=4呢?package test1;public class ClassLoadTest{ static int a=2; static void init(){a=10;} static { a=3;} static {a=4;} /** * @param args */ public static void main(String[] args) { System.out.println("a="+a); }} 楼上把static { a=3;} static {a=4;}位置调换下试试.那个static void init(){a=10;}你没有调啊? 这例子貌似很熟,恩。对了孙卫琴的Java面向对象编程里的吧 static{}是静态初始化块,类一经加载就被执行了,而static void init(){a=10;}是静态方法,需要被调用才能执行相关代码。修改 static void init() { a=10; System.out.println("invoked"); }结果仍是a=4,"invoked"字符串没有输出,因为这方法没被调用 如何使用接口,将函数作为参数传递给另一个函数? 帮忙看看这个是什么错误啊 怎么用java在批PANEL里画柱状图 一个jsp页面两个form的提交问题 编译apple小程序的问题? 一个简单的编程题,大家帮我想想。 关于利用i/o流进行文件复制的问题 怎样解决JCeartor中编辑中文乱码问题啊?急..... 这几天交作业 请高人指点 java 有几个小疑问...哪位好人帮忙看看.. csdn中 最简单的问题,大家帮忙啊~~~~!!!!!!
一旦类被使用到,首先加载的是它的静态变量,然后是静态初始化块,静态方法。
当此类要被构造一个对象的时候,即被new,或者用反射生成其对象的时候,加载其成员部分。依次为成员变量(即非静态变量)、非静态初始化块、非静态方法、最后才是构造器。
成员部分除方法外,每个对象都有其一份副本,其中,非静态方法并不是每个对象都有一个,而是所有对象共享一个副本,这点要注意。静态部分一旦被加载,就不会被销毁,直到程序结束,关闭虚拟机。
非静态的,即,被各个对象所拥有的东西,当对象不被引用时,这个类就结束了他的生命周期。
但是,它还要在内存中驻留一段时间,等垃圾处理器来将它清除。
在失去引用后,被垃圾处理前的这段时间,虽然它驻留在内存中,但是没法被再次引用。
欢迎造访JAVA技术交流QQ群:26277577
这个应该根据对象在jvm中的运行时间来判断
也可以用Class.forName()手动加载。只要包含main的类没有显式的引用其他的类。
按照这个说法,静态方法是最后加载的。那么在下面这个代码,a会输出多少呢?按照说法应该是a=10吧?为什么输出却是a=4呢?
package test1;public class ClassLoadTest
{
static int a=2;
static void init(){a=10;}
static { a=3;}
static {a=4;}
/**
* @param args
*/
public static void main(String[] args)
{
System.out.println("a="+a); }}
这例子貌似很熟,恩。对了孙卫琴的Java面向对象编程里的吧
static{}是静态初始化块,类一经加载就被执行了,而static void init(){a=10;}是静态方法,需要被调用才能执行相关代码。修改
static void init() {
a=10;
System.out.println("invoked");
}
结果仍是a=4,"invoked"字符串没有输出,因为这方法没被调用