public class InnerTest {
public static void main(String arg[]) {
A.B.print();
}
}
class A {
static class B {
static void print() {
System.out.println("Hello");
}
}
}
如何使用类名A调用静态类B,尽管类A不是静态的
答案 0 :(得分:3)
这与要静态的类无关,它与方法中的static关键字相关。
看看How static keyword exactly works in Java?还阅读了这篇文章Java – Static Class, Block, Methods and Variables
答案 1 :(得分:1)
另外一个方面如何解释这个:
class
本身不是static
或non static
它只是class
。
无论如何,您只能将static
个关键字用于class
个成员。如果您尝试将InnerTest
声明为static
,则会出现类似于此的错误(因此假设它不是某个其他类的静态嵌套类)
InnerTest类的非法修饰符;只有公共的,抽象的和 允许进入决赛
static
嵌套class
可以用作问题,因为它不需要访问InnerTest
的任何实例成员。换句话说,它可以访问static
成员,只能访问那些成员。
如果需要访问non static
成员,则不能static
,而且调用方式可能就像new InnerTest().new B()
。
答案 2 :(得分:0)
static
关键字用于修改类的成员。使用static
修改成员时,可以使用附带的类直接访问该成员。 name,而不是像使用非静态成员一样使用封闭类的实例。
下面的内部类Inner
是类Outer
的成员:
class Outer {
static class Inner {}
}
因此,可以像这样访问Inner
:
Outer.Inner
Outer
不需要/ static
无法修改,因为它不是班级的成员。它是一个存在于全球范围内的类。要访问它,只需写下其名称 - Outer
即可。它是非静态的没有意义,因为它没有封闭的类。如果它是非静态的,你应该如何访问它?
答案 3 :(得分:0)
要使用正确的术语,B类不是内部类;它是一个静态嵌套类。有关各种嵌套类的定义,请参阅https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html。
重要的关键字是B类定义前面的static
关键字.A类是否静态无关紧要。事实上,将static
放在A类定义的前面是没有意义的。
因为B类被声明为静态,所以它不会保留对A类实例的引用。