this关键字

引出this的使用场景:

案例一(通过案例一来引出this的使用场景):

/**
* @ClassName This02
* @Description TODO
* @Author Orange
* @Date 2021/4/21 15:17
* @Version 1.0
**/
public class This02 {
public static void main(String[] args) {
Cat cat1 = new Cat("大壮", 3);
cat1.info();
}
} class Cat { int age; String name; //如果我们的构造器的形参能够直接写成属性名,就更加方便了(起名更加简单)
// public Cat(String dName,int dAge) {// 构造器
// name = dName;
// age = dAge;
// }
//输出结果如下:
//大壮 3 //于是有以下的尝试 ↓
// public Cat(String name, int age) {//构造器
// name = name;
// age = age;
// } //输出结果如下:
//null 0
// 原因分析:因为一个是name是形参name,一个是属性name,
// 这里只是将属性name(值为null)再赋给属性name了而已! //于是我们可以引出相应的解决方法— — — — this!
public Cat(String name, int age) { //构造器
this.name = name; //this.name指的是所调用对象的属性
//而name指的则是形参 name !
this.age = age;
} //输出结果如下:
//大壮 3 public void info() { //成员方法,用来输出成员信息
System.out.println(name + "\t" + age + "\t");
} }

案例二(通过案例二来深入了解this在内存中的使用情况):

/**
* @ClassName This01
* @Description TODO
* @Author Orange
* @Date 2021/4/21 14:12
* @Version 1.0
**/
public class This01 {
public static void main(String[] args) { //hashCode是一种哈希表值,它虽不是真是的地址值
//但是它是由地址生成的一个特殊的对应值,可以通过它来观察this在使用原理 Dog_dog FG = new Dog_dog("峰哥",3);
System.out.println("FG的hashCode = " + FG.hashCode());
FG.info(); Dog_dog FGNB = new Dog_dog("峰哥牛逼!", 4);
System.out.println("FGNB的hashCode = " + FGNB.hashCode());
FGNB.info(); } } class Dog_dog { int age; //属性age
String name; //属性name public Dog_dog(String name, int age) { //构造器 //this.name就是当前对象的属性name,当前对象就是那个对象在调用,就是指那个对象的属性
this.name = name;
//this.age就是当前对象的属性age
this.age = age; System.out.println("this.hashCode = " + this.hashCode());
} public void info() { //成员方法,输出成员X的信息
System.out.println(name + "\t" + age);
}
} /*
程序运行结果:
-------------------------------
this.hashCode = 460141958
FG的hashCode = 460141958
峰哥 3
this.hashCode = 1163157884
FGNB的hashCode = 1163157884
峰哥牛逼! 4
-------------------------------
*/

练习

/**
* @ClassName This_Exercise01
* @Description TODO
* @Author Orange
* @Date 2021/4/22 10:06
* @Version 1.0
**/ //定义一个Person类,里面有name,age属性,并提供compareTo比较方法,
// 用于判断是否和另外一个人相等,提供测试类TestPerson用于测试,
//名字和年龄完全一样,就返回true,否则返回false public class This_Exercise01 {
public static void main(String[] args) {
Person p1 = new Person("峰哥", 20);
Person p2 = new Person("峰哥", 20); System.out.println("p1和p2比较的结果 = " + p1.compareTo(p2));
}
} class Person {
String name;
int age; public Person (String name, int age) {
this.name = name;
this.age = age;
} //compareTo比较方法
public boolean compareTo(Person p) {
//名字和年龄完全一样
// if(this.name.equals(p.name) && this.age == p.age) {
// return true;
//
// }else {
// return false;
// }
return this.name.equals(p.name) && this.age == p.age;
} } /*
程序运行结果:
-----------------------
p1和p2比较的结果 = true
----------------------
*/

小结

  通过案例二可以知道this就是访问本类的成员方法

  但有点不好理解,我的理解就是this相当于一个“对象的形参”,当外部创建了一个本类的新对象时,会将那个对象所指向的堆地址(对象所在的区域)值赋给this,让其也指向相同的堆地址区域,从而实现对象的属性和方法传递的效果,如果外部又有新的对象被创建,那么this又可以指向新对象所指向的地址区域。

  最最最通俗易懂的说法:

  青哥(对象一)说:“我的眼睛很大”,这个"我"(this)指的是青哥(对象一),眼睛(属性)是青哥的眼睛,大(方法)是青哥的眼睛大;

  而峰哥(对象二)说:"我的眼睛很小",同样是"我",这个"我"(this)却指的是峰哥(对象二),眼睛(属性)是峰哥的眼睛,小(方法)是峰哥的眼睛小.

