2022-7-19 学习日记(10th day)java面向对象(封装)

目录

封装:

什么时候用封装?

 为什么要用封装?

用一个Dog类做例子:

写个例子:

  心得体会:


封装:

什么时候用封装?

某一堆/某一项功能可能重复使用好几次--封装成一个方法

 为什么要用封装?

 如果用private定义变量,外部最多只能赋值,但却不能获取。所以用getter,setter方法。

1.代码层面

        属性私有化:所有的属性都要使用private封装

        提供一个公有的(public)setget方法

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

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

        隐藏对象的内部结构

正确定义一个类:

        所有属性私有化

        每个属性都有setter,getter方法----------------整合框架,代码更整洁

2.思想层面

用一个Dog类做例子:

通过set方法给变量赋值,通过get获取。

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

写个例子:

实现用户的注册和登录!

封装,所有属性一定要私有化,提供公有的set,get方法

1.创建一个User类,username和password

2.Demo类

数据保存在哪?保存在user类型的数组里

思路:

输入账号和密码,然后取数组中的账号和密码进行对比。 

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 ? "登陆失败":"登录成功");
            }
        }
    }
}

  心得体会:

总结:
        this代表当前类的对象,代表方法的调用者,通常用在构造器赋值
        set方法赋值,当形参名和成员变量的名相同,赋值操作
        封装,思想封装,把一堆重复执行的代码封装成方法。把一堆重复执行的方法封装成一个类
        封装,代码层次的封装,所有的属性私有化private每个属性提供setter,getter方法
以后我们的赋值操作:
        1.不再使用对象,属性的方式
        2.使用构造器(过于强势,出来的时候就是带着属性的值)
        3.setter方法赋值。
习惯:
        保证每个类都有一个无参构造器。

你可能感兴趣的:(java学习日记,java,学习)