我只是想知道是否有理由不能使用非静态变量执行对象?我能够修复错误,(显然)但我只是想知道为什么。
答案 0 :(得分:2)
在将类加载到JVM
时初始化的静态变量另一方面,实例变量对每个实例具有不同的值,并且在使用new()
运算符或使用Class.newInstance()
运算符创建对象的实例时创建它们反射像{{1}}。
因此,如果您尝试访问非静态变量而没有任何实例编译器会抱怨,因为这些变量尚未创建,并且在创建实例并且它们与任何实例关联之前它们没有任何存在。所以在我看来,只有在静态上下文中禁止非静态或实例变量才有意义的理由是不存在实例。
了解更多here
答案 1 :(得分:0)
如果你有一个依赖于类的变量,并且你试图在静态方法中引用它,那么它将无法编译,因为非静态类变量需要一个实例来初始化。
当加载类时,静态元素会自动初始化为JVM - 实例变量不会,在创建实例时会初始化它们。
查看一些关于类变量的Java Docs,它在原始Oracle手册中有详细描述。例如,您可以启动by looking here。