Java-使用该类实例引用静态方法



当使用该类实例使用静态方法时,会发生什么?在构建级别和运行时。

提前谢谢。

更新:有两个类,第一类有一个方法,第二类使用该方法,一段时间后该方法变为静态。在运行时,我得到了不兼容的ClassChangeError。

如果从类实例调用静态方法,它与以标准静态方式(即从类名)调用它完全相同。编译器足够聪明,知道如何进行静态调用。

如果你的意思是

class Foo {
  static void bar() { ... }
}
public class Baz {
  public static void main(String... argv) {
    new Foo().bar();  // Use static method here via instance
  }
}

则该实例被完全忽略。

如果你通过反射来完成,那么它也会被忽略。

如果基础方法是静态的,则忽略指定的obj参数。它可能为null。

考虑一下这个场景。。。

Class XYZ{
public static void functionTest(){
 // Your code
}
public static void main(String args[]){
XYZ x = new XYZ();
//Here we can execute the method functionTest() in 2 ways.
x.functionTest();
XYZ.functionTest();
}
}

每个类都会有一个名为Context的类,这意味着所有静态方法和静态变量都会在RAM中分配内存,而不创建该类的对象,我们将该内存称为类的Context。

引用(x)包含两部分,一部分是对象(实例)的实际地址,另一部分是类的上下文地址。

当我们在上面的场景中调用x.function()时,首先它总是搜索类的上下文,如果它在那里找到了方法,它将执行它,如果没有找到,它将从类的实例执行它。

因此,无论您尝试以何种方式执行静态方法,它都将始终从类的上下文执行,而不是从类的实例执行。

这就是为什么类的静态成员可以用两种方式调用的原因。

通过从实例中调用方法,我们不需要创建根本不需要的对象(不必要的内存分配)

相关内容

最新更新