java虚拟机什么情况下会对java类进行加载???
一个java类会在什么情况下被虚拟机加载以及别加载后内存的分配情况,还有就是这个类的生命周期。比如说当一个类被实例化时会被加载.高手给讲讲呗!还有那个静态代码块是怎么回事...
一个java类会在什么情况下被虚拟机加载以及别加载后内存的分配情况,还有就是这个类的生命周期。比如说当一个类被实例化时会被加载.
高手给讲讲呗!
还有那个静态代码块是怎么回事?? 展开
高手给讲讲呗!
还有那个静态代码块是怎么回事?? 展开
3个回答
展开全部
王森的《Java深度历险》详细说了这个问题。大致是jvm先加载Object类,再加载该类的超类,再加载该类本身,当该类被指向null时,该类被垃圾回收机制处理,当垃圾回收机制执行时会被清楚。
静态代码块会在类被创建或被调用的时候就被初始化,被创建和被调用是不同的两个概念,比如User u = new User();这个时候u没有被调用,不过静态模块已经被加载执行,而User.class;这条语句User并没有创建出实例,不过却被调用了,这个时候静态的代码块也被加载。不过,静态代码块有一个很特别的地方就是,在同一个应用程序中,只会执行一次。下面是一个Demo,可以看看:
public class User{
static {
System.out.println("It's a static space");
}
public static String name = "Jim Green";
}
另一个类调用,直接写main方法了。
public static void main(String[] args){
User u = new User();
String name = User.name;
}
这里会输出一句It's a static space,而注释掉其中任何一句依然会输出。不过,如果这个main方法卸载User里时,main方法什么都不写都会输出It's a static space,楼主可以想想是为什么。
静态代码块会在类被创建或被调用的时候就被初始化,被创建和被调用是不同的两个概念,比如User u = new User();这个时候u没有被调用,不过静态模块已经被加载执行,而User.class;这条语句User并没有创建出实例,不过却被调用了,这个时候静态的代码块也被加载。不过,静态代码块有一个很特别的地方就是,在同一个应用程序中,只会执行一次。下面是一个Demo,可以看看:
public class User{
static {
System.out.println("It's a static space");
}
public static String name = "Jim Green";
}
另一个类调用,直接写main方法了。
public static void main(String[] args){
User u = new User();
String name = User.name;
}
这里会输出一句It's a static space,而注释掉其中任何一句依然会输出。不过,如果这个main方法卸载User里时,main方法什么都不写都会输出It's a static space,楼主可以想想是为什么。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询