2022-07-19 第八组 张明敏 学习笔记

目录

一、面向对象 

1.面向对象学习的三条主线

2.类和对象的使用

3.成员变量  vs 局部变量

成员变量和局部变量

 二、构造器(构造方法)

1.描述

2.作用:创建对象、给对象初始化

3.格式

4.根据参数的不同可以分为两类

三、this

1.Java中,this关键字的作用很重要,使用在:

2. this的使用

this什么时候使用呢?

访问修饰符

四、封装 

1. 封装的原则和实现步骤

2. 代码实例

 五、实例

1.银行管理系统(开户、存取)

2.员工管理系统

六、心得体会


一、面向对象 

1.面向对象学习的三条主线

1、java类以及类的成员:

        属性  方法   构造方法  代码块  内部类

2、面向对象的三大特征:

        封装性、继承性、多态性(抽象性

3、其它关键字

        this super package import static final abstract interface

 

2.类和对象的使用

  • 创建类 设计类的成员
  • 创建类的对象
  • 通过"对象名.属性"对象名.方法名调用对象的属性方法

如果创建一个类的多个对象则每个对象都独立的拥一套类的属性

注意:如果修改了一个对象的属性a则不影响另一个对象的属性值a的值

类中属性的使用

3.成员变量  vs 局部变量

1、相同点

  •         定义格式  数据类型  变量名 = 变量值
  •         先声明  在使用
  •         变量都有自己的作用域

2、不同点

 2.1定义的位置不同

  •         属性:直接定义在类的{}里面
  •         局部变量:声明在方法内、方法的的参数、代码块、构造器内部的变量

     

 2.2作用范围不一致

  •         从声明她开始到包含他最近的大括号

       

2.3关于权限修饰符的不同

  •         public private 缺省   protected
  •         属性:可以在声明属性时,使用访问权限修饰符指明其权限
  •         局部变量:不可以加以访问权限修饰符

     

  2.4默认初始化的值

  •         属性:类的属性,根据其类型,都有默认初始值
  •         整型4个:0
  •         浮点型2个:0.0
  •         字符型1个:0
  •         引用数据类型:null
  •         boolean:false
  •         局部变量:没有默认初始化的值

     

  2.5在内存中的位置不同

  •         属性:加载到堆空间中(非static)
  •         局部变量:加载到栈空间中
  •         属性(成员变量)
  •         定义在类里面,作用域范围整个类里面
  •         可以访问权限修饰符  public private 缺省   protected
  •         有默认初始化值(可以只进行声明)
  •         在堆空间中(非static)

       

2.6局部变量:

  •         定义在方法  形参  代码块  构造方法(形参)中
  •         没有访问权限修饰符
  •         没有默认值(使用前必须声明+初始化)
  •         在栈空间

 

成员变量和局部变量

成员变量局部变量
声明的位置直接声明在类中方法形参或内部、代码块内、构造器内等
修饰符private、public、static、final等不能用权限修饰符修饰, 可以用final修饰
初始化值有默认初始化值没有默认初始化值, 必须显式赋值, 方可使用
内存中加载的位置堆空间或静态域内栈空间

 

 二、构造器(构造方法)

1.描述

  • 和类的名称相同
  • 不声明返回值类型
  • 不能被static、final、synchronized、abstract、native等修饰,不能有return返回值

2.作用:创建对象、给对象初始化

Person p = new Person("zs","18");

3.格式

修饰符  类名 (参数列表){

        初始化语句;

}

 public Person() {
    System.out.println("父类无参构造");
  }
  public Person(String name,int age) {
    System.out.println("父类有参构造");
  }

 

4.根据参数的不同可以分为两类

隐式无参构造器(系统默认提供,创建有参构造之后就没有了)

显式定义一个或多个

注意点:

① Java语言中,每个类都至少有一个构造器(系统默认提供)

② 默认构造器的修饰符与类的修饰符一致

③ 一旦显式定义了构造器, 则系统不再提供默认构造器

④ 一个类可以创建多个重载的构造器

⑤ 父类的构造器不可被子类继承

 

三、this

1.Java中,this关键字的作用很重要,使用在:

  • 它在方法内部使用,及这个方法所属对象的引用;
  • 他在构造器内部使用,表示该构造器正在初始化的对象。
  • this可以调用类的属性、方法和构造器。

2. this的使用

  1. this可以用来修饰、调用属性、方法、构造器
  2. this修饰  属性 方法
  3. this理解为:当前的对象 或 当前正在创建的对象
  4. 在类的方法中,通过如下方式调用对象的属性和方法
  5. this.属性通常情况下会将this省略,特殊情况下,如果方法的形参类的属性同名,必须显示使用"this.变量"的方式表明此变量是属性,而非形参(this.方法)
  6. this调用构造器
  7. this(参数列表)
  • ①在构造器类通过this调用构造方法,必须放在方法的第一行。
  • ②构造器不能通过this(参数)的方式调用自己
  • ③如果类中有n个构造器,则最多有n-1个构造器中this(形参)
  • ④一个构造器中只能声明一个"this(形参列表)"用来调用其他东西

 

this什么时候使用呢?

当前方法内部需要用到调用该方法的对象时,就用this。

 

访问修饰符

Java的权限修饰符在类的成员之前,用来限定对象对该类成员的访问权限。

修饰符本类同一个包不同包同一项目
private
缺省
protected
public

属性赋值的先后顺序

①默认初始化:int age;

②显式初始化:int age = 1;

③在代码块中赋值

④构造器中初始化:person  p = new Person(12);

⑤通过"对象.方法名  /(对象名.属性)方式赋值

先后顺序:①-->②/③-->④-->⑤

 

四、封装 

1. 封装的原则和实现步骤

封装的原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

封装的实现步骤

  • 使用 private 关键字来修饰成员变量。
  • 对需要访问的成员变量,提供对应的一对 getXxx 方法 、 setXxx 方法。
  • 在公共方法(getXxx方法、setXxx方法)中加入控制语句
  • private是访问权限修饰符,代表最小权限。被private修饰后的成员变量和成员方法,只在本类中才能访问。
  • 通过使用访问控制修饰符来限制对对象属性的访问,可以获得 3 个重要的好处。
  • 防止对封装数据的未授权访问。
  • 有助于保证数据完整性。
  • 当类的私有实现细节必须改变时,可以限制发生在整个应用程序中的“连锁反应”。

2. 代码实例

 public class User {
     private String name; // 姓名
     private int age; // 年龄
     private String phone; // 联系电话
     private String address; // 家庭住址
 
     public String getName() {
         return name;
    }
 
     public void setName(String name) {
         this.name = name;
    }
 
     public int getAge() {
         return age;
    }
 
     public void setAge(int age) {
         // 对年龄进行限制
         if (age < 18 || age > 40) {
             System.out.println("年龄必须在18到40之间!");
             this.age = 20; // 默认年龄
        } else {
             this.age = age;
        }
    }
 
     public String getPhone() {
         return phone;
    }
 
     public void setPhone(String phone) {
         this.phone = phone;
    }
 
     public String getAddress() {
         return address;
    }
 
     public void setAddress(String address) {
         this.address = address;
    }
 }

 

 五、实例

1.银行管理系统(开户、存取)

public class Person2 {
    //人 有名字、年龄、银行卡
        String name;
        int age;
        Debit debit;

        //必须写无参构造器
        public Person2() {
        }

        public Person2(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(String pass){
            if ( pass== debit.password){
                return true;
            }
            return false;
        }
    }
//银行卡类
public class Debit {
    //属性
    String cardId;
    String password;
    double balance;

    //无参构造器
    public Debit(){
    }

    //有参构造器
    public Debit(String cardId, String password, double balance) {
        this.cardId = cardId;
        this.password = password;
        this.balance = balance;
    }

    //展示
    public void show() {
        System.out.println("卡号" + cardId + "余额" + balance);
    }
}
import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {

        //键盘输入
        Person2 person = new Person2("张三", 25);
        Scanner sc = new Scanner(System.in);
        boolean fl = true;
        while (fl) {
            System.out.println("请选择功能: 1.开户  2.存款  3.取款  4.退出");
            String flag = sc.next();
            switch (flag) {
                case "1":
                    System.out.println("请输入账号");
                    String num = sc.next();
                    System.out.println("请输入密码");
                    String pass = sc.next();
                    System.out.println("请输入余额");
                    double money1 = sc.nextDouble();
                    Debit debit = new Debit(num, pass, money1);
                    person.openAccount(debit);
                    break;


                case "2":
                    System.out.println("请输入密码");
                    String pass1 = sc.next();
                    boolean b = person.valid(pass1);
                    if (b) {
                        System.out.println("请输入存款金额:");
                        double money = sc.nextDouble();
                        person.in(money);
                    } else {
                        System.out.println("密码有误,无法进入");
                    }

                    break;

                case "3":
                    System.out.println("请输入密码");
                    String pass2 = sc.next();
                    boolean p = person.valid(pass2);
                    if (p) {
                        System.out.println("请输入取款金额:");
                        double money2 = sc.nextDouble();
                        person.out(money2);
                    } else {
                        System.out.println("密码有误,无法进入");
                    }
                    break;
                case "4":
                    fl = false;
                    break;

            }

        }
    }
}

2.员工管理系统

//员工管理系统  注册登录
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;
//        User user=new User();
//        users[0]=user;1

        for (; ; ) {
            System.out.println("请选择功能:1、注册  2、登录");
            String flag = sc.next();
            switch (flag) {
                case "1":
                    System.out.println("请输入账号:");
                    int username = sc.nextInt();
                    System.out.println("请输入密码:");
                    int password = sc.nextInt();
                    // 保存账号密码,保存的是User对象
                    // 构建User对象
                    User user = new User(username, password);
                    users[index] = user;
                    System.out.println("注册成功,账号:" + username + ",密码:" + password);
                    index++;
                    break;
                case "2":
                    System.out.println("请输入账号:");
                    int username1 = sc.nextInt();
                    System.out.println("请输入密码:");
                    int password1 = sc.nextInt();
//

                    boolean b = false;
                    for (User u : users) {
                        if (u != null) {
                            if (u.getUserword() == password1 && u.getUsername() == username1) {
                                b = true;
                                break;
                            }
                        }
                    }
                    if (b) {
                        System.out.println("登录成功");
                        Demo01 demo01 = new Demo01();
                        demo01.foo();
                    } else {
                        System.out.println("登陆失败");
                    }



            }
        }
    }


    }
