Java虚拟机中静态方法的调用

Java虚拟机中静态方法的调用,java,methods,static,Java,Methods,Static,为什么我们不能有一个同名的静态和实例方法?Java如何处理静态方法以及JVM如何确定静态方法的调用?static关键字表示类成员。在类中可以有以下类成员 静态数据成员 静态块 静态方法 实例成员表示单个对象的属性和行为,而类成员表示类的属性行为 classname.Methodname(arguments if any) 回答你的问题,这不是静态方法的情况,任何你定义的方法无论是静态的还是实例的,你都不能初始化另一个同名的方法。 在java中,任何静态数据成员和静态方法都加载在类或方法区域中

为什么我们不能有一个同名的静态和实例方法?Java如何处理静态方法以及JVM如何确定静态方法的调用?

static关键字表示类成员。在类中可以有以下类成员

  • 静态数据成员
  • 静态块
  • 静态方法
  • 实例成员表示单个对象的属性和行为,而类成员表示类的属性行为

    classname.Methodname(arguments if any)
    
    回答你的问题,这不是静态方法的情况,任何你定义的方法无论是静态的还是实例的,你都不能初始化另一个同名的方法。 在java中,任何静态数据成员和静态方法都加载在类或方法区域中

    加载类后,将执行以下说明

  • 静态数据成员(如果定义)是在类区域中创建的
  • 执行静态块(如果定义)
  • 使用类的名称调用任何静态数据成员或方法(表示类的行为)

    classname.Methodname(arguments if any)
    
    类成员对于所有对象都是公共的,因此它们对于类的对象是可用的:也可以通过以下方式调用:-

    objectrefrence.methodname(arguments if any)
    

    static关键字表示类成员。在类中可以有以下类成员

  • 静态数据成员
  • 静态块
  • 静态方法
  • 实例成员表示单个对象的属性和行为,而类成员表示类的属性行为

    classname.Methodname(arguments if any)
    
    回答你的问题,这不是静态方法的情况,任何你定义的方法无论是静态的还是实例的,你都不能初始化另一个同名的方法。 在java中,任何静态数据成员和静态方法都加载在类或方法区域中

    加载类后,将执行以下说明

  • 静态数据成员(如果定义)是在类区域中创建的
  • 执行静态块(如果定义)
  • 使用类的名称调用任何静态数据成员或方法(表示类的行为)

    classname.Methodname(arguments if any)
    
    类成员对于所有对象都是公共的,因此它们对于类的对象是可用的:也可以通过以下方式调用:-

    objectrefrence.methodname(arguments if any)
    
    警察说

    2.10.2方法签名 方法的签名包括方法的名称以及方法的形式参数的数量和类型(§2.10.1)。一个类不能声明具有相同签名的两个方法

    请注意,修饰符(
    public
    static
    等)不是JVM用于查找方法的签名的一部分

    调用
    静态
    和非
    静态
    方法时有不同的字节码指令:和,但它们都需要方法签名来标识要调用的方法

    可以更改字节码规范,以便invokestatic查找具有给定签名和
    static
    修饰符的方法,但这需要更改Java反射的工作方式,并破坏大量现有代码。它还可能会破坏新的调用机制,如。

    2.10.2方法签名 方法的签名包括方法的名称以及方法的形式参数的数量和类型(§2.10.1)。一个类不能声明具有相同签名的两个方法

    请注意,修饰符(
    public
    static
    等)不是JVM用于查找方法的签名的一部分

    调用
    静态
    和非
    静态
    方法时有不同的字节码指令:和,但它们都需要方法签名来标识要调用的方法


    可以更改字节码规范,以便invokestatic查找具有给定签名和
    static
    修饰符的方法,但这需要更改Java反射的工作方式,并破坏大量现有代码。它还可能破坏新的调用机制,如。

    如果它们可以具有相同的名称,编译器将如何区分它们?只要签名不同,它们就可以。:-)@OliCharlesworth
    Class.method()
    vs.
    obj.method()
    @theguy可以从对象引用调用
    static
    方法,因此这会中断。可以补充一点,Java虚拟机可能能够做到这一点。由于可能存在歧义,Java语言不允许这样做。如果它们可以具有相同的名称,编译器将如何区分它们?只要签名不同,它们就可以。:-)@OliCharlesworth
    Class.method()
    vs.
    obj.method()
    @theguy可以从对象引用调用
    static
    方法,因此这会中断。可以补充一点,Java虚拟机可能能够做到这一点。由于可能存在歧义,Java语言不允许这样做。