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. 【MRTK】HoloLens开发基础项目设置

    前言 好记性不如烂笔头,之前做项目的时候很熟练很顺手就没有写笔记.因为排期问题项目中断几个月之后需要重新拾起来,结果发现自己现在忘记得差不多了,于是还是决定写点东西记录一下.即便是简单的项目设置,忘记 ...

  2. Python实现类别变量的独热编码(One-hot Encoding)

      本文介绍基于Python下OneHotEncoder与pd.get_dummies两种方法,实现机器学习中最优的编码方法--独热编码的方法. 目录 1 OneHotEncoder 2 pd.get ...

  3. el-input 限制只能输入正整数

    1.前端页面 <el-row :gutter="20"> <el-col :span="20"> <el-form-item la ...

  4. odoo 为可编辑列表视图字段搜索添加查询过滤条件

    实践环境 Odoo 14.0-20221212 (Community Edition) 需求描述 如下图,列表网仓记录详情页面(form视图),编辑内联视图中的货主记录,为货主和仓库字段搜索,添加过滤 ...

  5. Python绘制神经网络模型图

      本文介绍基于Python语言,对神经网络模型的结构进行可视化绘图的方法.   最近需要进行神经网络结构模型的可视化绘图工作.查阅多种方法后,看到很多方法都比较麻烦,例如单纯利用graphviz模块 ...

  6. JZOJ 4216.平方和

    \(\text{Problem}\) 维护一个序列 支持插入一个数,区间加,询问区间平方和 \(\text{Solution}\) 平衡树很模板的题了 考场打 \(fhq-treap\) 毫无悬念过了 ...

  7. CF1736C1 Good Subarrays (Easy Version)

    题目传送门 思路 给出一种不需要脑子的做法. 首先我们把每个 \(a_i\) 都减去 \(i\),这样原问题就转化为对于每一个左端点 \(i\),寻找一段连续的区间,使得这段区间的最小值加上 \(i- ...

  8. cdq 分治学习笔记

    CDQ 分治是一种很玄学的东西. Part 0 引子 相信大家都会归并排序,又都知道归并排序求逆序对怎么求的 如果连归并求逆序对都不会那你为什么要学 cdq 分治阿喂 void merge_sort( ...

  9. CF863E - Turn Off The TV

    题意:对于若干个闭区间 \([l_i,r_i]\),它们构成了一个集合 \(\bigcup_{i\le n}{[l_i,r_i]}\),求一个 \(k\),使得 \(\bigcup_{i\le n}{ ...

  10. 18 网路进阶设定:Bridge、LACP、VLAN

    18 网路进阶设定:Bridge.LACP.VLAN 18.1 建立第二网路桥接装置(Bridge) 在预设安装完的情况下,PVE会使用其中一个连接埠桥接至[vmbr0]这个预设的网路桥接装置,所有的 ...