Java方法重载代码运行原理咨询:为何输出结果为c?
为什么这段Java代码输出是"c"?
嘿,刚学Java第三天就碰到方法重载的问题,挺不错的!我来给你一步步拆解这段代码的运行机制,帮你搞懂为啥输出的是"c"~
首先先把你的代码贴出来方便对照:
class adarsh { private void print( ){ System.out.println("a"); } private void print(String str){ System.out.println("b"); } private void print(int x){ System.out.println("c"); } public static void main(String[] args){ adarsh object = new adarsh(); object.print(12); } }
核心概念:方法重载(Method Overloading)
这段代码的关键就是Java的方法重载——简单说就是同一个类里可以有多个同名的方法,但它们的参数列表必须不一样(参数的类型、数量、顺序,只要有一个不同就行)。Java会根据你调用方法时传入的参数,自动匹配最对应的那个方法来执行。
代码运行的具体流程
程序启动,执行main方法
当你运行这段代码时,Java虚拟机首先会执行main方法,这里先创建了一个adarsh类的对象object。调用print方法,匹配重载版本
接下来执行object.print(12);,这里传入的参数是12,这是一个int类型的整数。
现在看类里的三个print方法:- 第一个
print():没有参数,和传入12的调用不匹配 - 第二个
print(String str):需要字符串类型的参数,12是整数,也不匹配 - 第三个
print(int x):刚好接收int类型的参数,完全匹配!
- 第一个
执行匹配的方法,输出结果
找到匹配的方法后,Java就会执行这个方法里的代码:System.out.println("c");,所以最终输出就是"c"。
额外补充:私有方法的调用问题
你可能会好奇,这些print方法都是private的,为啥main方法能调用?因为main方法也属于adarsh类本身,同一个类里的方法是可以访问类的私有成员(包括私有方法)的,所以这段代码能正常运行,不会有访问权限的问题。
内容的提问来源于stack exchange,提问作者ghost_83
相关产品推荐
相关产品推荐