Java笔记_this关键字的更多相关文章

  1. Java笔记 —— this 关键字

    Java笔记 -- this 关键字 h2{ color: #4ABCDE; } a{ color: blue; text-decoration: none; } a:hover{ color: re ...

  2. Java笔记:关键字

    关键字 描述 abstract 抽象方法,抽象类的修饰符 assert 断言条件是否满足 boolean 布尔数据类型 break 跳出循环或者label代码段 byte 8-bit 有符号数据类型 ...

  3. JAVA笔记4__static关键字/对象数组/foreach/方法的可变参数

    /** * static关键字:修饰属性(实质就是全局变量).方法(无需本类的对象即可调用此方法).类. * 1.static方法只能调用static方法 * 2.static方法只能访问static ...

  4. JAVA笔记 -- this关键字

    this关键字 一. 基本作用 在当前方法内部,获得当前对象的引用.在引用中,调用方法不必使用this.method()这样的形式来说明,因为编译器会自动的添加. 必要情况: 为了将对象本身返回 ja ...

  5. JAVA笔记4-static关键字

    1.static方法中不能使用this关键字 2.例题:static成员变量用于计数     

  6. JAVA笔记11-Final关键字

    相当于C++中的const (1)final的变量值(成员变量.局部变量(形参))不可被改变: (2)final的方法不能被重写: (3)final的类不能被继承.

  7. JAVA笔记3-this关键字

    1.          2.例题

  8. Java复习笔记--java中this 关键字

    Java中this关键字,this可以调用类的成员变量和成员方法,this还可以调用类中的构造方法.使用这种方式值得注意的是, 只可以在无参构造方法中的第一句使用this关键字调用有参构造方法. pu ...

  9. Thinking in Java 笔记

    大二就买了这本书,如今再看这本书,看到了一些以前没看的细节,也有了不同的体会.本文使用第4版,整理每章的笔记心得.老外的书有个特点,他会花费大量的文字去阐述一个概念,这比堆代码强多了. 第 1 章 对 ...

  10. TIJ读书笔记05-this关键字

    TIJ读书笔记05-this关键字 概述 this的用法 static方法 概述 两个对象同时调用一个方法,那么jvm怎么知道是哪个方法调用的呢. 我们在书写的时候会写成a.fun(1) 或者b.fu ...

随机推荐

  1. js程序

    JavaScript 程序 计算机程序是由计算机"执行"的一系列"指令". 在编程语言中,这些编程指令被称为语句. JavaScript 程序就是一系列的编程语 ...

  2. 一个比 Redis 性能更强的数据库

    给大家推荐一个比Redis性能更强的数据:KeyDB KeyDB是Redis的高性能分支,侧重于多线程.内存效率和高吞吐量.除了性能改进外,KeyDB还提供主动复制.闪存和子密钥过期等功能.KeyDB ...

  3. 基础雷达图(radar)

    基础雷达图 代码 var chartDom=document.getElementById("radar"); var myChart=echarts.init(chartDom) ...

  4. .NET 8 预览版 1:NativeAOT 升级和新的Blazor United

    .NET团队 今天在官方博客上 发布了.NET 8的第一个预览版,.NET 8 是一个长期支持 (LTS) 版本[1],.NET 的版本包括产品.库.运行时和工具,是 Microsoft 内部和外部多 ...

  5. 题解 [SCOI2008]斜堆

    好题.一道很有趣的性质提. 因为自己搞错结论然后改了 1h(悲 闲话少说,切入正题-- 这是不断插入的,所以根据套路我们会考虑最后一个插入的节点的性质.显然满足: 它是从根不停往左走的路上. 它没有右 ...

  6. DrCush_082020_血清阴性RA确诊延迟

    转自Dr Jack Cush的Twitter (2020-08-20) 梅奥诊所:血清阴性RA的诊断存在延迟-血清阴性的首次关节肿胀距RA确诊为187天,而血清阳性者则为11天(P <.001) ...

  7. video多视频轮播Swiper 播放视频不轮播不循环

    在实际工作中经常会遇到swiper轮播多个视频,播放视频不轮播不循环 loop:true下问题: (1)slides前后会复制若干个slide,成一个环路,不会复制绑定在dom上@click事件, 解 ...

  8. Python连接Hadoop-impala方法

    from impala.dbapi import connectfrom impala.util import as_pandas连接方式 conn1= connect(host='xxx.xxx.x ...

  9. Java语言输出菱形图型

    package fuxi;public class Diamond {    public static void main(String[] args) {        printHollowRh ...

  10. jquery获得标签元素

    一.根据元素name值获取元素 $("元素[name="name的值"]"); 例子:1.$("a[name="apoint"]& ...