2022-07-20第七组姜珊 学习笔记


构造器/this:

什么时候用构造器赋值?

  • 看创建对象是为了干什么?
  • 如果说创建对象仅仅是为了调用这个类的方法,建议使用无参构造器
  • 如果说创建对象的时候需要使用到对象的某个属性,可以使用构造器赋值
ublic class Ch01 {

    public static void main(String[] args) {
        // person是Person类的对象,是Person类的实例
        Person person = new Person();
        // 对象有什么功能?
        // 对象可以调属性,可以调方法
        // 对象调用的属性和方法
        person.name = "小明";
        person.age = 20;
//        person.eat();

        Car car = new Car();
        car.brand = "奔驰";
        car.color = "黑色";
//        car.run();

//        person.travel(car);

        // p2出生,就会有name,age,wife
        Wife wife = new Wife();
        wife.name = "李四";
        wife.age = 25;
        // p2一创建出来,所有的属性都会跟着初始化
        Person p2 = new Person("张三",25,wife);

        // p3一创建出来,就只有name和age,没有wife
        Person p3 = new Person("王五",26);
    }
}

this关键字

  • this代表的是当前类的对象,this代表的是当前方法的调用者

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

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

  • 一个类中可以有什么?

  • 属性,方法,构造器

  • this不能用在static方法中。

  • 开发中,this通常用在什么位置!

  • 通常用在赋值,构造器赋值。

    调用构造器

    不需要写任何的名字
    this调用构造器的要求
    1、必须在构造器中使用this调用构造器
    2、必须是第一句话(第一行代码)

2022-07-20第七组姜珊 学习笔记

无参构造器

2022-07-20第七组姜珊 学习笔记

租借关系,不写在成员变量,声明局部变量

例子1

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

有一个Debit类,有cardId,password,balance(余额)属性

Person类有一个开户的方法,openAccount,in(余额增加),out(余额减少,取款时要判断余额)Debit类中有一个显示银行卡信息的方法。
赋值的方式:

1.构造器(建议)

2.直接通过.属性的方式赋值

分析:

开户:给Person类的Debit属性赋值,Debit初始化时需要给cardId,password,balance赋值

最终在Demo类中测试相关功能
加功能:键盘输入,存款和取款需要比对密码。

加键盘输入:

哪些地方是需要我们来输入的?

1.密码,余额

2.存多少钱

3.取多少钱

在哪里写键盘输入Scanner写在哪里?

Scanner应该出现在main里

demo类

public class Demo {
		public static void main(String[] args) {
        Person person = new Person("张三",25);
        Debit debit = new Debit("665544998877",123456,100);
        person.openAccount(debit);
        person.in(151);
        person.out(200);
        person.out(100);
    }
}

Person类

public class Person {

    String name;
    int age;

    Debit debit;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void openAccount(Debit debit) {
        this.debit = debit;
        // 开户成功,显示一下开户信息
        debit.show();
        show();
    }

    public void in(double money) {
        // 存款:修改余额并且重新赋值
        debit.balance += money;
        System.out.println("存款成功!余额为:" + debit.balance);
    }

    public void out(double money) {
        // 取款:修改余额并且重新赋值
        if(money <= debit.balance){
            debit.balance -= money;
            System.out.println("取款成功!余额为:" + debit.balance);
        }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;
    }
}

Debit类

public class Debit {

    String cardId;
    int password;
    double balance;

    public Debit(){}

    public Debit(String cardId, int password, double balance) {
        this.cardId = cardId;
        this.password = password;
        this.balance = balance;
    }

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

2.0版本

public class Demo02 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Person person = new Person("张三",25);
        for(;;){
            System.out.println("请选择功能:1.开户  2.存款  3.取款");
            String flag = sc.next();

            switch (flag) {
                case "1":
                    System.out.println("请输入账户密码:");
                    int password = sc.nextInt();
                    System.out.println("请输入余额:");
                    double balance = sc.nextDouble();
                    Debit debit = new Debit("654987",password,balance);
                    person.openAccount(debit);
                    break;
                case "2":
                    System.out.println("请输入密码:");
                    int pass = sc.nextInt();
                    // 接下来要去比对密码。
                    // 存款的时候需要比对密码
                    // 取款也需要比对密码
                    // 既然两个地方都需要比对密码,那我们可以把类似功能的代码封装成一个方法
                    // 如果说一堆的方法都需要重复使用,我们还可以把一堆的方法封装成一个类
                    boolean b = person.valid(pass);
                    if(b){
                        System.out.println("请输入存款金额:");
                        double money = sc.nextDouble();
                        person.in(money);
                    } else {
                        System.out.println("密码有误,无法存款!");
                    }
                    break;
                case "3":
                    System.out.println("请输入密码:");
                    int pass1 = sc.nextInt();
                    boolean b1 = person.valid(pass1);
                    if(b1){
                        System.out.println("请输入取款金额:");
                        double money = sc.nextDouble();
                        person.out(money);
                    } else {
                        System.out.println("密码有误,无法取款!");
                    }
                    break;
            }
        }
    }
}

封装

面向对象的特征:封装

1.代码层面

(1)属性私有化,所有的属性都要使用private封装

(2)提供一个公有的set,get方法。

getter方法能够按照客户的期望返回格式化的数据

setter方法可以限制和检验setter方法传入的参数是否合法

隐藏对象的内部结构

正确定义一个类:

(1)所有的属性私有化

(2)每个属性都有对应的setter、getter方法

2.思想层面

privte私有性;封装,别的类不可以随意调用,用setAge getAge

public static void main(String[] args) {
Person jack = new Person(); //new 一个对象jack
jack.setAge(23); //调用setAge方法,设置age的值
int i = jack.getAge(); //得到age的值赋给i
System.out.println("jack age is:"+i);
}
}

set 是设置 get是得到

你上面的setAge是设置变量age的值,而getAge是得到变量age的值,

这样做的好处是,只要你new Person 对象,就可以用对象来点这些方法。

今日总结:

this代表当前类的对象,代表方法的调用者,通常用在构造器赋值,

  • set方法赋值。当形参名和成员变量的名相同时,赋值操作。

  • 2.封装,思想封装,把一堆重复执行的代码封装成方法。把一堆重复执行的

  • 方法封装成一个类。

  • 3.封装,代码层次的封装,所有的属性私有化。private,每个属性提供对应的

  • setter和getter方法。

  • 以后我们的赋值操作:

  • 1.不再使用对象.属性的方式

  • 2.使用构造器

  • 3.setter方法

  • 习惯:必须保证每个类都有一个无参构造器

构造器:了解,基本会用知道怎么用,但是不熟练

This 用法:基本理解,但是做题的时候需要理解一会,

封装:用法了解,用的时候赋值时容易思路乱

今日学习心得:
知识点了解,但是没有消化掉,自己学习效率比较低,知识运用的不好感觉理解不透彻

原创文章,作者:sunnyman218,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/275532.html

(0)
上一篇 2022年7月20日 02:44
下一篇 2022年7月20日 02:44

相关推荐

发表回复

登录后才能评论