为了账号安全,请及时绑定邮箱和手机立即绑定

为什么执行之后会有错误

package com.sean;


public class HelloWorld {
 
    // 内部类Inner,类Inner在类HelloWorld的内部
    public class Inner {
     public int a=1;
  // 内部类的方法
     
  public void show() {
   System.out.println("welcome to imooc!"+a);
  }
 }
    {   HelloWorld p =new HelloWorld();
        Inner c=p.new Inner();
  System.out.println(c.a);
 }
 public static void main(String[] args) {
       
        // 创建外部类对象
  HelloWorld hello = new HelloWorld();
        // 创建内部类对象
  Inner i = hello.new Inner();
        // 调用内部类对象的方法
  i.show();
 }
}

正在回答

2 回答

{   HelloWorld =new HelloWorld ();
        Inner c=p.new Inner();
        System.out.println(c.a);
}

这段代码错误,因为这是一个初始化代码块,当你new一个HelloWorld的时候,它会执行这段代码,但这段代码里面由于有new HelloWorld(), 它就会继续执行初始化代码块,然后进入了死循环,从而造成内存溢出。楼上说的加个static是可取的,因为static只会执行一次,所以不会造成死循环。

解决办法是:加一个static,或者把这段去掉。

1 回复 有任何疑惑可以回复我~
{
	HelloWorld p = new HelloWorld();//有问题
	Inner c = p.new Inner();
	System.out.println(c.a);
}

这一段会内存溢出

每创建一个HelloWorld对象a,a也会创建一个HelloWorld对象b,b.....

你可以把上面这一段去掉或者加上static

static {
	HelloWorld p = new HelloWorld();
	Inner c = p.new Inner();
	System.out.println(c.a);
}

static内部代码所有对象共有。具体很难解释明白。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么执行之后会有错误

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信