以下代码给出错误,因为-无法静态引用非静态字段。尽管可以使用类的对象从静态方法访问非静态成员。你能建议一下吗?
package dataTypes;
public class CharDemo {
CharDemo cd = new CharDemo();;
char defaultCharValue;
static void defaultCharValue() {
System.out.println("Default char value from static instance method is "+cd.defaultCharValue); //--error
}
public static void main(String[] args) {
System.out.println("Default char value is "+cd.defaultCharValue);//error
}
}
答案 0 :(得分:0)
您不能将非静态上下文直接调用到静态块中。 因为静态上下文与类相关联,而非静态与对象相关联。 所有静态成员都在方法区域中加载类时获取内存,而所有非静态成员在创建对象时(即在堆区域中)都获取内存。
因此,Java不允许直接在静态上下文中使用非静态上下文,而需要在对象的帮助下进行访问。
在cd上方,这会导致问题,因为它是非静态的,并且您试图直接在静态块中进行访问。
您必须执行以下操作:-
public static void main(String[] args) {
CharDemo ch = new CharDemo();
System.out.println("Default char value is "+ch.cd.defaultCharValue);//error
}