Java非静态类定义报错:是否需每次添加static关键字?
Java内部类static关键字问题解答
- 你不需要每次定义类都加
static,问题核心在于你定义的是嵌套在其他类内部的类(内部类),而讲师演示的是直接写在.java文件里的顶级类。 - 顶级类只能用
class直接定义,根本不能加static修饰,这也是讲师的写法能正常运行的原因。 - 针对内部类的
static使用规则:- 如果你的内部类不需要依赖外部类的实例就能创建对象,就需要加
static(这类叫静态内部类); - 如果内部类需要访问外部类的非静态成员变量/方法,就不能加
static(这类叫非静态内部类),但创建非静态内部类对象时,必须先实例化外部类,比如:class Outer { // 非静态内部类 class Inner {} public static void main(String[] args) { // 错误:静态方法里不能直接创建非静态内部类 // Inner inner = new Inner(); // 正确:先创建外部类实例,再创建内部类 Outer outer = new Outer(); Inner inner = outer.new Inner(); } }
- 如果你的内部类不需要依赖外部类的实例就能创建对象,就需要加
- 你之前报错的原因,应该是在静态的
main方法里直接创建了非静态内部类的对象——静态方法属于类本身,而非静态内部类属于外部类的实例,没有外部实例就没法创建它的对象。加static把内部类改成静态的后,它就不再依赖外部实例,所以能直接在main里创建对象,错误也就消失了。
内容的提问来源于stack exchange,提问作者Nirbhik
相关产品推荐
相关产品推荐

