【Java】无法从静态上下文引入非静态方法

//: access/IceCream.java
// Demonstrates "private"  keyword.

import sun.security.provider.Sun;

class Sundae{
    private Sundae() {}
    static Sundae makeASundae() {
        return new Sundae();
    }
}
public class IceCream {
    public static void main(String[] args){
        //! Sundae x = new Sundae();

        Sundae x = Sundae.makeASundae();
    }
}

static Sundae makeASundae()和 Sundae makeASundae() 的区别,缺少 static 编译器会报错并给出:无法从静态上下文引入非静态方法。

   因为在静态方法中不能直接调用非静态的方法和属性,一个静态类的class文件在被加载之后,就可以由这个class类型对象直接调用,而非静态方法需要一个实例对象,有可能还未创建。为了避免在静态方法中调用一个尚未存在的实例对象的非静态方法,编译器会阻止这个行为。

你可能感兴趣的:(Java)