我能够创建静态内部类的实例而不会出现编译错误。这是什么意思? java如何允许为静态类创建对象?请帮助我。
public class StringMatrix {
static class moves{
int x;
int y;
moves(int x,int y){
this.x=x;
this.y = y;
}
static moves[] movements = {new moves(0,1),new moves(1,1),new moves(0,-1),new moves(1,0),new moves(-1,0),new moves(-1,-1),new moves(-1,1),new moves(1,-1)};
}
}
答案 0 :(得分:2)
这些不是内部类,而是"静态嵌套类"。它们在其外部类中声明为static,这意味着它们可以在没有外部类的实例化的情况下存在。它们实际上只是在另一个类中定义的普通类,以便使代码更易于阅读和更好地分组。
有关详细信息,请参阅Java's documentation
答案 1 :(得分:1)
Java允许创建静态内部类。
静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包。
您可以使用封闭的类名访问静态嵌套类: 像
StringMatrix.moves
为什么我们需要静态嵌套类?
不需要静态嵌套类。但是,您可以提出这样的论点:如果两个类仅一起使用 - 例如A类使用辅助类B,而B从不单独使用 - 那么静态嵌套类就是可行的方法。换句话说,通过使B只是一个普通的老类,偶然发现它的程序员可能会尝试使用它。如果B是静态嵌套类,则更明确的是它具有与A相关的特殊用途。
答案 2 :(得分:1)
当内部类是static
时,它与顶级类的差异非常小:它以类似于名称空间的方式使用其外部类,并且可以访问其外部的其他静态成员类,而不必指定类的名称。在所有其他方面,它与顶级类相同:特别是,它可以从静态上下文实例化,就像在代码示例中那样。
非静态内部类添加对其外部类的实例的隐式引用。这就是改变实例化规则的原因 - 现在你需要一个外部类的实例来实例化一个内部类。
答案 3 :(得分:0)
这只是一种在一个文件中一起定义两个相关类的方法。要实例化你的移动类,你可以这样做:
int x=1;
int y=1;
moves m = new StringMatrix.moves(x,y);