public class testsingle 

   private static final testsingle onlyone=new testsingle(); 
   public static testsingle gettestsingle(){return onlyone;} 
   private testsingle(){} 

public class Single Test
{
  public static void main(String args[])
   { Testsingle obj1 = TestSingle.getTestSingle();
    }
}
红色那句话 当testsingle类被调用的时候就会创建一个onlyone``` 然后指向 新的一个testsingle创建的对象onlyone?
然后再指向一个testsingle创建的对象onlyone?
这不无限循环下去啊?
计算机到底怎么运行的啊?小弟想不明白啊```

解决方案 »

  1.   

    那么在当testsingle类第一次被调用时```给onlyone在栈内存一个空间...那个这个空间里放的什么的地址啊
      

  2.   

    final 只有new初始化时才能赋值的,以后就改变不了了。再又是static 就是多实例共享的静态对象 所以不会改变的。
      

  3.   

    那么在当testsingle类第一次被调用时```给onlyone在栈内存一个空间...那个这个空间里放的什么的地址啊
      

  4.   

    那给的那个程序里
    给onlyone里放的什么的地址啊
      

  5.   

    final表示只能初始化后,不能再不更改;
    static表示全局,类加载时执行;
    final static 一般用来定义常量。
      

  6.   

    请回答下这个
    引用 5 楼 alpha_423 的回复:
    就是你这个类的唯一一个实例的内存地址 
    那给的那个程序里 
    给onlyone里放的什么的地址啊
      

  7.   


    作为一般的开发来说,没有必有知道它放在哪里。除非你要自己实现jvm.你非要问常量放在哪里,那么,只能告数你,常量放在常量池里。常量在常量池的什么地方,编译的时候决定的。可以反编译看看.我反编译结果来看,这个常量放在第13个位置
    const #13 = Field #1.#14; //  test/Test.onlyone:Ltest/Test;常量池在什么地方?
    我去google了下,java虚拟机规范里,好像并没有规定常量池放在内存的什么地方。我估计,在类加载的时候,动态开辟一块内存作为常量池。也就说,一个类的常量池的存放地是没有固定地方的。
      

  8.   


    小弟不想知道放在哪里 是想知道onlyone里放的地址是谁的````
      

  9.   


       private static final testsingle onlyone=new testsingle();  
                                               ^^^^^^^^^^^^^^^^  就是它的地址
      

  10.   

    那onlyone指向的testsingle类里的什么东西?
      

  11.   


    new 是一个操作符,他的作用就是新开辟一个内存区域,并返回这个内存的开始地址。这个区域就是新的testsingle的实例使用内存。当然,在new返回指之前,先调用testsingle的构造函数testsingle();所以 onlyyone这个变量(当然,这里它是一个常量。在汇编的角度来看,常量和变量没有区别,都是一块内存)的就是存的上面说的内存区域的开始地址。