this关键字
this关键字
是指当前正在运行的对象,它是位于栈内存
this可以访问类的成员变量/方法
利用this访问成员变量
public class Book {
private int id;
public int getId() {
return this.id;//这里的this是我自己加的,加不加是一样的,这里返回值默认是this.id
}
public void setId(int id) {
System.out.println("this"+this);
this.id = id;//这里的this指当前运行的对象book和book1,可用于调用属性和方法
}
}
public static void main(String[] args) {
Book book=new Book();//创建了一个book对象
System.out.println("book"+book);//输出book内容
book.setId(1);//调用setId方法,这里面有this
Book book1=new Book();//创建了一个book1对象
System.out.println("book1"+book1);
book1.setId(1);//调用的是同一个方法,this是相同的
}
两个对象调用的是同一个方法里面的this,但是this的结果是不一样的,输出结果是:
bookcom.Likujava.Book@1540e19d
thiscom.Likujava.Book@1540e19d
book1com.Likujava.Book@677327b6
thiscom.Likujava.Book@677327b6
可见this是在变化的,在每次new了一个对象之后,this是不同的,当book对象在运行的时候,this跟book是同一个哈西code,但是book1 运行的时候,this又与book1是一样的,this是指当前运行的对象
this访问当前类的构造方法
public Book() {//无参构造方法
//this(给有参构造里面的this数据赋值,这里有参构造里面只有一个this.id只需要赋值);
this(1001);
}
public Book(int id) {//有参构造方法
this.id = id;
}
this充当实际参数和返回的数据
习题:创建一个车类和修车厂类,判断轮子数是否等于四,如果小于4拿去修车厂修,并且将修车厂修好的车轮子数改为4
车类:
@Setter//lombok注解里面的set方法,他包含类里面所有属性的set方法,放这里作用域是source
@Getter//lombok注解里面的get方法,跟setter注释一样的
@NoArgsConstructor//lombok里面的无参构造方法
@AllArgsConstructor//lombok里面的有参构造方法,这里参数包含类里面的所有属性
public class Car {
private String Brand;
private int wheelNum;
public void run(){
if(wheelNum<4){
FixCarfactory fixcar=new FixCarfactory();
fixcar.fixcar(this);
//这里面的this指的是调用该方法的对象,下面创建了car1对象,并且car1调用了该方法
//因此这里可以直接用this代替car1
}
System.out.println(Brand+"正在跑");
}
}
修车厂类:
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class FixCarfactory {
private String name;
public void fixcar(@NonNull Car car){//还得判断一下是否为空,为空的话会出现NPE异常,直接加上lombok里面的注解@NonNull,放在这作用域是class
System.out.println(name+"正在修"+car.getBrand()+"车");
//这里name指的是this.name,也就是FixCarfactory里面的name,我没有给赋值,为null
car.setWheelNum(4);
}
}
运行类(测试修车类):
public class Cartest {
public static void main(String[] args) {
Car car1 = new Car("BMW",3);
//创建car1对象并且初始化类属性的值
car1.run();
System.out.println(car1.getWheelNum());//得到轮子数
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~