本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
10分59秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 步骤 1 : 基本类型传参 步骤 2 : 引用与= 步骤 3 : 类类型传参 步骤 4 : 练习-传参 步骤 5 : 答案-传参
基本类型传参
在方法内,无法修改方法外的基本类型参数 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);
}
}
如果一个变量是基本类型
比如 int hp = 50; 我们就直接管hp叫变量 =表示赋值的意思。 如果一个变量是类类型 比如 Hero h = new Hero(); 我们就管h叫做引用。 =不再是赋值的意思 =表示指向的意思 比如 Hero h = new Hero(); 这句话的意思是 引用h,指向一个Hero对象
类类型又叫引用
第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);
}
}
在方法中,使参数引用指向一个新的对象
外面的引用是指向原来的对象?还是新的对象? 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); 输出多少? 怎么理解?
}
}
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
7分9秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器
在第31行,调用revive的时候,引用h指向 引用teemo所指向的对象 "提莫"
但是teemo引用,还是指向原来的对象 在第22行,引用h指向了新的对象 "新的提莫" 而原来的"提莫" 对象,没有做任何修改,血量依然是负数 最后问 teemo这个引用所指向的对象, 就是"死" 掉的 "提莫" 血量,负数
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2023-08-09
mark一下
3 个答案
木宇 跳转到问题位置 答案时间:2024-04-27 打卡
wind_lz 跳转到问题位置 答案时间:2024-02-08 -17,上面的错了。。。
Slayerf 跳转到问题位置 答案时间:2024-01-08 383
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2022-04-20
方法内改不了外面的参数的话,那怎么样才能改变血瓶的参数呢
6 个答案
Leslie_sakura 跳转到问题位置 答案时间:2024-04-11 -17 形参只能传递数据,不能改变方法外的数据。形参是有生命的,方法调用完之后h就消亡了。原来的teemo还是原来的teemo
Leslie_sakura 跳转到问题位置 答案时间:2024-04-11 -17 形参只能传递数据,不能改变方法外的数据。
123456LIU 跳转到问题位置 答案时间:2023-03-21 真实的复活那里可以直接赋值,不用再创建一个对象吧
起个名 跳转到问题位置 答案时间:2023-03-20 111111
给你买粉包 跳转到问题位置 答案时间:2022-10-18 芬达味橘猫 跳转到问题位置 答案时间:2022-04-29 方法内可以改外面的参数,外面改不了局部变量
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2020-12-15
个人见解
2020-12-05
那么通过revive方法new的提莫要怎么引用呢?
2020-11-23
关于两个问题的个人理解
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 72 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|