Java 如何使用外部类名调用非静态内部类

Java 如何使用外部类名调用非静态内部类,java,Java,如何使用类名A调用静态类B尽管类A不是静态的这与要静态或不静态的类无关,但与方法中的static关键字相关 查看一下也阅读这篇文章这与类是否为静态无关,它与方法中的static关键字有关 查看一下也阅读这篇文章静态关键字用于修改类的成员。使用static修改成员时,可以使用封闭类的名称直接访问该成员,而不是像使用非静态成员那样使用封闭类的实例 下面的内部类internal是类Outer的成员: public class InnerTest { public static void ma

如何使用类名A调用静态类B尽管类A不是静态的

这与要静态或不静态的类无关,但与方法中的static关键字相关


查看一下也阅读这篇文章

这与类是否为静态无关,它与方法中的static关键字有关


查看一下也阅读这篇文章

静态关键字用于修改类的成员。使用
static
修改成员时,可以使用封闭类的名称直接访问该成员,而不是像使用非静态成员那样使用封闭类的实例

下面的内部类
internal
是类
Outer
的成员:

public class InnerTest {

    public static void main(String arg[]) {
        A.B.print();
    }
}

class A {
    static class B {
        static void print() {
            System.out.println("Hello");
        }
    }
}
因此,
内部
可以如下访问:

class Outer {
    static class Inner {}
}

Outer
不需要/不能被
static
修改,因为它不是类的成员。它是一个存在于全局范围内的类。要访问它,只需写下它的名称-
Outer
。它是非静态的没有意义,因为它没有封闭类。如果它是非静态的,您应该如何访问它?

使用
static
关键字修改类的成员。使用
static
修改成员时,可以使用封闭类的名称直接访问该成员,而不是像使用非静态成员那样使用封闭类的实例

下面的内部类
internal
是类
Outer
的成员:

public class InnerTest {

    public static void main(String arg[]) {
        A.B.print();
    }
}

class A {
    static class B {
        static void print() {
            System.out.println("Hello");
        }
    }
}
因此,
内部
可以如下访问:

class Outer {
    static class Inner {}
}

Outer
不需要/不能被
static
修改,因为它不是类的成员。它是一个存在于全局范围内的类。要访问它,只需写下它的名称-
Outer
。它是非静态的没有意义,因为它没有封闭类。如果它是非静态的,您应该如何访问它?

要使用正确的术语,类B不是内部类;它是一个静态嵌套类。有关各种类型的嵌套类的定义,请参见

重要的关键字是B类定义前面的
static
关键字。A类是否为静态并不重要。事实上,把
静态的
放在A类的定义前面是没有意义的


因为类B被声明为静态的,所以它不保留对类a实例的引用。

为了使用正确的术语,类B不是一个内部类;它是一个静态嵌套类。有关各种类型的嵌套类的定义,请参见

重要的关键字是B类定义前面的
static
关键字。A类是否为静态并不重要。事实上,把
静态的
放在A类的定义前面是没有意义的


因为类B被声明为静态的,所以它不保留对类a实例的引用。

还有一个方面如何解释这一点:

本身不是
静态的
非静态的
它只是一个

无论如何,您只能对
class
成员使用
static
关键字。如果您试图将
InnerTest
声明为
static
,则可能会出现如下错误(因此假设它不是某个其他类的静态嵌套类)

类InnerTest的非法修饰符;仅公开、抽象& 允许进行期末考试

static
nested
class
可以像前面提到的那样使用,因为它不需要访问
InnerTest
的任何实例成员。换句话说,它可以访问
静态
成员,并且只能访问这些成员


如果它需要访问非静态
成员,那么它不能是静态的,调用的方式类似于新的InnerTest()。新的B()

如何解释这一点:

本身不是
静态的
非静态的
它只是一个

无论如何,您只能对
class
成员使用
static
关键字。如果您试图将
InnerTest
声明为
static
,则可能会出现如下错误(因此假设它不是某个其他类的静态嵌套类)

类InnerTest的非法修饰符;仅公开、抽象& 允许进行期末考试

static
nested
class
可以像前面提到的那样使用,因为它不需要访问
InnerTest
的任何实例成员。换句话说,它可以访问
静态
成员,并且只能访问这些成员


如果它需要访问非静态的
成员,那么它就不能是
静态的
,调用的方式就像
new InnerTest()。new B()

为什么你认为
类A
应该是
静态的
?为什么你认为
类A
应该是
静态的