美文网首页
重捡Java(七)类与对象 方法传参

重捡Java(七)类与对象 方法传参

作者: 我很惊讶 | 来源:发表于2020-05-10 21:15 被阅读0次

这有一些常用的东西,有一些概念性的说法容易搞混
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);
        
         
    }

结果是

提莫 攻击了 盖伦
提莫 攻击了 卡牌
可以看到采用这种方式的时候,参数会组成一个数组,之后采用数组的处理方式即可

相关文章

网友评论

      本文标题:重捡Java(七)类与对象 方法传参

      本文链接:https://www.haomeiwen.com/subject/rdrbghtx.html