本帖最后由 misakic52 于 2014-11-21 08:54:42 编辑

解决方案 »

  1.   

    应该是public  我写错了  private外部就引用不了了。。
      

  2.   

    没有区别,都是加载的时候初始化
    区别就是 map = new HashMap<String,Sring>  直接初始化了
    map; 先声明
    static{  放static块中初始化
      

  3.   

    应该是没什么区别的,java虚拟机在初始化静态变量的时候分为两步,第一步是虚拟机默认的初始化值,第二步是你设置的值,比如说,你声明了一个静态变量public static int a = 5;首先虚拟机会将其置为0,然后再是置为你的初始化值5,而静态块和声明的静态变量中的初始化只是虚拟机加载时的先后而已,本质上是没有什么区别的
      

  4.   

    public class Test
    {
       public static Test Instance = new Test(2.5);
       private double x;
       public static double y;
      static  {
            y=20.0;
       };
       public Test(double x)
       {
                this.x = x;
       }
      public void Print()
      {
         y=x-y;
        System.out.println(y);
    }
    }
    //执行
     Test.Instance.Print();
      Test  t = new Test(2.5);
       t.Print();
    执行下这个例子,就明白初始化块是先于构造函数执行了(手敲的代码,可能有错误)。
      

  5.   

    想要单例,用enum就行了,不明白可以百度谷歌一下,这方面内容很多。用enum可以由jvm最大限度保证构造函数在多线程不出问题
      

  6.   

    单例大全:http://bbs.bccn.net/thread-438043-1-1.html