public class Demo01 {
    public void foo(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("欢迎使用员工管理系统:");
        int[] nos = new int[2];
        String[] names = new String[2];
        boolean flag1 = true;
        int i = 0;

        while(true) {
            label75:
            while(flag1) {
                System.out.println("请选择功能:1、添加员工 2、查询员工 3、修改员工 4、删除员工 5退出系统");
                int c = scanner.nextInt();
                int x;
                int p;
                switch(c) {
                    case 1:
                        System.out.println("请输入员工姓名:");
                        String name = scanner.next();
                        names[i] = name;
                        int oldid = 1001 + i;
                        nos[i] = oldid;
                        System.out.println("工号:" + nos[i] + "姓名" + name + "添加成功");
                        System.out.println("欢迎进入员工系统");
                        i++;
                        if (i < nos.length) {
                            break;
                        }

                        int[] newnos = new int[nos.length + 1];
                        String[] newnames = new String[names.length + 1];

                        for(p = 0; p < nos.length; ++p) {
                            newnos[p] = nos[p];
                            newnames[p] = names[p];
                        }

                        nos = newnos;
                        names = newnames;
                        break;
                    case 2:
                        System.out.println("请输入员工编号:");
                        boolean f = false;
                        int num = scanner.nextInt();

                        for(p = 0; p < nos.length; ++p) {
                            if (num == nos[p]) {
                                System.out.println("员工编号是:" + num + "员工姓名是:" + names[p - 1]);
                                f = true;
                            }
                        }

                        if (!f) {
                            System.out.println("员工不存在");
                        }
                        break;
                    case 3:
                        System.out.println("请输入员工号:");
                        boolean e = false;
                        int num1 = scanner.nextInt();

                        for(x = 0; x < nos.length; ++x) {
                            if (num1 == nos[x]) {
                                System.out.println("员工编号是:" + num1 + "员工姓名是:" + names[x]);
                                System.out.println("请输入要修改的姓名");
                                String name1 = scanner.next();
                                names[x] = name1;
                                System.out.println("修改后的员工号和姓名是:" + num1 + names[x]);
                                e = true;
                                break;
                            }
                        }

                        if (!e) {
                            System.out.println("员工不存在");
                        }
                        break;
                    case 4:
                        System.out.println("请输入要删改工号:");
                        x = scanner.nextInt();
                        int y = 0;

                        while(true) {
                            if (y >= nos.length) {
                                continue label75;
                            }

                            if (x == nos[y]) {
                                nos[y] = nos[nos.length - 1];
                                nos = Arrays.copyOf(nos, nos.length - 1);
                                names[y] = names[names.length - 1];
                                names = (String[])Arrays.copyOf(names, names.length - 1);
                                System.out.println("删除成功");
                            }

                            ++y;
                        }
                    case 5:
                        flag1 = false;
                        System.out.println("退出系统");
                }
            }

            return;
        }
    }
}
public class User {
    private int username;
    private int userword;

    public User(){}

    public User(int username, int password) {
        this.userword=password;
        this.username=username;
    }

    public void setUsername(int username) {
        this.username = username;
    }

    public void setUserword(int userword) {
        this.userword = userword;
    }

    public int getUsername() {
        return username;
    }

    public int getUserword() {
        return userword;
    }
}

 

六、心得体会

今天还好,把昨天的又复习了一下,能跟上了,就是写着有点费劲,不过还是能听懂,自己能写出一些了,还是挺累的,坐的腰都疼了,哎!!!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值