我有以下代码:

class Hello {
    class Thing {
        public int size;

        Thing() {
            size = 0;
        }
    }

    public static void main(String[] args) {
        Thing thing1 = new Thing();
        System.out.println("Hello, World!");
    }
}

我知道Thing什么也不做,但是我的Hello, World程序没有它编译也很好。只有我定义的类不及格。

它拒绝编译。在创建一个新Thing的行中,我得到了Hello类型的No封闭实例。我猜是:

我有系统级的问题(在DrJava或我的Java安装)或 我对如何在java中构建一个工作程序有一些基本的误解。

什么好主意吗?


当前回答

Thing是一个内部类,具有到Hello实例的自动连接。您会得到一个编译错误,因为没有Hello实例供它附加。你可以通过将它更改为一个没有连接的静态嵌套类来最容易地修复它:

static class Thing

其他回答

Java 14之前 您必须添加静态关键字来从静态上下文访问类Thing。

class Hello {
    static class Thing {
        public int size;

        Thing() {
            size = 0;
        }
    }

    public static void main(String[] args) {
        Thing thing1 = new Thing();
        System.out.println("Hello, World!");
    }
}

Java 14 + 从Java 14开始,您可以使用内部记录类,它们是隐式静态的。所以你会有:

class Hello {
    record Thing(int size) { }

    public static void main(String[] args) {
        Thing thing1 = new Thing(0);
        System.out.println("Hello, World!");
    }
}

Thing是一个内部类,具有到Hello实例的自动连接。您会得到一个编译错误,因为没有Hello实例供它附加。你可以通过将它更改为一个没有连接的静态嵌套类来最容易地修复它:

static class Thing
class Hello {
    class Thing {
        public int size;

        Thing() {
            size = 0;
        }
    }

    public static void main(String[] args) {
        
        PlayGround obj = new PlayGround();
        
        Thing obj2 = obj.new Thing();
        
        System.out.println("Hello, World!");
    }
}

在我的例子中,这是因为多了一个'}'

朋友,试试这个吧(你也可以叫它Hello而不是Main)

class Thing {
  public int size;

    Thing() {
      size = 0;
    }
}


class Main {
  public static void main(String[] args) {
    Thing thing1 = new Thing();
      System.out.println("Hello, World!");
  }
}

这背后的想法是,你必须创建一个单独的类,包括静态void main (String[] args)方法。总结:你必须有一个类来创建你的对象,还有另一个类(在前一个类之外),你将在其中包括对象创建。如果将其命名为Main,则应该有一个名为Main.java的文件。如果您想将其命名为Hello,那么您的文件必须命名为Hello.java