Java中的类如何实例化?

4

我在JLS8/15.9.1中发现了以下规则:

在new关键字之后的标识符必须明确指示一个可访问的、非抽象的、非枚举类型的内部类,以及编译时主表达式或ExpressionName的成员

我无法想象最后一个限制是什么意思。也许您可以给出编译时Primary表达式或ExpressionName的成员的例子?


1
文本中说的是“或”,而不是“的”,如果有帮助的话。 - Kenogu Labz
@KenoguLabz 实际上,这很有帮助,谢谢您。 - Java Man
1个回答

4

文本内容为:“如果类实例创建表达式带有限定符”……然后……(您的引用)

所以,我猜是这种情况:

package test;

public class Test1 {
    public class Test3{

    }
}

你可以在另一个类中按照以下方式实例化它:

package test;

import test.Test1.Test3;

public class Maker {

    public static void main(String[] args) {
    Test1 test1 = new Test1();
        Test3 test3 = test1.new Test3();    
    }

}

然后,

  1. 实例创建表达式被限定了:test1.new Test3()(test1.new是一个限定的new,而不是非限定的new)
  2. 主表达式是test1
  3. 主表达式的编译时类型是Test1
  4. new关键字后面的标识符是Test3,它明确地表示类Test3
  5. Test3可访问,非抽象,不是枚举类型,并且是Test1的编译时类型、主表达式的编译时类型的成员。

祝愉快 :)


谢谢。这正是我正在查找的内容。 - Java Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接