Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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_Static Methods_Inner Classes_Local Class - Fatal编程技术网

Java 是否有所谓的局部静态内部类?

Java 是否有所谓的局部静态内部类?,java,static-methods,inner-classes,local-class,Java,Static Methods,Inner Classes,Local Class,我只是在尝试内部类,并偶然发现了一个想法,即拥有局部但静态的内部类。。。我在一个静态方法中创建了一个内部类。。就这么简单。。 这是我做的一个例子 class Outer { static void m() { class LocalStatic { void s() { System.out.println("static local inner class method"); }

我只是在尝试内部类,并偶然发现了一个想法,即拥有局部但静态的内部类。。。我在一个静态方法中创建了一个内部类。。就这么简单。。 这是我做的一个例子

  class Outer {

    static void m() {
        class LocalStatic {

            void s() {
                System.out.println("static local inner class method");
            }

        }
    }
}

class Demo {

    public static void main(String args[]) {

        Outer.m();
    }
}
这不会产生任何编译错误


我知道如何访问静态方法m。但是我想知道是否有一种方法可以从外部类访问本地类LocalStatic。。据我所知,我们无法访问方法内部的某些内容,对吗?因此,我无法从类外部访问LocalStatic或该本地类内部的任何方法或属性,我只是想确保

我想知道是否有办法从外部类访问本地类LocalStatic

没有办法做到这一点。本地类是本地的,所以访问它们的唯一方法是从类在作用域*中的方法

您可以使用非本地基类或接口访问本地类的对象:

interface SomeInterface {
    void s();
}
class Outer {
    static SomeInterface m() {
        class LocalStatic implements SomeInterface {
            public void s() {
                System.out.println("static local inner class method");
            }
        }
        return new LocalStatic();
    }
}
现在你可以写作了

SomeInterface i = Outer.m();
i.s();


*不用说,也有一种通过反射访问这些类的方法,但这超出了Java语言本身的能力。

您可以在任何方法、构造函数或初始值设定项中声明类。这样的类称为本地类。该方法是否是静态的并不相关。除了在其中声明的方法、构造函数或初始值设定项之外,不可能从代码的任何部分引用此类类


本地类几乎从未使用过。我认识一些多年来一直是专业java程序员的人,他们不知道类可以在方法内部声明。

“因此,我不能从类外部访问LocalStatic或本地类内部的任何方法或属性,只是想确保..”范围甚至比
Outer
类还小-您只能在
m()
方法中访问
LocalStatic
类。

您的标题中的问题的答案是,您可以在静态上下文(静态方法或静态初始值设定项)中声明本地内部类,但它不会有封闭的类实例。因此,称之为它是有道理的

局部静态内部类

或许

局部静态嵌套类


我从未见过有人这样称呼它们,或者实际上使用过它们。

“但我想知道是否有办法从外部类访问本地类LocalStatic”否,因为它的作用域是方法
m
。本地类只能在您定义它们的方法内访问。就像我一样。如果是这样的话,我将无法通过Java认证。我当然知道匿名类,但我不知道这个构造。但匿名内部类是本地类的类型,对吗?我们在使用函数接口时使用匿名内部类。我对术语不是100%确定,但我认为本地类指的是在方法/构造函数/初始值设定项中定义的命名类,所以匿名类不算数。\cpp初学者同意您的观点。@DiliniPeiris您可以使用匿名内部类实现函数接口,但lambda不是匿名类interest。。Thank=)我们可以通过从另一个外部类扩展本地类LocalStatic来做到这一点,对吗?指出本地类可以在初始值设定项中定义(我在初始答案中没有提到这种情况)。