how2j.cn

变量有两种类型 基本类型 和类类型

参数也是变量,所以传参分为
基本类型传参
类类型传参

本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



10分59秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)



步骤 1 : 基本类型传参   
步骤 2 : 引用与=   
步骤 3 : 类类型传参   
步骤 4 : 练习-传参   
步骤 5 : 答案-传参   

步骤 1 :

基本类型传参

基本类型传参
在方法内,无法修改方法外的基本类型参数
public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public Hero(){ } //回血 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); System.out.println(xueping); } }
步骤 2 :

引用与=

如果一个变量是基本类型
比如 int hp = 50;
我们就直接管hp叫变量
=表示赋值的意思
如果一个变量是类类型
比如 Hero h = new Hero();
我们就管h叫做引用
=不再是赋值的意思
=表示指向的意思
比如 Hero h = new Hero();
这句话的意思是
引用h,指向一个Hero对象
步骤 3 :

类类型传参

类类型又叫引用
第24行的引用 teemo与 第17行的引用hero是不同的引用
通过调用garen.attack(teemo, 100); 使得这两个引用都指向了同一个对象
所以在第18行hero.hp = hero.hp - damage; 就使得该对象的hp值,发生了变化
因此第25行,打印该对象的Hp值就是变化后的值
类类型传参
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); } }
步骤 4 :

练习-传参

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
在方法中,使参数引用指向一个新的对象

外面的引用是指向原来的对象?还是新的对象?
public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public Hero(){ } public Hero(String name,float hp){ this.name = name; this.hp = hp; } //复活 public void revive(Hero h){ h = new Hero("提莫",383); } public static void main(String[] args) { Hero teemo = new Hero("提莫",383); //受到400伤害,挂了 teemo.hp = teemo.hp - 400; teemo.revive(teemo); //问题: System.out.println(teemo.hp); 输出多少? 怎么理解? } }
步骤 5 :

答案-传参

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

7分9秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


在第21行,调用revive的时候,引用h指向 引用teemo所指向的对象 "提莫"
但是teemo引用,还是指向原来的对象
在第22行,引用h指向了新的对象 "新的提莫"

而原来的"提莫" 对象,没有做任何修改,血量依然是负数

最后问 teemo这个引用所指向的对象, 就是"死" 掉的 "提莫" 血量,负数
答案-传参


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2017-12-10 步骤1代码是错的
长叹



这个代码我觉得不对啊,最后提莫的血倒是加了,可是血瓶还是100,并没有减少
public class Hero {
        
    String name; //姓名
        
    float hp; //血量
        
    float armor; //护甲
        
    int moveSpeed; //移动速度
     
    public Hero(){
         
    }
     
    //回血
    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);
         
        System.out.println(xueping);
         
    }
      
}

							






答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2017-11-25 想请问大家 关于血瓶回血的问题
GunnerJ
如果我考虑把血瓶的概念提出,怎么做到像第一步中的,给提莫一个血瓶,回血后血瓶的值=0呢?




3 个答案

除夕宝宝 答案时间:2018-01-14
下面那个错了,不同类的具体对象是不能调用的,再写了一个

除夕宝宝 答案时间:2018-01-14
你看看我的代码,两不同package。

李章铭 答案时间:2017-12-25
将血瓶继承物品这个类,每用一个血瓶就使用一个血瓶对象。




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-10-15 传参是不是不能实现,复活的血量=初始的血量
2017-10-15 满血复活,随HP设置而改变,传参是不是不能实现?
2017-10-14 给大家一个好记的方法
2017-10-11 请问如果要让teemo的hp再变成原来的383要怎么做呢?
2017-09-20 类类型就是引用类型吗?一样吗?
2017-09-02 对传参这个概念不了解
2017-09-01 对“在方法内,无法修改方法外的基本类型参数”这句话的疑问
2017-08-29 基本类型和类类型区分?
2017-08-16 我感觉传参的过程和增强的for循环差不多
2017-07-30 对方法的调用
2017-04-25 外面的引用指向原来的对象
2017-04-19 老师我这两种输出不同是不是可以这么理解
2017-04-06 关于this的使用问题
2017-03-12 关于是否浪费存储空间
2017-02-10 关于练习题的疑问
2016-12-16 个人解释,大家看下对不对
2016-11-09 步骤一中怎样把血瓶=0的值传回去
2016-06-16 关于练习题的问题。
2016-05-30 补充问题
2016-05-30 26行执行完以后,teemo为什么不是指向新的对象,而还是原来的对象
2016-05-10 第23行"盖伦", 616存在的意义是什么




提问之前请登陆
关于 JAVA 基础-类和对象-传参 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 389538688
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图