学习-Java类和对象之this关键字

:学习-Java类和对象之this关键字

100

  • 任务要求
  • 参考答案
  • 评论22

任务描述

本关任务:编写一个商品结算的小程序。

相关知识

为了完成本关任务,你需要掌握:this 关键字的使用。

this 关键字

大部分时候,普通方法访问其他方法、成员变量时无需使用 this 前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用 this 前缀。

接下来我们看个例子:

 
  1. public class Demo {
  2. String name;
  3. public Demo(String name) {
  4. this.name = name;
  5. }
  6. }

我们可以看到成员变量与形参的名称相同,都为 name,那么我们如何区分呢?

在 Java 语言中规定使用 this 关键字来代表本类对象的引用。在上述代码中, this.name 就指的是 Demo 类中的成员变量 name, 而等于号右边的 name 就是形参,这句话的意思是把形参 name 的值赋值给成员变量 name。

接下来我们进行一个测试。

 
  1. public class Demo {
  2. String name = "张三";
  3. public Demo(String name) {
  4. this.name = name;
  5. }
  6. public static void main(String[] args) {
  7. Demo demo = new Demo("李四");
  8. System.out.println(demo.name);
  9. }
  10. }

执行结果:

 
  1. 李四

当一个类的属性(成员变量)名与访问该属性的方法参数名相同时,则需要使用 this 关键字来访问类中的属性,以区分类的属性和方法中的参数。

this 关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或实例变量。

来看个例子:

 
  1. public class Demo {
  2. public void KeyBoard(){
  3. System.out.println("准备好了键盘");
  4. }
  5. // 定义一个方法,该方法需要借助 KeyBoard 方法
  6. public void WritingCode(){
  7. // 使用this引用run方法
  8. this.KeyBoard();
  9. System.out.print("我正在敲代码");
  10. }
  11. public static void main(String[] args) {
  12. Demo demo = new Demo();
  13. demo.WritingCode();
  14. }
  15. }

执行结果:

 
  1. 准备好了键盘
  2. 我正在敲代码

在现实世界里,对象的一个方法依赖于另一个方法的情形很常见,例如,吃饭方法依赖于拿筷子方法。这种依赖都是同一个对象两个方法之间的依赖。因此,Java 允许对象的一个成员直接调用另一个成员,可以省略 this 前缀。也就是说,将上面的 run( ) 方法改为如下形式也完全正确。

 
  1. public void run() {
  2. jump();
  3. System.out.println("正在执行run方法");
  4. }

大部分时候,一个方法访问该类中定义的其他方法、成员变量时,加不加 this 前缀的效果是完全一样的。

需要注意的是,对于 static 修饰的方法而言,可以使用类来直接调用该方法,如果在 static 修饰的方法中使用 this 关键字,则这个关键字就无法指向合适的对象。所以,static 修饰的方法中不能使用 this 引用。并且 Java 语法规定,静态成员不能直接访问非静态成员。

省略 this 前缀只是一种假象,虽然程序员省略了调用 WritingCode() 方法之前的 this,但实际上这个 this 依然是存在的。

this( ) 用来访问本类的构造方法,括号中可以有参数,如果有参数就是调用指定的有参构造方法。

下面定义一个 Student 类,使用 this( ) 调用构造方法给 name 赋值,Student 类的代码如下所示:

 
  1. public class Student {
  2. String name;
  3. // 无参构造方法
  4. public Student() {
  5. this("张三");
  6. }
  7. // 有参构造方法
  8. public Student(String name) {
  9. this.name = name;
  10. }
  11. public static void main(String[] args) {
  12. Student stu = new Student();
  13. System.out.println(stu.name);
  14. }
  15. }

执行结果:

 
  1. 张三

注意:

  • this( ) 不能在普通方法中使用,只能写在构造方法中;
  • 在构造方法中使用时,必须是第一条语句。
/**
 * 任务:编写一个商品结算的小程序
 * 类名为:Shop
 */

// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/

public class Shop {
    // 定义该商品的两个属性:价格(double)和数量(int)
    double price;
    int total;

    // 将形参的值赋值给成员变量
    public Shop(double price, int total) {
        this.price=price;
        this.total=total;
    }

    // 该方法实现计算价钱的功能,将计算结果返回,价钱 = 价格 * 数量
    public double sum() {
        return price*total;
    }
}

/********** End **********/

 

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值