public class Chinese { static Chinese ObjRef=new Chinese(); public static Chinese getInstance()
{
return ObjRef;//这句怎么执行?
} public static void main(String[] args) {
Chinese obj=Chinese.getInstance();
}
}
{
return ObjRef;//这句怎么执行?
} public static void main(String[] args) {
Chinese obj=Chinese.getInstance();
}
}
Chinese obj=ObjRef;
}
Chinese(){}后,貌似可以用了
然后执行return ObjRef;
而 ObjRef是Chinese类型的,创建新对象时,又会创建一个新的ObjRef,而新的新的ObjRef又会创建一个新的ObjRef,我觉得会创建很多个新的ObjRef,这样每个对象是只有一个ObjRef变量
然后执行return ObjRef;
而 ObjRef是Chinese类型的,创建新对象时,又会创建一个新的ObjRef,而新的新的ObjRef又会创建一个新的ObjRef,我觉得会创建很多个新的ObjRef,这样每个对象是只有一个ObjRef变量
/////////////////////////////
你想做到什么
??
Chinese obj=Chinese.getInstance();
}
这个地方调用了静态方法;调用静态方法意味着对类的成员变量进行初始化,static Chinese ObjRef=new Chinese();会被执行;执行完后才执行方法体中的
return ObjRef;
1 构造函数的调用
2 对静态成员的访问或者静态方法的访问
{
System.out.println("before ObjRef");
}
static Chinese ObjRef=new Chinese();
{
System.out.println("after ObjRef");
} public static Chinese getInstance() {
System.out.println("enter getInstance");
return ObjRef;
} public static void main(String[] args) {
Chinese obj=Chinese.getInstance();
}
}
===输入如下:
C:\>javac Chinese.javaC:\>java Chinese
before ObjRef
after ObjRef
enter getInstance
{
return ObjRef;//这句怎么执行?
} public static void main(String[] args) {
Chinese obj=Chinese.getInstance();
}
}
//---------------
1.当执行 java Chinese 时,JVM会加载Chinese 类,加载类的同时,该类的所有的static数据成员都会被初始化,也就时这句话会被执行static Chinese ObjRef=new Chinese() ,该语句执行的结果就是产生了一个类的对象并且把他的引用赋值给static变量ObjRef。
2.接下来执行Chinese obj=Chinese.getInstance() 他把上面生成的那个对象的引用赋值给obj
那就是如果一个类声明了一个静态成员变量,不管这个类产生了多少个对象,这个静态变量都只有一个.相当于对于这些对象来说的全局变量.这些对象公用这个静态变量.所以不会出现产生"创建很多个新的ObjRef"的情况