2022-07-19 第四小组 孙翰章 学习笔记

JAVA5


1.this关键字

        this代表的是当前类的对象,代表的是当前方法的调用者
        this既然代表方法的调用者,它实际上和对象的作用是一样的,既可以调用属性,也可以调用方法。

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

        this不能用在static方法中

        开发中,this通常用在赋值,尤其是构造器赋值

public class Ch01 {
    public static void main(String[] args) {
        Ch01 c = new Ch01();
    }
    public Ch01(){

    }
    public Ch01(String str){
        this.str = str;
    }
    public Ch01(String str,int i){
        //调用构造器
        //不需要写任何的名字
        /*
        this调用构造器的要求
            1.必须在构造器中使用this调用构造器
            2.必须是第一句话(第一行代码)
         */
        this(str);
        this.i = i;
    }
    String str;
    int i;
    public void show(String str){
        /*
            当使用对象去调用属性时,调用的是成员变量
         */
//        Ch01 c = new Ch01();
//        c.str = str;
        this.str = str;//this代表main方法里的c
    }
    public void info(){

    }

}

2.面向对象的特征:封装

(1)代码层面
           a:属性私有化,所有的属性都要用private封装
           b:提供一个公有的set,get方法。
                 getter方法能够按照客户的期望返回格式化数值
                 setter方法可以限制和检验setter方法传入参数是否合法
                 隐藏对象的内部结构
           c:正确定义一个类:
                 所有的属性私有化
                 每个属性都有对应的 set,get方法
(2)思想层面
           a:多个地方都要用同一个功能,那我们可以把类似的功能代码封装成一个方法
           b:如果说多个方法都需要重复使用,我们可以把一堆方法封装成一个类

public class Dog {
    private String color;
    private int age;

    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

3.空指针异常(NullPointerException)

#什么情况下会出现空指针异常?      引用数据类型的默认值(初始值是null,空引用)

3个异常
数组下标越界
内存溢出(错误)
空指针

#案例

注册和登录:
封装:属性一定要私有化,提供共有的set、get方法
1.创建一个User类,username和password
2.创建一个Employee类,id和name
3.Demo类

登录:
输入账号和密码,然后去数组中对比,遍历数组,分别对比账号和密码,如果成功,则输出登录成功

空指针异常 NullPointerException

注册2.0版本:
用户名不能重复
遍历:用户名和数组中的用户名对比一下

public class Demo01 {
    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":
                    if(index == users.length){
                        User [] newUsers = new User[users.length*2];
                        for (int i = 0; i < users.length; i++) {
                            newUsers[i] = users[i];
                        }
                        users = newUsers;
                    }
                    System.out.println("请输入账号:");
                    int username = sc.nextInt();
                    boolean isRight1 = true;
                    for (User u : users){
                        if (u != null){
                            if(username == u.getUsername() ){
                                isRight1 = false;
                            }
                        }
                    }
                    if (isRight1){
                        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 ++;
                    } else {
                        System.out.println("账号重复,注册失败");
                    }


                    break;
                case "2":

                    System.out.println("请输入账号:");
                    int username1 = sc.nextInt();
                    System.out.println("请输入密码:");
                    int password1 = sc.nextInt();
                    boolean isRight = false;
                    for (User u : users) {
//                        if(u != null){
//                            System.out.println(u.getUsername() + "," + u.getPassword());
//                        }
                        if (u != null){
                            if(username1 == u.getUsername() && password1 == u.getPassword()){
                                isRight = true;
                            }
                        }
                    }
                    if (isRight){
                        System.out.println("登陆成功");
                    } else {
                        System.out.println("登陆失败");
                    }
            }


        }

    }
}

4.总结:

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


所学内容能够理解掌握

天气晴 心情良好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值