2022-7-19 学习日记(10th day)this关键字+构造方法

目录

this.关键字

调用方法:

this()访问构造方法:

例题:

 心得体会:


this.关键字

this代表的是当前类的对象

this代表的是当前方法的调用者,

this既然是代表方法的调用者,它实际上和对象的作用是一样的

既可以调属性,也可以调方法。

一个类中可以有什么? 属性,方法,构造器。 

this调用构造器,不用方法名,不需要写任何名字 

必须在构造器中使用this调用构造器

必须是第一句话(第一行代码)

this(str)

this不能用在static方法中。

开发中,this通常用来赋值。

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

例:

假设有一个动物类,定义如下:

public class Animal{
    private String name;//动物姓名
    private int age;//年龄
}

 在上述代码中,动物姓名和年龄都是私有的,因此在类外部,无法被方法所调用,因此我们可以为Animal类添加一个构造方法,然后再构造方法中传递参数进行修改。

//创建构造方法(构造器),为属性赋值
public Animal(String name,int age){
    this.name=name;//动物姓名
    this.age=age;//动物年龄
}

 这样类外部方法再调用就可以调用过去了。

调用方法:

通常用一个方法调用另一个方法首先得先定义类:

public class Animal{
    public void jump(){
        System.out.println("正在执行jump方法");
    }
    public void run(){
        Animal a=new Animal();
        a.jump();
        System.out.println("正在执行run方法");
    }
}

 我们学了this,我们用this来看看能不能调用同一类中的方法:

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

 这样就省了定义类的代码量。但其实大部分时候,一个方法访问该类中定义的其他方法、成员变量的时候加不加this都是可以的。

this()访问构造方法:

下面定义一个Person类,使用this()调用构造方法给name赋值:

public class Person {
    String name;
    // 无参构造方法(没有参数的构造方法)
    public Person() {
        this("张三");
    }
    // 有参构造方法
    public Person(String name) {
        this.name = name;
    }
    // 输出name和age
    public void sout() {
        System.out.println("姓名:" + name);
    }
    public static void main(String[] args) {
        Person p = new Person();
        p.sout();
    }
}

 输出结果:张三

注意:

this()不能在普通方法中使用,只能写在构造方法中。

在构造方法中使用时,必须是第一条语句。

例题:

有一个Person类,有name,有age属性

有一个Debit类,有cardId,password,balance属性

Person类有一个开户的方法,openAccount(存款),in(余额增加),out(余额减少)

Debit类中有一个显示银行卡信息的方法。(账号和余额)

运用构造器的方式:

 Debit类:

public class Debit {
    int cardId;//卡号
    int password;//密码
    double balance;//余额
    public Debit(){}//无参构造方法
    public Debit(int cardId,int passwor){
        this.cardId=cardId;
        this.password=password;
    }
    public Debit(int cardId,int password,double balance){
        this.balance=balance;
        this.cardId=cardId;
        this.password=password;
    }

    public void show(){
        System.out.println("卡号"+cardId+"余额"+balance);
    }
}

 Person类:

public class Person {
    String name;
    int age;
    Debit debit;
    public Person(){}
    public Person(String name,int age){
        this.age=age;
        this.name=name;
    }
    public Person(String name,int age,Debit debit){
        this.age=age;
        this.name=name;
        this.debit=debit;
    }
    public void openAccount(Debit debit){
        this.debit=debit;
        debit.show();
        show();
    }
    public void in(double banlance){
        debit.balance+=banlance;
        System.out.println("存款成功");
    }
    public void out(double banlance){
        if(banlance<= debit.balance){
            debit.balance-=banlance;
            System.out.println("取款成功");
        }else{
            System.out.println("余额不足,您的余额为:"+ debit.balance);
        }

    }
    public void show(){
        System.out.println("姓名:"+name+".年龄"+age);
    }
    public boolean valid(int pass){
        if(pass == debit.password){
            return true;
        }
        return false;
    }
}

 主方法:Demo类:

public static void main(String[] args) {
        Person p=new Person("小明",18);
        Debit d=new Debit(1362074,123456,10);
        p.openAccount(d);
        p.in(1000);
        p.debit.show();
        p.out(100);
        p.debit.show();
}

输出结果: 

 我们来为这个系统增加一些功能:

1.输入功能。

2.能开户,能存款,能取款

3.取款判断存款够不够。

 Demo类代码实现:

public class Demo {
    public static void main(String[] args) {
        Person p=new Person("小明",18);
        Scanner s=new Scanner(System.in);
        while (true) {
            System.out.println("请输入功能1.开户,2.存款,3.取款");
            int flag = s.nextInt();
            switch (flag) {
                case 1:
                    System.out.println("请输入密码:");
                    int password = s.nextInt();
                    System.out.println("请输入存多少钱?");
                    int money = s.nextInt();
                    Debit d = new Debit(1362074, password, money);
                    p.openAccount(d);
                    break;
                case 2:
                    System.out.println("请输入密码:");
                    int pass=s.nextInt();
                    boolean b=p.valid(pass);
                    if(b) {
                        System.out.println("登陆成功");
                        System.out.println("请输入存多少钱?");
                        double inmoney = s.nextInt();
                        p.in(inmoney);
                    }else{
                        System.out.println("密码错误,无法存款!");
                    }
                    break;
                case 3:
                    System.out.println("请输入密码:");
                    int pass1=s.nextInt();
                    boolean b1=p.valid(pass1);
                    if(b1) {
                        System.out.println("登陆成功");
                        System.out.println("请输入取多少钱?");
                        double outmoney = s.nextInt();
                        p.out(outmoney);
                    }else{
                        System.out.println("密码错误,无法存款!");
                    }
                    break;
                }
            }
        }
    }

 心得体会:

虽然构造器很好用,但是构造器过于霸道,无论你用不用这个参数,你都得带着参数输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值