1. static 和 new 一个对象出来,在运行时候 ,在内存中,是哪个先被创建出来的 应该问static 对象和非static对象创建的顺序。 static对象是属于类级别的,当类的加载过程中初始化,即创建对象。其他非static对象按顺序来初始化。 Object obja = new Object(); ---->2 static Object OBJ = new Object(); ---> 1 Object objb = new Object() ------>3
2。string s ="abc";String str = new String("abc"); 关于这个不能考虑顺序了。 string s ="abc";在常量表中先找,如果没有找到那就分配个”abc“字符串。 String str = new String("abc");直接在堆中创建一个对象,这个对象内容指向常量表的”abc“,如果此时”abc”字符串不存在,创建之。不知道回答你了没有? 以上有问题的情楼下,帮我指正。谢谢。java新手谢过。
1L的说法不准确问题1: static修饰的是类静态变量,在JVM装载当前类的class字节码之后,会在内存的方法区中为static变量分配内存空间,并赋予一个默认值。之后JVM才对static变量进行初始化,实际上JVM是调用一个<clinit>方法中的指令来完成这个初始化的(<clinit>在编译阶段为类静态变量的初始化偷偷生成的方法)。 而且static的初始化只进行一次,并且在当前类被首次主动调用的时候初始化。 new指令实在当前类被加载、连接和类静态变量初始化之后,才开始在堆中创建对象,并对对象的实例数据进行初始化的。 这个问题可以看看我的博客《【解惑】类与对象的初始化问题》问题2: 这是个老问题了,可以看看我的博客《【总结】String in Java》
应该问static 对象和非static对象创建的顺序。
static对象是属于类级别的,当类的加载过程中初始化,即创建对象。其他非static对象按顺序来初始化。 Object obja = new Object(); ---->2
static Object OBJ = new Object(); ---> 1
Object objb = new Object() ------>3
2。string s ="abc";String str = new String("abc");
关于这个不能考虑顺序了。
string s ="abc";在常量表中先找,如果没有找到那就分配个”abc“字符串。
String str = new String("abc");直接在堆中创建一个对象,这个对象内容指向常量表的”abc“,如果此时”abc”字符串不存在,创建之。不知道回答你了没有?
以上有问题的情楼下,帮我指正。谢谢。java新手谢过。
而且static的初始化只进行一次,并且在当前类被首次主动调用的时候初始化。 new指令实在当前类被加载、连接和类静态变量初始化之后,才开始在堆中创建对象,并对对象的实例数据进行初始化的。 这个问题可以看看我的博客《【解惑】类与对象的初始化问题》问题2: 这是个老问题了,可以看看我的博客《【总结】String in Java》