编程自学指南:java程序设计开发,Java this 关键字详解,this 的核心本质,this 的四大核心用法(区分变量、调用构造器、方法链式调用、传递对象)

编程自学指南:java程序设计开发,Java this 关键字详解课件

一、课程信息

学习目标

  1. 理解 this 的核心本质:当前对象的引用
  2. 掌握 this 的四大核心用法(区分变量、调用构造器、方法链式调用、传递对象)
  3. 能通过 this 写出简洁安全的代码,避免变量命名冲突
  4. 理解 this 不能在静态上下文中使用的原因

二、课程导入:生活中的 "自己"

🌰 场景模拟:学生自我介绍

  • 每个学生对象有nameage属性
  • 当调用introduce()方法时,需要明确是 "自己" 的属性:
    public void introduce() {
        System.out.println("我是" + name + ",今年" + age + "岁"); 
        // 这里的name和age默认省略了this.
    }
    
  • 思考:如果方法参数名与属性名冲突,如何区分?

三、this 的本质:当前对象的引用

1. 内存角度理解

  • 当对象调用方法时,JVM 会将对象的引用赋值给隐藏的this变量
  • 示例

    java

    Student stu = new Student("张三", 18);
    stu.introduce(); // 等价于 Student.introduce(stu),this指向stu对象
    

2. 打印 this 验证

class Student {
    private String name;
    public Student(String name) {
        this.name = name;
        System.out.println("构造方法中的this:" + this);
    }
    public void sayHello() {
        System.out.println("方法中的this:" + this);
    }
}

// 输出:
// 构造方法中的this:Student@1540e19d
// 方法中的this:Student@1540e19d(同一个对象)

四、this 的四大核心用法

🔧 用法 1:区分成员变量与局部变量(重点)

场景:当方法参数名与成员变量同名时

class Person {
    private String name; // 成员变量
    private int age;

    // 局部变量name和age与成员变量同名
    public Person(String name, int age) { 
        this.name = name; // 左边是成员变量,右边是局部变量
        this.age = age;
    }

    public void setAge(int age) {
        this.age = age; // 区分成员变量age和参数age
    }
}

错误示范

public Person(String name, int age) {
    name = name; // ❌ 赋值给自己,成员变量未初始化
    age = age;
}

🔧 用法 2:在构造器中调用其他构造器(代码复用)

规则

  • 只能在构造器中使用this(参数列表)
  • 必须位于构造器的第一行
  • 不能形成递归调用

示例:阶梯式构造器

class Book {
    private String title;
    private String author;
    private double price;

    // 基础构造器
    public Book(String title) {
        this.title = title;
        System.out.println("调用单参构造器");
    }

    // 调用单参构造器
    public Book(String title, String author) { 
        this(title); // 必须第一行
        this.author = author;
        System.out.println("调用双参构造器");
    }

    // 调用双参构造器
    public Book(String title, String author, double price) {
        this(title, author);
        this.price = price;
        System.out.println("调用全参构造器");
    }
}

// 测试:
new Book("Java编程", "张三", 59.9); 
// 输出:
// 调用单参构造器
// 调用双参构造器
// 调用全参构造器

🔧 用法 3:方法链式调用(提高代码可读性)

场景:连续设置对象属性时

class User {
    private String name;
    private int age;

    public User setName(String name) { 
        this.name = name;
        return this; // 返回当前对象
    }

    public User setAge(int age) {
        this.age = age;
        return this;
    }

    public void printInfo() {
        System.out.println("姓名:" + name + ",年龄:" + age);
    }
}

// 链式调用:
new User()
    .setName("李四")
    .setAge(20)
    .printInfo(); // 输出:姓名:李四,年龄:20

🔧 用法 4:传递当前对象

场景:将当前对象作为参数传递给其他方法

class Teacher {
    private String name;

    public Teacher(String name) {
        this.name = name;
    }

    public void introduceTo(Teacher other) {
        System.out.println(other.name + "老师,你好!我是" + this.name);
    }

    public void callIntroduce() {
        Teacher mathTeacher = new Teacher("王老师");
        introduceTo(mathTeacher); // 传递mathTeacher对象
        introduceTo(this); // 传递当前对象(自己)
    }
}

// 测试:
new Teacher("李老师").callIntroduce();
// 输出:
// 王老师,你好!我是李老师
// 李老师,你好!我是李老师(自己和自己打招呼)

五、初学者必避的 3 大误区

误区 1:在静态方法中使用 this

class Test {
    static void staticMethod() {
        System.out.println(this); // ❌ 编译错误!
    }
}

原因:静态方法属于类,不属于任何对象,没有当前对象引用

误区 2:构造器中调用顺序错误

public Book(String title, String author) {
    this.price = 0; // 先赋值
    this(title); // ❌ 必须放在第一行
}

误区 3:方法链忘记返回 this

public User setName(String name) {
    this.name = name;
    // 忘记写return this;
}
// 调用时会报错:setAge() cannot be called on void

六、课堂练习

练习 1:完善 Student 类

需求

  • 包含namescore属性
  • 提供无参构造器(默认姓名 "无名氏",分数 0)
  • 提供全参构造器
  • 无参构造器通过this()调用全参构造器

参考实现

class Student {
    private String name;
    private int score;

    public Student() {
        this("无名氏", 0); // 调用全参构造器
    }

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }
}

练习 2:用 this 实现计数器

需求

  • 每次创建对象时,计数器加 1
  • 通过getCount()方法获取总对象数

提示:使用静态变量 + this 配合

七、课程总结

知识图谱:

this关键字 → 当前对象的引用  
   ↳ 区分变量:this.成员变量  
   ↳ 调用构造器:this(参数)(第一行)  
   ↳ 方法链:return this  
   ↳ 传对象:作为参数传递  

口诀记忆:

“this 代表我自己,变量冲突靠它解,
构造调用放首行,方法连缀要返回,
静态方法不能用,牢记它是对象级!”

八、课后作业

必做 1:实现用户信息链式设置

需求

  • 定义User类,包含idnameemail属性
  • 每个setter方法返回this
  • 主方法中用链式调用设置并打印信息

必做 2:用 this 解决命名冲突

场景

  • 定义Circle类,构造器参数名为radius
  • 成员变量也叫radius
  • 提供计算面积的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值