学习笔记--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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了