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浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


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

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

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


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


问答区域    
2018-12-13 传参
Manis
一个引用只能指向一个对象,不能指向多个对象 一个对象可以同时被多个引用所指向 21行代码: public void revive(Hero h){ 创建引用1 26行代码: Hero teemo = new Hero("提莫",383); 创建引用2 >> 指向对象1 (提莫 383) 31行代码: teemo.revive(teemo); 使引用1 和引用2指向 同一对象>>对象1 22行代码: h = new Hero("提莫",383); 使引用1 >> 指向对象2 (提莫 383) 这时引用1 和引用2指向不同对象 输出引用1则为对象1的值




1 个答案

广告位招租 答案时间:2018-12-25
这里最后应该是输出 引用2 吧;引用2即死去的提莫 对象 输出的值为负




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




2018-12-07 传参!
小孤心



这道题相当于 public class Hero4 { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public Hero4(){ } public Hero4(String name,float hp){ this.name = name; this.hp = hp; } public static void main(String[] args) { Hero4 teemo = new Hero4("提莫",383); //受到400伤害,挂了 teemo.hp = teemo.hp - 400;//参数要通过构造方法传参,所以受到400伤害,Hero4中的hp仍然为383 Hero4 h = new Hero4("提莫",383); System.out.println(h.hp); //问题: System.out.println(teemo.hp); 输出多少? 怎么理解? System.out.println(teemo.hp); } }
public class Hero4 {
        
	    String name; //姓名
	        
	    float hp; //血量
	        
	    float armor; //护甲
	        
	    int moveSpeed; //移动速度
	     
	    public Hero4(){
	         
	    }
	     
	    public Hero4(String name,float hp){
	        this.name = name;
	        this.hp = hp;
	    }
	 
	   /* //复活
	    public void revive(Hero4 h){
	        h = new Hero4("提莫",383);
	        System.out.println(h.hp);
	        System.out.println(this.hp);
	    }*/
	 
	    public static void main(String[] args) {
	        Hero4 teemo =  new Hero4("提莫",383);
	        //受到400伤害,挂了
	        teemo.hp = teemo.hp - 400;//参数要通过构造方法传参,所以受到400伤害,Hero4中的hp仍然为383
	        
	        Hero4  h = new Hero4("提莫",383); 
	        System.out.println(h.hp);
	        //teemo.revive(teemo);
	         
	        //问题: System.out.println(teemo.hp); 输出多少? 怎么理解?
	        System.out.println(teemo.hp);
	}

}

							


1 个答案

小孤心 答案时间:2018-12-07
看一下这个就懂了。 public class Hero5 { String name; //姓名 float hp=100.0f; //血量 float armor; //护甲 int moveSpeed; //移动速度 public static void main(String[] args) { Hero4 teemo = new Hero4(); teemo.hp=383.0f; System.out.println(teemo.hp); } } 输出:383.0




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





2018-11-06 我自己的理解
2018-08-30 引用
2018-08-28 按在地上摩擦~
2018-08-14 英雄伤害溢出
2018-07-21 交作业
2018-06-07 java传参类型为对象时的情况
2018-06-01 交作业呀交作业
2018-06-01 交作业呀交作业
2018-05-27 基础-类和对象-传参 最后输出的xueping为什么不是0啊?
2018-05-23 关于 “在方法内,无法修改方法外的基本类型参数 ” 的理解
2018-05-19 请老师解答关于传入引用参数的疑惑
2018-05-08 答案
2018-04-27 传参的过程
2018-03-20 疑问和提问: teemo.revive(teemo)
2018-03-16 xueping的返回值问题
2017-12-10 步骤1代码是错的
2017-11-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群交流: 902680467
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图