学习笔记--Java中this关键字
Java中this关键字
关于Java语言中的this关键字
- this 是一个关键字,翻译为:这个
- this 是一个引用,一个变量,this变量中保存的内存地址指向自身
- 每一个对象都有自己的this,创建多少Java对象,就有多少个不同的this
- this存储在JVM堆内存中的Java对象中
- this可以出现在实例方法中,this指代当前执行对应实例方法的对象引用
- this不能使用在有
static的方法中
测试1:
public class Customer {
// 姓名
String name;
// 构造方法
public Customer(){
}
// 顾客购物的行为
// 不带 static 关键字
// 没有 static 的变量和方法分别称为实例变量和实例方法
// 实例变量和实例方法的调用需要使用引用
// 因为没有一个顾客购买不同,所以该方法应使用实例方法
// 注意:当一个行为?动作在执行过程中涉及对象的参与,应该使用实例方法【不带static关键字】
public void shopping(){
System.out.println(this.name + "在购物");
// this 代表当前执行该实例方法的对象引用
}
public static void doSome(){
// System.out.println(name); 报错
// 这个执行过程中没有“当前对象”,因为带有static的方法是 类.方法
// name 实例变量,上述代码表示:访问当前对象的实例变量name
// System.out.println(this); 报错
// 使用static方法调用不需要对象,直接使用类名,所以执行过程中没有当前对象
}
}
public class ThisTest01{
public static void main(String[] args) {
// 创建Customer对象
Customer c1 = new Customer();
c1.name = "jock";
// 创建Customer对象
Customer c2 = new Customer();
c2.name = "rose";
// 顾客购物
c1.shopping();
c2.shopping();
// 带static的方法
Customer.doSome();
}
}
测试2:
public class ThisTest02 {
// 实例变量(引用)
int num = 10;
public static void main(String[] args){
// System.out.println(num); 报错
// this 或 实例变量 不能使用在有 static 的方法中
// System.out.println(this.num); 报错
// 与上面一样
}
}
测试3:
public class ThisTest03 {
public static void main(String[] args) {
// 调用doSome方法
ThisTest.doSome();
// 或者
doSome();
// 调用doOther方法
// ThisTest.doOther() 报错
// 实例方法需要引用和对象,但目前在类自身中
// this.doOther(); 报错
// 因为 main 方法是静态方法带有static
}
// 带有static 静态方法
public static void doSome() {
System.out.println("do some!");
}
// 不带static 实例方法
public void doOther() {
System.out.println("do other!");
}
// 实例方法
public void run() {
// 想要运行run实例方法,需要有对象
System.out.println("run !");
doOther(); // 成功调用
// 运行run说明已经有对象,所以doOther能调用
this.doOther(); // 同理
}
}
结论:
- 在带有static的方法当中不能“直接”访问实例变量和实例方法
- 因为实例变量和实例方法都需要对象的存在
- 而static的方法当中是没有this的,也就是说明当前对象不存在
- 自然也是无法访问当前对象的实例变量和实例方法
this什么时候不能省略
- 用来区分局部变量和实例变量的时候,
this不能省略
public class User {
private int id;
private String name;
/*
public void setId(int a) {
id = a;
}
*/
// 传入参数与id不同可以区分,id是实例变量,a是传入参数
/*
public void setId(int id) {
id = id;
}
*/
// 传入参数与id相同,由于就近原则传入参数为前一个id,后一个是实例变量
// 上述两种含义不同,前者是:实例变量 = 传入参数;后者是:传入参数 = 实例变量
// 传入参数与id相同应该用
public void setId(int id) {
this.id = id;
}
}
this可以使用在哪里?
可以使用在实例方法当中,代表当前对象
语法格式:
this.可以使用在构造器【构造方法】当中,通过当前的构造方法调用其他的构造方法
语法格式:
this(实参列表);
重点:this()只能出现在构造函数第一行
Java面向对象
- 初识Java面向对象
- 区分Java中类与对象
- 面向对象的封装性
- Java构造方法
- Java中this关键字
- Java中static关键字
- Java面向对象的继承
- Java中final关键字
- package和import
学习笔记--Java中this关键字的更多相关文章
- Java复习笔记--java中this 关键字
Java中this关键字,this可以调用类的成员变量和成员方法,this还可以调用类中的构造方法.使用这种方式值得注意的是, 只可以在无参构造方法中的第一句使用this关键字调用有参构造方法. pu ...
- Android学习笔记----Java中的字符串比较
用习惯了C#.C++,在做字符串比较时想当然地使用如下语句: string str1 = "abcd", str2 = "abcd"; if(str1==str ...
- 2.1多线程(java学习笔记) java中多线程的实现(附静态代理模式)
一.多线程 首先我们要清楚程序.进程.线程的关系. 首先进程从属于程序,线程从属于进程. 程序指计算机执行操作或任务的指令集合,是一个静态的概念. 但我们实际运行程序时,并发程序因为相互制约,具有“执 ...
- 设计模式学习笔记——java中常用的设计模式
单例设计模式(Singleton Pattern) 观察者模式(Observer Pattern) 工厂模式(Factory Pattern) 策略模式(Strategy Pattern) 适配器模式 ...
- swift学习笔记 - swift中常用关键字
swift中常用关键字 **用作声明的关键字: ** class.deinit.enum.extension.func.import.init.let.protocol.static.struct.s ...
- 学习笔记--Java中的变量
Java中的变量 /** * 关于 Java 语言当中的变量: * * 1. 什么是变量? * - 变量的本质上来说是内存空间,这块空间有(数据类型.名字.字面值) * - 变量包括三部分:数据类型. ...
- java学习笔记-继承中super关键字
背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...
- Java学习笔记-Java中的常用类
Java中有很多类是很常用的,此处列举System,Runtime,Date,Calendar,Math System System:类中的方法和属性都是静态的 字段摘要 static PrintSt ...
- java学习笔记--java中的基本数组[5]
java基础很重要, 今天呆家看java视频,顺便总结前几周看的java书籍,做一下简单的总结:1:数组的声明,2:数组的赋值: 3:数组的方法: 声明一个数组主要有两种方式: //类型 []数组名字 ...
- java学习笔记——java中对象的创建,初始化,引用的解析
如果有一个A类. 1.例如以下表达式: A a1 = new A(); 那么A是类,a1是引用.new A()是对象.仅仅是a1这个引用指向了new A()这个对象. 2.又如: A a2; A代 ...
随机推荐
- AIRIOT智慧变电站管理解决方案
随着社会电气化进程的加速,电力需求与日俱增,变电站作为电网的关键节点,其稳定性和智能化管理水平直接关系到整个电力系统的高效运作.传统变电站管理平台难以适应现代电力系统复杂管理需求,存在如下痛点: 数据 ...
- 3分钟部署 我的世界(Minecraft) 联机服务
游戏简介 我的世界(Minecraft)是一款沙盒类电子游戏,该游戏以玩家在一个充满着方块的三维空间中自由地创造和破坏不同种类的方块为主题.玩家在游戏中可以在单人或多人模式中通过摧毁或创造精妙绝伦的建 ...
- 计算巢AppFlow-如何在钉钉群实现智能答疑
随着大模型能力越来越强大,利用大语言模型进行智能答疑已经成为了一个非常普遍和常见的场景.然而,各个产品或业务方要能够准确有效地进行答疑,仅依靠大模型的通用能力是远远不够的,这时候利用私有领域FAQ文档 ...
- itest(爱测试) 开源接口测试,敏捷测试管理平台10.0.0RC1 发布,重点增加压测功能
一:itest work 简介 itest work 开源敏捷测试管理,包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock,还有压测 ,又有丰富的统计分析,8合1工作站.可按 ...
- flutter+Springboot的结合
我们团队的开发 前端采用flutter 后端采用spring boot 首先 完成了app的图标名字的修改 在app/src/main/res/mipmap 目录中 存放app图标 图片 在Andro ...
- Java验证集合空或验证对象空的方法
import java.util.ArrayList; import java.util.List; import java.util.Objects; import org.springframew ...
- linux nginx命令 查找目录和重启
#查看nginx进程 [root@LinuxServer]$ps -aux | grep nginx root 3229 0.0 0.0 112812 972 pts/0 S+ 16:50 0:00 ...
- SpringBoot3整合SpringDoc实现在线接口文档
写在前面 在现目前项目开发中,一般都是前后端分离项目.前端小姐姐负责开发前端,苦逼的我们负责后端开发 事实是一个人全干,在这过程中编写接口文档就显得尤为重要了.然而作为一个程序员,最怕的莫过于自己写文 ...
- Linux 内核:设备驱动模型(4)uevent与热插拔
Linux 内核:设备驱动模型(4)uevent与热插拔 背景 我们简单回顾一下Linux的设备驱动模型(Linux Device Driver Model,LDDM): 1.在<sysfs与k ...
- Linux 驱动:LED子系统
Linux 驱动:LED子系统 背景 在调试aw9523的时候,为了实现客户要的一个效果.需要修改驱动,但是大概看了一下驱动,但是因为不太熟悉LED子系统,所以有点云里雾里. 参考: https:// ...