package for;class InClass {
Finally fina = new Finally();
int a= 5;

public static void main(String [] args){

System.out.println("in InClass");
}
}
public class InClassOutOfMethods{
// InClass inClass = new InClass();
 int b =8;
 public static void main(String [] args){
 InClass inClass = new InClass();
System.out.println("in InClassOutOfMethods");
}
}package for;public class Finally{ 
  public static void main(String[] args) 
  { 
    Finally e=new Finally(); 
    System.out.println(e.tryThis()); 
  } 
  Finally(){System.out.println("in Finally");} 
  public int tryThis() 
  { 
    try{ 
      System.out.println("1"); 
      throw new Exception(); 
    //return 1; 
    }catch(Exception ex){ 
      System.out.println("2"); 
      return 2; 
    }finally{ 
      System.out.println("4"); 
      return 3; 
    } 
  } 
}
输出结果:
in Finally
in InClassOutOfMethods
在 class InClassOutOfMethods的main方法中   InClass inClass = new InClass();后,应该产生一个InClass类的对象,但InClass类没有显式定义构造函数,InClass类内方法 外的语句 Finally fina = new Finally();是如何被执行的呢?

解决方案 »

  1.   

    但不是没有,是存在默认的,fina是InClass实例的一部分,随其初始化而初始化
      

  2.   

    如果一个类没有显式定义构造函数,JVM就会给它一个默认的无参构造函数;InClass类内方法 外的语句 Finally fina = new Finally();这个就说到了JVM创建对象的顺序了,要创建对象了,就要创建成员属性啊.