不太清楚调用构造方法的顺序;
这个代码里,是不是先运行main里的Test22 t2 =new Test22();然后调用父类里的无参构造方法,接着发现main方法外面有
一个Test22 t1=new Test22();就继续调用父类里的无参构造方法的构造方法...就是先调用父类所有的构造方法在返回main方法.....
还是这里是main里面的Test22 t2 =new Test22();和main外面的Test22 t1=new Test22();发生冲突造成死循环了??
好似是java.lang.StackOverflowError  栈溢??class Test11 {
  public Test11()
  {
  
   }}
public class Test22 extends Test11
{
 public Test22()
  {
  
   } Test22 t1 = new Test22();
  public static void main(String[] args)
  {
    Test22 t2 =new Test22();
  }
}

解决方案 »

  1.   

    外面这个Test22 t1 = new Test22();有问题,去掉吧。
      

  2.   

    和main里面的那个完全没有关系,是外面的那个造成了死循环每次构造一个新的Test22对象都会嵌套构造一个新的肯定会内存溢出main是静态方法,其中的东西在装载类时装载,只装载,不运行,和他没关系
      

  3.   

    但是如果注释掉main里面的Test22运行不会有问题,两个一起就不行了,
    这句 “每次构造一个新的Test22对象都会嵌套构造一个新的肯定会内存溢出”是什么意思,不懂啊,可以详细说一下吗??
      

  4.   

    加载一个类的时候要初始化变量,就是不断的new Test22,导致栈内存一处
      

  5.   

    上次我给别人的回帖。LZ执行一下吧class AB {
    static{
    System.out.println("我来了AB");
    }
    private static AB obj = new AB();
    public static int num1 ; public static int num2 = 0; private AB() {
    System.out.println("我来了AB构造函数");
    num1++;
    num2++;
    // ystem.out.println(+num1);
    // ystem.out.println(+num2);
    } public static AB getInstance() {
    System.out.println("我来了实例");
    return obj;
    }
    }
    public class CsdnTest {
    static{
    System.out.println("我来了CsdnTest");
    }
    public static void main(String[] args) {
    System.out.println("我来了main");
    AB obj = AB.getInstance();
    System.out.println("obj.num1=" + obj.num1);
    System.out.println("obj.num2=" + obj.num2);
    double f = 111231.5585; 
    BigDecimal b = new BigDecimal(f); 
    double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    System.out.println(f1);
    }
    }
      

  6.   

    没有main这个bug还是存在的,只是没有被触发,你可以随便在其他一个被运行到的方法里尝试new这个类,都会有同样的结果