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. nginx解决vue跨域问题

    location /epayapi { proxy_pass http://127.0.0.1:7011; proxy_set_header Host $host; proxy_set_header ...

  2. 经典this指向问题

    代码如下 function f1() { this.p = function(){ // 这里 this 跟的是p这个func,谁调用p,就跟谁 console.log(this); } return ...

  3. P14_协同工作-开发者的权限说明以及如何维护项目成员

    不同项目成员对应的权限 开发者的权限说明 开发者权限:可使用小程序开发者工具及对小程序的功能进行代码开发 体验者权限:可使用体验版小程序 登录权限:可登录小程序管理后台,无需管理员确认 开发设置:设置 ...

  4. EPICS Archiver Appliance在Centos7的定制部署

    EPICS Archiver Appliance的定制部署1 EPICS Archiver Appliance的定制部署2 上面两篇是在Centos8下成功,后来又想在Centos7下跑成功,按上面的 ...

  5. Centos7搭建hadoop3.3.4分布式集群

    目录 1.背景 2.集群规划 2.1 hdfs集群规划 2.2 yarn集群规划 3.集群搭建步骤 3.1 安装JDK 3.2 修改主机名和host映射 3.3 配置时间同步 3.4 关闭防火墙 3. ...

  6. noip2020模拟赛 背包 (knapsack)

    题目 区间 \(01\) 背包 \(1 \le l_i \le r_i \le n \le 20000,1 \le q \le 100000,1 \le m_i \le 500, 1 \le w_i ...

  7. JZOJ 4299. 【NOIP2015模拟11.2晚】舳舻牌

    题目 思路 倒序 \(DP\) 设 \(f_{i,j}\) 表示 \(A\) 先手,当前 \(A\) 报出的值为 \(i\),\(B\) 报出的值为 \(j\),\(A\) 取诱惑值大于等于 \(i\ ...

  8. 【译】.NET 7 中的性能改进(五)

    原文 | Stephen Toub 翻译 | 郑子铭 循环提升和克隆 (Loop Hoisting and Cloning) 我们之前看到PGO是如何与循环提升和克隆互动的,这些优化也有其他改进. 从 ...

  9. HTML5基本网页结构以及标签的改变

    转载csdn:https://blog.csdn.net/z983002710/article/details/76300327

  10. Shell命令-基础

    Shell命令 1 变量 定义变量时,变量名不加美元符号$,注意,变量名和等号之间不能有空格 a="myname" 用语句给变量赋值时, for file in `ls /etc` ...