Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态上下文中的本地类实例创建表达式_Java_Class_Local Class - Fatal编程技术网

Java 静态上下文中的本地类实例创建表达式

Java 静态上下文中的本地类实例创建表达式,java,class,local-class,Java,Class,Local Class,说明如何确定封闭实例: 让C成为被实例化的类,让我成为被创建的实例 如果C是一个内部类,那么我可以有一个直接封闭的 实例(§8.1.3),确定如下: [……] 如果C是本地类,则: 如果C出现在静态上下文中,那么我没有立即封闭 例如 否则,如果类实例创建表达式出现在 静态上下文,则发生编译时错误。 否则,设O为C的直接封闭类。设n为 整数,使得O是第n个词汇性封闭类型声明 类实例创建表达式出现在其中的类的 紧随其后的i实例在词汇上是第n个 封闭的实例 我不明白黑体字的意思。让我举一个我不应该

说明如何确定封闭实例: 让C成为被实例化的类,让我成为被创建的实例

如果C是一个内部类,那么我可以有一个直接封闭的 实例(§8.1.3),确定如下:

[……]

如果C是本地类,则:

  • 如果C出现在静态上下文中,那么我没有立即封闭 例如

  • 否则,如果类实例创建表达式出现在 静态上下文,则发生编译时错误。

  • 否则,设O为C的直接封闭类。设n为 整数,使得O是第n个词汇性封闭类型声明 类实例创建表达式出现在其中的类的

紧随其后的i实例在词汇上是第n个 封闭的实例

我不明白黑体字的意思。让我举一个我不应该被编译的例子:

class A{
    int a;
    public static void main (String[] args) throws java.lang.Exception{
        class Foo{
            void bar(){
            }
        }
        Foo f = new Foo(); //Instance creation expression occured in the static context
    }
}


怎么了?你不能提供一个实际的例子来描述第二点吗?

我想下面的例子是指:

public class A {

   public class B { /* ... */ }

   public static void createB() {
      new B();  // <<=== This should fail
   }
}
公共A类{
公共类B{/*…*/}
公共静态void createB(){

新建B();//您应该阅读以下两行:

  • 如果C出现在静态上下文中,那么我没有立即封闭的实例

  • 否则,如果类实例创建表达式发生在静态上下文中,则会发生编译时错误

您的案例是第一个案例-您在静态上下文中定义了类
Foo
main
方法),因此实例
f
没有封闭实例

但是,如果您在
main
方法之外定义类
Foo
,并尝试在
main
方法中创建
Foo
的实例,则会出现错误,除非将
Foo
更改为静态类

class A
{
    int a;
    class Foo
    {
        void bar()
        {
        }
    }
    public static void main (String[] args) throws java.lang.Exception
    {
        Foo f = new Foo(); // this should fail
    }
}

但是Foo不是一个本地类。引用的是本地类。此外,没有任何关于在中定义的另一个类的直接内部类的内容,但是B类不是本地类。我以为标记的行是在谈论完全本地类。好吧,我放弃了。我也不知道那句话的意思。我不得不d问题是,当本地类的声明发生在非静态上下文中时,怎么可能将类的实例创建表达式嵌入到静态上下文中呢?