Java TimeUnit.SECONDS.sleep();

sleep方法没有被static修饰 也没有new对象。为什么可以调用sleep这个方法?

img

TimeUnit是一个枚举,通过反编译你可以知道,枚举的本质就是一个普通的类而已,只不过java自动帮你生成了你所定义的枚举对象。
如你上面的TimeUnit.SECONDS,写大白话如下(当然需要继承一下Enum类,这里就不写了),既然SECONDS是TimeUnit ,自然就可以调用sleep方法了。

class TimeUnit {
    public static final TimeUnit SECONDS = new TimeUnit();
    public void sleep(int s) {
        // do...
    }
}

TimeUnit是枚举 ;枚举值就是当前枚举的对象,对象调用他的实列方法