一、方法的参数传递机制
方法的参数传递机制:把实参传递给形参。 (实参-->形参)
1、基本数据类型形参
结论:形参是基本数据类型,实参给形参传的是“数据值”,形参值得修改不会影响实参。因为实参是“copy 复制”了一份数据值给形参。
图解:
注意:栈中的内存区域是按照方法来划分的,方法被执行时,就会给这个方法单独分配一块区域。执行完毕后,就会作为垃圾被回收。
2、引用数据类型形参
结论:形参是引用数据类型,实参给形参传的是“地址值”,形参对象的属性值修改会影响实参对象的属性值。
图解:
二、方法重载
1、方法重载(overload)
方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与 修饰符 和 返回值类型 无关。
参数列表:个数不同,数据类型不同,顺序不同;
重载方法调用:JVM 通过方法的参数列表,调用不同的方法
2、方法重载与下列因素相关
-
- 参数个数不同;
- 参数类型不同;
- 参数的多类型顺序不同;
3、方法重载与下列因素无关
-
- 与参数的名称无关;
- 与方法的返回值类型无关;
三、命令行参数
命令行参数:给 main 方法传递的实参,叫做命令行参数。
因为 main 方法也是一个有参无返回值的方法,那么如果给 main 方法传参数呢?
语法格式:
1 | java main所在的类名 实参 1 实参 2 ..... |
四、可变参数(JDK1.5以后引入)
可变参数:形参列表中出现了“数据类型... 形参名”形式的形参,就是可变参数。
包含可变参数的方法的调用原则:
(1)可变参数的形参部分,可以传入0~n个对应类型的实参,也可以传入对应类型的数组对象
(2)非可变参数的形参部分,原来该怎么传,现在还怎么传
可变参数的声明的原则:
(1)一个方法只能包含一个可变参数
(2)可变参数必须是形参列表的最后一个
需求一:求0~n个整数的累加和。
方式一:
1 public static int sum(int[] nums){
2 int sum = 0;
3 for(int i=0; i<nums.length; i++){
4 sum += nums[i];
5 }
6 return sum;
7 }
缺点:每次传入参数的时候必须要声明一个数组,不够方便。
方式二:
1 public static int sum(int... nums){
2 //nums当成数组用
3 int sum = 0;
4 for(int i=0; i<nums.length; i++){
5 sum += nums[i];
6 }
7 return sum;
8 }
作为可变参数使用,更加的灵活了,其实nums还是相等于一个数组。但是不能与上面的方式一同时声明使用。
需求二:声明一个方法,功能:可以求1~n个整数的最大值
1 public static int max(int num1, int... nums){
2 int max = num1;
3 for(int i=0; i<nums.length; i++){
4 if(nums[i] > max){
5 max = nums[i];
6 }
7 }
8 return max;
9 }
注意:int num1就是非可变参数部分,必须传入值;int... nums 是可变参数,而且,可变参数必须是形参列表的最后一个。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器