Java笔记_this关键字
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关键字的更多相关文章
- Java笔记 —— this 关键字
Java笔记 -- this 关键字 h2{ color: #4ABCDE; } a{ color: blue; text-decoration: none; } a:hover{ color: re ...
- Java笔记:关键字
关键字 描述 abstract 抽象方法,抽象类的修饰符 assert 断言条件是否满足 boolean 布尔数据类型 break 跳出循环或者label代码段 byte 8-bit 有符号数据类型 ...
- JAVA笔记4__static关键字/对象数组/foreach/方法的可变参数
/** * static关键字:修饰属性(实质就是全局变量).方法(无需本类的对象即可调用此方法).类. * 1.static方法只能调用static方法 * 2.static方法只能访问static ...
- JAVA笔记 -- this关键字
this关键字 一. 基本作用 在当前方法内部,获得当前对象的引用.在引用中,调用方法不必使用this.method()这样的形式来说明,因为编译器会自动的添加. 必要情况: 为了将对象本身返回 ja ...
- JAVA笔记4-static关键字
1.static方法中不能使用this关键字 2.例题:static成员变量用于计数
- JAVA笔记11-Final关键字
相当于C++中的const (1)final的变量值(成员变量.局部变量(形参))不可被改变: (2)final的方法不能被重写: (3)final的类不能被继承.
- JAVA笔记3-this关键字
1. 2.例题
- Java复习笔记--java中this 关键字
Java中this关键字,this可以调用类的成员变量和成员方法,this还可以调用类中的构造方法.使用这种方式值得注意的是, 只可以在无参构造方法中的第一句使用this关键字调用有参构造方法. pu ...
- Thinking in Java 笔记
大二就买了这本书,如今再看这本书,看到了一些以前没看的细节,也有了不同的体会.本文使用第4版,整理每章的笔记心得.老外的书有个特点,他会花费大量的文字去阐述一个概念,这比堆代码强多了. 第 1 章 对 ...
- TIJ读书笔记05-this关键字
TIJ读书笔记05-this关键字 概述 this的用法 static方法 概述 两个对象同时调用一个方法,那么jvm怎么知道是哪个方法调用的呢. 我们在书写的时候会写成a.fun(1) 或者b.fu ...
随机推荐
- nginx解决vue跨域问题
location /epayapi { proxy_pass http://127.0.0.1:7011; proxy_set_header Host $host; proxy_set_header ...
- 经典this指向问题
代码如下 function f1() { this.p = function(){ // 这里 this 跟的是p这个func,谁调用p,就跟谁 console.log(this); } return ...
- P14_协同工作-开发者的权限说明以及如何维护项目成员
不同项目成员对应的权限 开发者的权限说明 开发者权限:可使用小程序开发者工具及对小程序的功能进行代码开发 体验者权限:可使用体验版小程序 登录权限:可登录小程序管理后台,无需管理员确认 开发设置:设置 ...
- EPICS Archiver Appliance在Centos7的定制部署
EPICS Archiver Appliance的定制部署1 EPICS Archiver Appliance的定制部署2 上面两篇是在Centos8下成功,后来又想在Centos7下跑成功,按上面的 ...
- Centos7搭建hadoop3.3.4分布式集群
目录 1.背景 2.集群规划 2.1 hdfs集群规划 2.2 yarn集群规划 3.集群搭建步骤 3.1 安装JDK 3.2 修改主机名和host映射 3.3 配置时间同步 3.4 关闭防火墙 3. ...
- 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 ...
- JZOJ 4299. 【NOIP2015模拟11.2晚】舳舻牌
题目 思路 倒序 \(DP\) 设 \(f_{i,j}\) 表示 \(A\) 先手,当前 \(A\) 报出的值为 \(i\),\(B\) 报出的值为 \(j\),\(A\) 取诱惑值大于等于 \(i\ ...
- 【译】.NET 7 中的性能改进(五)
原文 | Stephen Toub 翻译 | 郑子铭 循环提升和克隆 (Loop Hoisting and Cloning) 我们之前看到PGO是如何与循环提升和克隆互动的,这些优化也有其他改进. 从 ...
- HTML5基本网页结构以及标签的改变
转载csdn:https://blog.csdn.net/z983002710/article/details/76300327
- Shell命令-基础
Shell命令 1 变量 定义变量时,变量名不加美元符号$,注意,变量名和等号之间不能有空格 a="myname" 用语句给变量赋值时, for file in `ls /etc` ...