“Thinking in Java”有这样一个问题,说在类里面进行初始化和在构造函数里进行初始化有何不同我想不出,大家来说说看。
class init{
  String s = "abc";
  init(){String ss ="123";}
  public static void main(String [] args){
     init in = new init();
      
  }
}

解决方案 »

  1.   

    <Thinking in Java>有这个问题吗? 一点印象都没有.你这个构造函数中的语句不是初始化吧, 是创建了另一个局部变量啊. 应该是这样才对:class init {  String s; //让s在构造函数中初始化
      //String s = "abc"; //s在声明时初始化  init() { s = "abc"; }  public static void main(String [] args) {
         init in = new init();
      }}两种方法只是顺序不同, 没有什么本质的区别啊.
      

  2.   

    class init{
      String s = "abc";//先初始化
      init(){String ss ="123";}//后初始化
      public static void main(String [] args){
         init in = new init();
          
      }
    }
      

  3.   

    To:escalj()
    可以验证一下你的说法吗!?
      

  4.   

    String s = "abc";//先初始化
      init(){String ss ="123";}//后初始化s 是类的成员变量,而 ss 不是。
      

  5.   

    怎么没有遇到你这个问题
    APPLET的?
      

  6.   

    let'me see,see 呀see!
    ----------------
    class fun{
    public fun(){
    System.out.println("It's fun here!");
    }
    }
    public class test{
    fun f = new fun();//f作为实例变量先初始化,即先调用它的构造函数
    public test(){
    System.out.println("It's test here!");
    }
    public static void main(String [] args){
        test t=new test();
    }
    }
    ------------------------
    在这里还要注意static变量、方法的初始化问题。另外,那句“创建了一个已经初始化的局部变量"??ambiguous words!!
      

  7.   

    呼,结果试出来了,看程序就知道了//init.javaclass ABC{
       ABC(int n){System.out.println("ABC"+n);}
    }class init{
      ABC i1 = new ABC(11);
      init(){
         System.out.println("init");
         ABC i2 = new ABC(22);
      }
      ABC i3 = new ABC(33);
      
      public void pushout(){
        System.out.println("pushout");
        ABC i4 = new ABC(44);   
      }
      ABC i5 = new ABC(55);  public static void main(String [] args){
         init in = new init();
         in.pushout();
      }
    }输出结果为:
    ABC11
    ABC33
    ABC55
    init
    ABC22
    pushout
    ABC44由此可知,在类里面进行的变量初始化要先于在方法(包括构造函数)中进行的变量初始化。