这有一些常用的东西,有一些概念性的说法容易搞混
1.形参。用来接收调用该方法时传递的参数。只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间。因此仅仅在方法内有效。
public void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
System.out.println("a:" + a + " b:" + b);
}
这里边的a,b就是形参,temp是一个局部变量,方法结束,在栈空间中就会被销毁
2.实参。传递给被调用方法的值,预先创建并赋予确定值。就是实际传递的参数。
swap(1,2)
这里1,2就是传递的实参了
3.基本类型参数
在方法内,无法修改方法外的基本类型参数
例:
package j2ee;
public class Hero {
String name; // 姓名
float hp; // 血量
float armor; // 护甲
int moveSpeed; // 移速
//回血
public void huixue(int xp){
hp = hp + xp;
//回血完毕后,血瓶=0
xp=0;//注意,这里修改了血瓶的值
}
public Hero(String name,float hp){
this.name = name;
this.hp = hp;
}
public static void main(String[] args) {
Hero teemo = new Hero("提莫",383);
//血瓶,其值是100
int xueping = 100;
//提莫通过这个血瓶回血
teemo.huixue(xueping);//这里调用了回血的方法,方法里也有让xp=0的表达式
//但其实是不会影响外面的参数值的,xueping这里还是100
System.out.println(xueping);
}
}
4.引用参数(也就是传的是个对象)
因为引用实际上是指向对象地址的,所以操作引用参数的时候,在方法外,对象的值也是会变的
例如:
public class Hero {
String name; // 姓名
float hp; // 血量
float armor; // 护甲
int moveSpeed; // 移动速度
public Hero(String name, float hp) {
this.name = name;
this.hp = hp;
}
// 攻击一个英雄,并让他掉damage点血
public void attack(Hero hero, int damage) {
hero.hp = hero.hp - damage;
}
public static void main(String[] args) {
Hero teemo = new Hero("提莫", 383);
Hero garen = new Hero("盖伦", 616);
garen.attack(teemo, 100);
System.out.println(teemo.hp);
}
}
5.传递可变数量参数
有一种情况是不能确定传递的参数的数量的,这时候可以传递可变数量的参数,写法如下
public void attack(Hero... heros) {
for (int i = 0; i < heros.length; i++) {
System.out.println(name + " 攻击了 " + heros[i].name);
}
}
public static void main(String[] args) {
Hero teemo = new Hero("提莫",383);
Hero gran = new Hero("盖伦",383);
Hero card = new Hero("卡牌",383);
teemo.attack(gran,card);
}
结果是
提莫 攻击了 盖伦
提莫 攻击了 卡牌
可以看到采用这种方式的时候,参数会组成一个数组,之后采用数组的处理方式即可