2026/4/9 13:09:27
网站建设
项目流程
产品定制网站,公司管理系统图,网络销售怎么聊客户,超大尺寸哔哩哔哩网站个人主页 目录前言#x1f525; Part 1: 方法重载 (Method Overloading)1.1 什么是方法重载#xff1f;1.2 为什么需要方法重载#xff1f;1.3 重载规则与示例规则1#xff1a;参数个数不同规则2#xff1a;参数类型不同规则3#xff1a;参数顺序不同#xff08;类型不同…个人主页目录前言 Part 1: 方法重载 (Method Overloading)1.1 什么是方法重载1.2 为什么需要方法重载1.3 重载规则与示例规则1参数个数不同规则2参数类型不同规则3参数顺序不同类型不同的情况下 Part 2: 可变参数 (Variable Arguments / Varargs)2.1 什么是可变参数2.2 可变参数的规则2.3 方法重载与可变参数的“邂逅”结尾前言深入探讨Java方法中两个非常重要且实用的概念方法重载 (Overloading)和可变参数 (Varargs)。理解并掌握它们让你的代码更加灵活、简洁可读 Part 1: 方法重载 (Method Overloading)1.1 什么是方法重载想象一下你在遥控一个机器人想让它“前进”。但“前进”的方式有很多种可以指定前进的步数也可以指定前进的距离米还可以指定前进的时间。// 让机器人前进 robot.move(10); // 前进10步 robot.move(2.5); // 前近 2.5米 robot.move(5, seconds); // 前进5秒在Java中这种在同一个类中允许存在一个以上的同名方法只要它们的参数列表不同就被称为方法重载。简单总结方法重载必须满足以下条件在同一个类中方法名相同参数列表不同参数的个数、类型、或者顺序至少有一项不同 关键点方法重载与方法的返回值类型、访问修饰符无关。编译器在区分它们时只看方法签名方法名 参数列表。1.2 为什么需要方法重载方法重载的主要目的是提高代码的可读性和易用性。如果没有重载我们可能需要为功能类似但参数不同的方法起不同的名字例如// 不使用重载代码繁琐且不易记忆publicintaddTwoInts(inta,intb){...}publicintaddThreeInts(inta,intb,intc){...}publicdoubleaddTwoDoubles(doublea,doubleb){...}而使用重载我们可以统一使用add方法让代码更优雅、更直观// 使用重载代码清晰统一publicintadd(inta,intb){System.out.println(执行 add(int, int));returnab;}publicintadd(inta,intb,intc){System.out.println(执行 add(int, int, int));returnabc;}publicdoubleadd(doublea,doubleb){System.out.println(执行 add(double, double));returnab;}// 调用时JVM会根据你传入的参数自动匹配对应的方法add(5,10);// 调用第一个add方法add(5,10,15);// 调用第二个add方法add(3.14,2.71);// 调用第三个add方法1.3 重载规则与示例规则1参数个数不同publicclassPrinter{publicvoidprint(){System.out.println(打印默认内容);}publicvoidprint(Stringcontent){System.out.println(打印: content);}}规则2参数类型不同publicclassCalculator{publicintmax(inta,intb){returnab?a:b;}publicdoublemax(doublea,doubleb){returnab?a:b;}}规则3参数顺序不同类型不同的情况下publicclassDataSwapper{publicvoiddisplay(intid,Stringname){System.out.println(ID: id, Name: name);}publicvoiddisplay(Stringname,intid){System.out.println(Name: name, ID: id);}} 注意只有返回值不同不构成重载下面的代码是错误的无法通过编译。因为编译器在调用find()时无法确定该调用哪个方法。// 编译失败publicclassFinder{publicintfind(){return1;}publicStringfind(){returnfound;}} Part 2: 可变参数 (Variable Arguments / Varargs)2.1 什么是可变参数在JDK 1.5中Java引入了一个新特性——可变参数。它允许你将任意数量的同类型参数传递给方法。它的语法很简单就是在参数类型后面加上三个点...。例如我们要写一个求和方法既能求2个数的和也能求100个数的和在没有可变参数之前我们可能需要用数组来实现// 传统方式使用数组publicintsum(int[]numbers){inttotal0;for(intnum:numbers){totalnum;}returntotal;}// 调用时需要先创建一个数组sum(newint[]{1,2,3});sum(newint[]{10,20,30,40,50});而有了可变参数一切都变得简单了// 使用可变参数publicintsum(int...numbers){// 在方法内部可变参数 numbers 被当作一个数组来处理inttotal0;for(intnum:numbers){totalnum;}returntotal;}// 调用时非常灵活sum(1,2,3);sum(10,20,30,40,50);sum();// 甚至可以不传参数此时 numbers 是一个空数组2.2 可变参数的规则一个方法最多只能有一个可变参数。// 错误不能有两个可变参数publicvoidwrongMethod(int...a,String...b){}可变参数必须是方法的最后一个参数。// 正确publicvoidcorrectMethod(Stringstatus,doublescore,int...userIds){}// 错误可变参数必须在最后publicvoidwrongMethod(int...userIds,Stringstatus){}2.3 方法重载与可变参数的“邂逅”当一个方法被重载且其中一个版本使用了可变参数时需要特别注意调用的匹配规则。编译器会优先匹配固定参数的方法。看下面的例子publicclassOverloadWithVarargs{// 版本1固定参数publicvoidtest(inta,intb){System.out.println(执行 test(int, int));}// 版本2可变参数publicvoidtest(int...a){System.out.println(执行 test(int...));}publicstaticvoidmain(String[]args){OverloadWithVarargsobjnewOverloadWithVarargs();obj.test(1,2);// 精确匹配调用版本1obj.test(1,2,3);// 只能匹配版本2obj.test(1);// 只能匹配版本2}}在这个例子中test(1, 2)完全符合test(int a, int b)的签名所以JVM会精确匹配它而不是宽泛的可变参数版本。只有在找不到更精确的匹配时才会选择可变参数的方法。结尾方法重载提供了强大的灵活性让我们可以用统一的方法名处理不同类型的输入核心在于同名不同参。可变参数简化了处理不定数量参数的场景让代码调用更简洁其本质是语法糖底层实现为数组。掌握好这两个工具能让你的Java代码库将会更加优雅和强大。希望这篇讲解对你有所帮助。⭐ 如果这对你有帮助不妨收藏和分享一下