从静态方法访问非静态成员。我收到错误消息-无法静态引用非静态字段

时间:2018-12-19 07:44:25

标签: java

以下代码给出错误,因为-无法静态引用非静态字段。尽管可以使用类的对象从静态方法访问非静态成员。你能建议一下吗?

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    
    }    
}

1 个答案:

答案 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    
}