一、今日重点

【√代表掌握了,-代表产生困惑但已解决,×代表没解决】
  • this关键字【√】
  • 封装【√】
  • 练习:
    1.实现用户的登录和注册【√】
    2.银行系统【√】

二、今日知识

  • this关键字
  1. this关键字可以用来访问本类的属性,方法、构造器
  2. this用于区分当前类的属性和局部变量
  3. 访问成员方法的语句:this。方法名(参数列表)
  4. 访问构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中访问另外一个构造器,必须放在第一条语句)
  5. this不能在类定义的外部使用,只能在定义的方法中使用
  6. 开发中,this通常用在赋值,构造器赋值。
public Person(String name,int age) {
        this.name = name;
        this.age = age;

当我们实例化一个对象时我们会调用这个带参数的构造方法,构造方法中的this就代表我们实例化的这个对象。除此之外,this关键字还可以在构造方法中调用另一个构造方法

代码如下

class Person{
  String name;
  int age
  public Person(String name){
    this.name = name;
  }
public Person(String name,int age){
    this(name);//调用第一个构造器
    this.age = age;
  }
}
  • 封装

封装就是把抽象出的数据【属性】和对数据的操作【方法】封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作【方法】,才能对数据进行操作

  • 封装步骤
  1. 将属性进行私有化private
  2. 提供一个public set方法,用于对属性判断并赋值
  3. 提供一个public get方法,用于获取属性的值
  • 代码层面理解封装
  • 属性私有化:所有的属性都要使用private封装
  • 提供一个公有的(public)setget方法
  • getter方法能够按照客户的期望返回格式化的数据
  • setter方法可以限制和检验setter方法传入的参数是否合法
  • 隐藏对象的内部结构
  • 正确定义一个类
  1. 所有的属性私有化
  2. 每个属性都有对应的set和get方法
  3. 这是规矩,必须遵守
public class Dog {
    private int age;
    private String color;
    public void setAge(int age){
        this.age=age;
    }
    public void setColor(String color){
        this.color=color;
    }
 
    public int getAge() {
        return age;
    }
 
    public String getColor() {
        return color;
    }
}
  • 思想层面理解封装
  • 把一堆重复执行(相似功能)的代码封装成方法
  • 把一堆可能重复执行的方法封装成类
  • 所有的属性私有化,由getter和setter方法
  • 以后我们使用赋值的方式:
  • 不在使用对象.属性的方式
  • 使用构造器
  • 使用setter方法

三、练习汇总

  • 练习题:实现用户的注册和登录

User类

public class User {
    private int username;
    private int password;
    public User(){}
    public User(int username, int password) {
        this.username = username;
        this.password = password;
    }
 
    public int getUsername() {
        return username;
    }
 
    public void setUsername(int username) {
        this.username = username;
    }
 
    public int getPassword() {
        return password;
    }
 
    public void setPassword(int password) {
        this.password = password;
    }
}

Demo类

public class Demo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // User类型的数组
        // User类型的数中保存的就是一个一个的User对象
        // 当从User类型的数组中取值的时候,比如说users[0]是一个User类型的对象
 
        User[] users = new User[10];
        int index = 0;
        for (; ; ) {
            System.out.println("请选择功能:1、注册  2、登录");
            String flag = sc.next();
            switch (flag) {
                case "1":
                    c:
                    for (; ; ) {
                        System.out.println("请输入账号:");
                        int username = sc.nextInt();
                        for (User u : users) {
                            if (u != null) {
                                if (username == u.getUsername()) {
                                    System.out.println("账号已被注册");
                                    break c;
                                }
                            }
                        }
                        System.out.println("请输入密码:");
                        int password = sc.nextInt();
                        // 保存账号密码,保存的是User对象
                        // 构建User对象
                        User user = new User(username, password);
                        users[index] = user;
                        System.out.println("注册成功,账号:" + users[index].getUsername() + ",密码:" + users[index].getPassword());
                        index++;
                        break c;
                    }
                    break;
                case "2":
                    System.out.println("请输入账号:");
                    int xxx = sc.nextInt();
                    System.out.println("请输入密码:");
                    int yyy = sc.nextInt();
                    boolean x = true;
                    for (User u : users) {
                        if (u != null) {
                            if (u.getUsername() == xxx && u.getPassword() == yyy) {
                                x = false;
                                break;
                            }
                        }
                    }
                    System.out.println(x ? "登陆失败":"登录成功");
            }
        }
    }
}
  • 练习题:银行系统
  • 有一个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.取款判断存款够不够。

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;
                }
            }
        }
    }

四、学习总结

  1. 觉得今天的内容比较有难度,但比昨天更有趣一些。
  2. 在思想层面上理解起来较为费力,但练习题可以算是掌握,老师讲解的十分清晰。
  3. 今天的作业比较难,希望可以攻克,加油。
posted on 2022-07-19 21:00  宝娟,我的嗓子!  阅读(45)  评论(0)    收藏  举报