Java虚拟机中静态方法的调用
为什么我们不能有一个同名的静态和实例方法?Java如何处理静态方法以及JVM如何确定静态方法的调用?static关键字表示类成员。在类中可以有以下类成员Java虚拟机中静态方法的调用,java,methods,static,Java,Methods,Static,为什么我们不能有一个同名的静态和实例方法?Java如何处理静态方法以及JVM如何确定静态方法的调用?static关键字表示类成员。在类中可以有以下类成员 静态数据成员 静态块 静态方法 实例成员表示单个对象的属性和行为,而类成员表示类的属性行为 classname.Methodname(arguments if any) 回答你的问题,这不是静态方法的情况,任何你定义的方法无论是静态的还是实例的,你都不能初始化另一个同名的方法。 在java中,任何静态数据成员和静态方法都加载在类或方法区域中
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反射的工作方式,并破坏大量现有代码。它还可能破坏新的调用机制,如。如果它们可以具有相同的名称,编译器将如何区分它们?只要签名不同,它们就可以。:-)@OliCharlesworthClass.method()
vs.obj.method()
@theguy可以从对象引用调用static
方法,因此这会中断。可以补充一点,Java虚拟机可能能够做到这一点。由于可能存在歧义,Java语言不允许这样做。如果它们可以具有相同的名称,编译器将如何区分它们?只要签名不同,它们就可以。:-)@OliCharlesworthClass.method()
vs.obj.method()
@theguy可以从对象引用调用static
方法,因此这会中断。可以补充一点,Java虚拟机可能能够做到这一点。由于可能存在歧义,Java语言不允许这样做。