Java - 为什么静态方法不需要通过 new 对象就可以调用,而普通方法需要?

发布时间 2023-10-31 16:20:53作者: Himmelbleu

在 Java 中,通过类名来调用静态方法的原理涉及到类加载和类初始化的过程。

  1. 类加载:当 Java 程序执行时,类加载器负责加载类的字节码文件到内存中。这是一个类的元数据加载过程,其中包括类的字段、方法、构造函数等信息。静态方法本身也是类的一部分,因此在类加载的过程中,静态方法也会被加载到内存中。
  2. 类初始化:在类加载后,类需要进行初始化。类初始化的过程会执行静态初始化块、静态字段的初始化。

一旦类加载完成并且类初始化已经完成,你就可以通过类名来直接调用静态方法,而不需要创建类的对象实例。也就是说,静态的东西(方法、变量)已经被初始化了,所以我们可以直接调用。

普通方法、非静态成员(变量和方法)属于实例对象,所以只有该对象初始化之后才存在,然后通过类的对象去访问。也就是说如果我们在静态方法中调用非静态成员变量会超前,可能会调用了一个还未初始化的变量,因此编译器会报错。

tip:[start]

这里有个知乎文章,写得还不错,可以看看他的解释。面试官:为什么java中静态方法不能调用非静态方法和变量?

静态方法通常用于实用工具类、静态工厂方法、单例模式等场景。

tip:[end]