关于java中this关键字的理解

最近搞android,发现自己对于java的基础还是不是很牢固,只能通过写博客进行总结和理解了,毕竟,书写是为了更好的思考。

 


任务描述

本关任务:使用this关键字,设置对象的成员变量。

相关知识

我们先来看一段代码

 

 

输出结果: 传入的name:李四age:10 student属性name:张三age:18

上述结果我们可以发现一个问题,在构造方法中nameage并没有设置成功,stu对象的name属性和age属性的值还是默认定义好的张三18

怎么解决这个问题呢?你需要学习两个知识点:1.什么是成员变量; 2.this关键字。

什么是成员变量

成员变量就是对象的属性:

uploading.4e448015.gif转存失败重新上传取消

this关键字

关于this关键字,你只需要记住它就是指自身this即代表自己,this.属性访问的是自己的属性、this()访问的就是自己的无参构造方法。

例1:this.属性

uploading.4e448015.gif转存失败重新上传取消

例2:this.属性,this()

uploading.4e448015.gif转存失败重新上传取消

输出: I am 张三

可以发现,如果我们把上述this.name = name改为 name = name,那么最终的结果就变成了: I am null

this()调用的是Person自己的无参构造方法,this.name访问的是Person对象自身的name,而方法参数中的name则表示方法传入的值。

学会了this关键字的用法,那本关最开始遇到的问题是不是就有解了呢?

编程要求

右侧编辑器中已经编写好了代码,但是输出结果不能让我们满意,请根据所学知识修改代码,使其能输出如下结果: name:baby age:45 sex:女

测试说明

测试输入: baby45 预期输出: name:baby age:45 sex:女


开始你的任务吧,祝你成功!

 

package step3;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String name = sc.next();
        int age = sc.nextInt();
        String sex = sc.next();
        Person p = new Person(name,age,sex);
        p.display();
    }
}
class Person{
    String name = "张三";
    int age = 18; 
    String sex = "男";
    /********** Begin **********/
    public Person(String name,int age,String sex){
        this(age);
        this.name = name;
        this.sex = sex;
    }
    public Person(int age){
        this.age = age;
    }
    public void display(){
        String name = "李四";
        int age = 11;
        String sex = "男";
        System.out.println("name:" + this.name);
        System.out.println("age:" + this.age);
        System.out.println("sex:" + this.sex);
    }
    /********** End **********/
}

然后,便是this和super在继承中的不同之处,请看下面代码:

7368a4d18e904b9fa7367faeddbe2175.png

 

import java.util.Scanner;

public class Main {
    static int x;
    static int y;
    static int z;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        x = in.nextInt();
        y = in.nextInt();
        z = in.nextInt();
        Sub sub = new Sub( x, y, z);
        System.out.println(sub.calculate(x, y, z));


    }

    public static class Base {
        int x, y;
//
    }

    public static class Sub extends Base {
        int  z;
        public  Sub(int x, int y, int z) {
            this.x = x; //先访问Sub内的成员变量,如果Sub类内找不到,就会在父类内寻找
            this.y = y;
            //或者
            //  super.x=x;
//              super.y=y;
            this.z = z;


        }

        public int calculate(int x, int y, int z) {


            return x * y * z;

        }

    }




}

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天真小巫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值