how2j.cn

this这个关键字,相当于普通话里的“

小明说 “我吃了” 这个时候,“” 代表小明
小红说 “我吃了” 这个时候,“” 代表小红
""代表当前人物

this这个关键字,相当于普通话里的“
this即代表当前对象

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



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



步骤 1 : this代表当前对象   
步骤 2 : 通过this访问属性   
步骤 3 : 通过this调用其他的构造方法   
步骤 4 : 练习-构造方法(this)   
步骤 5 : 答案-构造方法(this)   

步骤 1 :

this代表当前对象

this代表当前对象
public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 //打印内存中的虚拟地址 public void showAddressInMemory(){ System.out.println("打印this看到的虚拟地址:"+this); } public static void main(String[] args) { Hero garen = new Hero(); garen.name = "盖伦"; //直接打印对象,会显示该对象在内存中的虚拟地址 //格式:Hero@c17164 c17164即虚拟地址,每次执行,得到的地址不一定一样 System.out.println("打印对象看到的虚拟地址:"+garen); //调用showAddressInMemory,打印该对象的this,显示相同的虚拟地址 garen.showAddressInMemory(); Hero teemo = new Hero(); teemo.name = "提莫"; System.out.println("打印对象看到的虚拟地址:"+teemo); teemo.showAddressInMemory(); } }
步骤 2 :

通过this访问属性

通过this关键字访问对象的属性
public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 //参数名和属性名一样 //在方法体中,只能访问到参数name public void setName1(String name){ name = name; } //为了避免setName1中的问题,参数名不得不使用其他变量名 public void setName2(String heroName){ name = heroName; } //通过this访问属性 public void setName3(String name){ //name代表的是参数name //this.name代表的是属性name this.name = name; } public static void main(String[] args) { Hero h =new Hero(); h.setName1("teemo"); System.out.println(h.name); h.setName2("garen"); System.out.println(h.name); h.setName3("死歌"); System.out.println(h.name); } }
步骤 3 :

通过this调用其他的构造方法

如果要在一个构造方法中,调用另一个构造方法,可以使用this()
public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 //带一个参数的构造方法 public Hero(String name){ System.out.println("一个参数的构造方法"); this.name = name; } //带两个参数的构造方法 public Hero(String name,float hp){ this(name); System.out.println("两个参数的构造方法"); this.hp = hp; } public static void main(String[] args) { Hero teemo = new Hero("提莫",383); System.out.println(teemo.name); } }
步骤 4 :

练习-构造方法(this)

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
参考练习-构造方法 设计一个构造方法,但是参数名称不太一样,分别是
String name
float hp
float armor
int moveSpeed

不仅如此,在这个构造方法中,调用这个构造方法

public Hero(String name,float hp)
步骤 5 :

答案-构造方法(this)

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

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


public class Hero { String name; // 姓名 float hp; // 血量 float armor; // 护甲 int moveSpeed; // 移动速度 // 带一个参数的构造方法 public Hero(String name) { System.out.println("一个参数的构造方法"); this.name = name; } // 带两个参数的构造方法 public Hero(String name, float hp) { this(name); System.out.println("两个参数的构造方法"); this.hp = hp; } // 带有四个参数的构造方法 public Hero(String name, float hp, float armor, int moveSpeed) { this(name,hp); this.armor = armor; this.moveSpeed = moveSpeed; } public static void main(String[] args) { Hero teemo = new Hero("提莫", 383); System.out.println(teemo.name); Hero db = new Hero("死哥",400,27,360); System.out.println(db.moveSpeed); } }


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


问答区域    
2017-12-02 作业
颓废的鱼



实践是真理
public class HeroDemo {
	
	String name;
	float hp;
	float armor;
	int moveSpeed;
	public HeroDemo(String name, float hp) {
		super();
		this.name = name;
		this.hp = hp;
	}
	public HeroDemo(String name) {
		super();
		this.name = name;
	}
	public HeroDemo(float hp) {
		super();
		this.hp = hp;
	}
	public HeroDemo(float armor, int moveSpeed) {
		super();
		this.armor = armor;
		this.moveSpeed = moveSpeed;
	}
	public static void main(String[] args) {
		HeroDemo heroDemo=new HeroDemo(15, 30);
		System.out.println(heroDemo.armor);
	}

							


1 个答案

天刚刚破晓丶 答案时间:2017-12-08




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





2017-11-14 一个关于 “this的指向” 的问题
捕时人



按代码运行,输出结果竟然是1。其中的 f 应该是 Zi 类,那么为什么不是输出 2 呢?
public class Demo {
    public static void main(String [] args){
        Fu f = new Zi();
        f.show();
    }
}

class Fu{
    int num = 1;

    void show(){
        System.out.println(this.num);
    }
}

class Zi extends Fu{
    int num = 2;
}

							


2 个答案

Richardhtw 答案时间:2017-11-15
你的疑惑在后面多态这部分可以解决,现在还没讲。

捕时人 答案时间:2017-11-14
还有一个疑惑:Zi继承Fu时已经有了num属性,为什么还能重新定义一个呢?




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





2017-10-31 构造函数重载时,每次都会调用一个参数的函数,尽管实例化时有两个参数,或者多个参数
2017-10-15 小疑问
2017-09-26 交作业
2017-09-17 Java的构造函数没有默认值是吗?
2017-06-19 作业
2017-04-17 this(name); 这个是什么意思呢
2017-03-12 为什么提示我叫我重新命名方法名啊
2017-02-15 this调用问题
2017-01-14 public void 和public 用法的区别
2016-11-18 被调用方法的参数名和调用方法的参数名可以不同吗,this(name,hp)name和hp是类的变量还是方法的参数呢?
2016-09-26 个人理解,看注释部分,不知道对不对
2016-07-27 this()形式调用构造方法和用this调用变量的区别。
2016-06-17 计算量的问题
2016-06-13 是不是用this,就不用在()里面输入不同名字的构造方法??直接用 name, hp等
2016-05-10 第19行this(name); 是什么意思
2016-04-24 步骤三为什么会将两个构造方法里的语句都输出啊?
2016-04-16 请问要在一个构造方法中调用两个构造方法应怎样实现?




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

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

上传截图