java中静态变量和实例变量的生命周期有什么区别?
1.存储区域不同:静态变量存储在静态存储区,普通变量存储在堆中;\x0d\x0a2.静态变量与类相关,普通变量则与实例相关,说细一点:\x0d\x0aclass Demo {\x0d\x0apublic static String a;\x0d\x0apublic String b;\x0d\x0apublic static void main(String[] args) {\x0d\x0a Demo d = new Demo();\x0d\x0a d.a; // 警告,虽然可以通过编译,但没有意义\x0d\x0a d.b; // 正确\x0d\x0a Demo.a; // 对static变量的正确引用\x0d\x0a Demo.b; // 错误\x0d\x0a}\x0d\x0a3.内存分配方式不同。static字段对每个类来说都只有一份,无论你创建多少对象,该static区域都只有一份,它对于这些对象来说是共享的;而非static字段,因为其从属于对象,因此每有一个对象,就会为该变量申请一个存储空间;\x0d\x0a4.生命周期不同。从程序运行开始,static域就已经确定下来,因此在没有创建对象之前,就可以引用该区域变量及函数,而非static域的变量及函数,必须等实例化之后才可以通过对象来调用。\x0d\x0a5.理解了this之后,更能体会到static的含义。static方法就是没有this的方法,这也就是为什么在static方法中不能引用非static变量,因为该方法内没有隐含的this,编译器无从知道这个变量是属于哪一个类的。
Java类的生命周期包括哪几个阶段
加载:查找并加载类的二进制数据
连接:分为三个小阶段:
验证:确保被加载的类的正确性
准备:为类的静态变量分配内存,并将其初始 化为默认值
解析:把类中的符号引用转换为直接引用
初始化:为类的静态变量赋予正确的初始值
使用:又分为主动使用和被动使用。
卸载:由JVM自带的类加载器所加载的类,在JVM的生命周期中,始终不会被卸载。但是由用户自定义的类加载器所加载的类是可以被卸载的。
以上只是做部分说明。 要细说的话,内容还是很多的。
JAVA 静态内部类的生命周期是怎样的
既然是静态则外部类第一次被实例化即构造出来,直到全部外部类实例引用断开才析构.
java中new的用法? new 出的对象或变量,的生存周期是…?在类中和方法体中有何不同?
对象的生命周期一般来就是看他是否没有被任何一个引用所引用了,那他就是生命终结了。这个就是比如一些方法中定义的对象在走出大括号有效作用范围,或者是走出方法,或者是你把唯一的引用赋值给其他对象了,那对应的对象生命周期就到了,注意这只是说一般情况,就是这个对象的finalize方法没有让自己这个对象起死回生的的时候他就死了。
finalize这个方法是可以让这个已经要死的对象重新活过来的。就是给一个对象一次反悔的机会,但是如果你放弃了那就是真的死了。
对象的生存周期就是当这个对象没有被任何引用指向的时候,他就是孤儿了,那他就到了一个关口,如果finalize方法也不复活,那就认为他死了。关键是这个对象有没有没人认领,要是没人认领,而且自己不找个干妈干爸,那他就是真活到头了。一些匿名对象是new完就立刻死了,因为匿名对象出生的目的就是之用一次就丢掉的,所以这个匿名是java所有对象里最悲剧的一个角色,用之即弃。而最尊贵的对象就是常量对象,这个是一生只伺候一个主人,也是用情专一的对象啊,一辈子就这一个。