为什么我们不能使用具有相同名称的静态和实例方法? Java如何处理静态方法以及如何通过JVM确定静态方法的调用?
答案 0 :(得分:2)
static keyword表示类成员。在类中可以有以下类成员
实例成员表示单个对象的属性和行为,而类成员表示类的属性行为。
回答你的问题,静态方法不是这种情况,你定义的任何方法是静态的还是实例的,你不能初始化另一个同名的方法。 在java中,任何静态数据成员和静态方法都在类或方法区域中加载。
在加载课程后,执行以下说明
使用类的名称调用任何静态数据成员或方法(表示类行为)。
classname.Methodname(arguments if any)
类成员对所有对象都是通用的,因此它们可用于类的对象:也可以调用为: -
objectrefrence.methodname(arguments if any)
答案 1 :(得分:2)
2.10.2方法签名
方法的签名包括方法的名称以及方法的形式参数的数量和类型(第2.10.1节)。类不能声明具有相同签名的两个方法。
请注意,修饰符(public
,static
等)不是JVM用于查找方法的签名的一部分。
有分别用于调用static
和非static
方法的不同字节码指令:invokestatic和invokevirtual,但两者都希望方法签名能够识别要调用的方法
有可能更改字节码规范,以便 invokestatic 查找具有给定签名和static
修饰符的方法,但这需要更改Java反射的工作方式,并打破了很多现有的代码。它也可能会破坏invokedynamic等新的调用机制。