public class A1 {
int a;
public A1()
{
a=10;

public A1(int n)
{
n=20;
System.out.println(n);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
A1 ob=new A1();
A1 ob2=new A1(20);
System.out.println(ob.a);
System.out.println(ob2.a);             
}}
程序输出
20
10
0
请问为什么不是10 20 0呢,为什么20会被先输出?System.out.println(ob.a);的执行为什么反而在后面?谢谢!

解决方案 »

  1.   

    A1 ob2=new A1(20); 的时候 就开始执行
    n=20; 
    System.out.println(n); 所以输出20
      

  2.   

    构造函数在NEW的时候就被执行。
    然后你自己再看一遍。
      

  3.   

    构造函数,当你声明A1一个实例时候的时候就调用了。(在这道题目中就是A1 ob2=new A1(20); )System.out.println(n);  //20
    System.out.println(ob.a);  //10
    System.out.println(ob2.a);    // 0
    //这才是他们的顺序吧。
      

  4.   

    在你主函数中A1 ob2=new A1(20);这个时候就调用了System.out.println(n);输出20
    之后运行System.out.println(ob.a);输出10
    然后运行System.out.println(ob2.a);输出0
      

  5.   

    A1 ob2=new A1(20);   //输出20
    System.out.println(ob.a); //输出10
    System.out.println(ob2.a);  //由于a为int型,默认为0,ob2对象没用调用缺省值的构造函数
                                    //所以输出为0