0
点赞
收藏
分享

微信扫一扫

Java学习记录day05

爱读书的歌者 2022-03-23 阅读 90
java

@[toc] 代码这种不能只看,还得多敲啊

day05

pack关键字的使用

  1. 为了更好的实现项目中的管理,提供包的概念
  2. 使用package声明类或接口所属的包,声明在源文件的首行
  3. 包,属性标识符,遵循标识符的命名规则,规范(xxxyyyyzzzz),见名知意
  4. 每"."一次,代表一层文件目录

import关键字的使用

  1. 在源文件中显示的同时import结构导入指定包下的类、接口

  2. 声明在包的声明和类的声明之间

  3. 需要导入多个结构,并列写出就可以

  4. 也可以使"xxx.*"的方式导入xxx这个包下的所有结构

  5. 如果使用的类或接口是lang包下定义的,则可以省略Import

  6. 如果使用的类或者接口是在同一包内,就可以省略

  7. 如果在源文件中,使用了不同包下的同名的类,则必须至少有一个用全类名的方式显示。

  8. import static组合的使用,调用指定类或者接口下静态的属性或者方法。

    com.atguigu.exer.Account account;//全类名的方式
    

MVC设计模式

是一种常见的设计模式之一:将程序分为三个层次:视图模型层,控制器层与数据模型层。

客户信息管理系统的练习

package com.atguigu.java;

//用来封装客户信息
public class Customer {
    private String name;
    private char gender;
    private int age;
    private String phone;
    private String email;

    public Customer() {
    }

    public Customer(String name, char gender, int age, String phone, String email) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.phone = phone;
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

package com.atguigu.java;

//customer对象的管理模块,内部用数组管理一组customer对象
//并进行增删改查
//
public class CustomerList {
    private Customer[] customers;
    private int total = 0;

    public CustomerList(int totalCustomer) {
        customers = new Customer[totalCustomer];
    }

    public CustomerList() {
    }

    public boolean addCustomer(Customer customer){
        if(total >= customers.length){
            return false;
        }

        customers[total++] = customer;
        return true;
    }

    public boolean replaceCustomer(int index,Customer customer){
        if(index < 0 || index >= total){
            return false;
        }

        customers[index] = customer;
        return true;
    }

    public boolean deleteCustomer(int index){
        if(index < 0 || index >= total){
            return false;
        }
        for(int i = index;i < total - 1;i++){
            customers[i] = customers[i++];
        }
        customers[--total] = null;
        return true;
    }

    public  Customer[] getAllCustomers(){
        Customer[] custs = new Customer[total];
        for(int i = 0;i < total;i++){
            custs[i] = customers[i];
        }
        return custs;
    }

    public Customer getCustomer(int index){
        if(index < 0 || index >= total){
            return null;
        }
        return customers[index];
    }

    public int getTotal(){
        return total;
    }
}

package com.atguigu.java;


import java.util.Scanner;

public class CustomerView {
    private CustomerList customerList = new CustomerList(10);
    private Scanner sc = new Scanner(System.in);

    public CustomerView(){
        Customer customer = new Customer("张三",'男',20,"123450150","12312@136.com");
        customerList.addCustomer(customer);
    }

    public void enterMainMenu(){

        boolean isFlag = true;

        while (isFlag) {

            System.out.println("\n-------------客户信息管理软件---------------");
            System.out.println("               1     添加客户");
            System.out.println("               2     修改客户");
            System.out.println("               3     删除客户");
            System.out.println("               4     客户列表");
            System.out.println("               5     退出   ");
            System.out.print("              请选择(1-5):");
            int index = sc.nextInt();
            if(!(index == 1  || index == 2 || index == 3 || index == 4 || index == 5)){
                System.out.println("选择错误请重新输入");
                continue;
            }
            switch (index){
                case 1:
                    addNewCustomer();
                    break;
                case 2:
                    modifyCustomer();
                    break;
                case 3:
                    deleteCustomer();
                    break;
                case 4:
                    showAllCustomer();
                    break;
                case 5:
                    System.out.println("确认是否退出:Y/N");
                    char isExit = sc.next().toUpperCase().charAt(0);
                    if(isExit == 'Y'){
                        System.exit(0);
                    }
            }

        }

    }
    public void addNewCustomer(){
        System.out.println("添加客户的操作");



        System.out.print("姓名:");
        String name = sc.next();
        System.out.print("性别:");
        char gender = sc.next().charAt(0);
        System.out.print("年龄:");
        int age = sc.nextInt();
        System.out.print("电话:");
        String phone = sc.next();
        System.out.print("邮箱:");
        String email = sc.next();

        Customer customer = new Customer(name,gender,age,phone,email);

        boolean flag = customerList.addCustomer(customer);

        if(!flag){
            System.out.println("添加失败");
            return;
        }
        System.out.println("添加成功");

    }
    public void modifyCustomer(){
        System.out.println("-----------------修改客户---------------");
        Customer customer = null;
        int number = 0;
        for(;;) {
            System.out.println("请输入选择待修改客户编号(-1退出)");
            int index = sc.nextInt();
            if(index == -1){
                return;
            }

            customer = customerList.getCustomer(index-1);

            if(customer == null){
                System.out.println("无法找到指定用户");
            }else {
                //找到了指定的用户
                number = index-1;
                break;
            }
        }

        //修改用户
        System.out.print("姓名(" + customer.getName() + "):");
        String name = sc.next();
        System.out.print("性别(" + customer.getGender() + "):");
        char gender = sc.next().charAt(0);
        System.out.print("年龄(" + customer.getAge() + "):");
        int age = sc.nextInt();
        System.out.print("电话(" + customer.getPhone() + "):");
        String phone = sc.next();
        System.out.print("邮箱(" + customer.getEmail() + "):");
        String email = sc.next();

        Customer customer1 = new Customer(name,gender,age,phone,email);

        boolean flag = customerList.replaceCustomer(number,customer1);

        if(!flag){
            System.out.println("修改失败");
            return;
        }
        System.out.println("修改成功");

    }
    public void deleteCustomer(){
        System.out.println("-----------------删除客户---------------");
        int number;
        for(;;){
            System.out.println("请选择删除客户编号(-1退出)");
            number = sc.nextInt();

            if(number == -1){
                return;
            }
            Customer customer = customerList.getCustomer(number - 1);

            if(customer == null){
                System.out.println("无法找到指定指定用户");
            }else{
                break;
            }
        }
        System.out.print("是否删除(Y/N):");
        char isDelete = sc.next().toUpperCase().charAt(0);
        if(isDelete == 'Y'){
            customerList.deleteCustomer(number - 1);
            System.out.println("删除成功");
        }else{
            return;
        }

    }
    public void showAllCustomer(){
        System.out.println("-----------------客户列表---------------");

        int total = customerList.getTotal();
        if(total == 0){
            System.out.println("                没有客户记录");
        }else{
            System.out.println("编号\t姓名\t性别\t年龄\t电话\t\t\t邮箱");
            Customer[] customers = customerList.getAllCustomers();
            for (int i = 0; i < customers.length; i++) {
                Customer c = customers[i];
                System.out.println(i+1 + "\t" + c.getName()  + "\t" + c.getGender()  + "\t" + c.getAge()  + "\t" + c.getPhone()  + "\t" + c.getEmail());
            }
        }


        System.out.println("-----------------客户列表完成---------------");


    }


    public static void main(String[] args) {
        CustomerView view = new CustomerView();

        view.enterMainMenu();


    }
}

面向对象的特征之二:继承性

继承的好处

  1. 减少了代码的冗余,提高了复用性
  2. 便于功能的扩展
  3. 为之后多态的使用,提供了前提

继承的格式 :

class A extends B(){}

A:子类、派生类、subclass

B:父类,超类,基类、superclass

体现:一旦子类A继承父类B以后,子类A中就获取到了父类B声明的结构,属性,方法。

子类继承父类以后,还可以声明自己特有的属性或方法,实现功能的扩展。

Java中关于继承性的规定

  1. 一个父类可以被多个子类继承
  2. Java中类的单继承:一个类只能有一个父类
  3. 子类直接继承父类:直接父类。间接继承父类:间接父类。
  4. 子类继承父类后,自动获取直接父类和所有间接父类中声明的属性和方法。

方法重写(override/overwirte)

  1. 重写,子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作。
  2. 应用:重写方法后,当创建子类对象以后,通过子类对象调用父类中的同名同参数的方法时,执行的是子类重写父类的方法。
  3. 重写的规定:
    1. 子类重写的方法的方法名和形参列表要和父类被重写的方法一致
    2. 子类重写的方法的权限修饰符不小于父类的方法权限 子类不能重写父类中被定义为private的方法
  4. 返回值类型:
    1. 父类被重写的方法的返回值类型时void,其子类重写的方法也必须是void
    2. 返回值类型为A时,子类方法的返回值类型可以是A或者A的子类
    3. 返回值类型为基本数据类型时,子类方法的返回值类型必须为一样的基本数据类型

super关键字

  1. super可以理解为父类的
  2. 通过super关键字可以调用父类的属性、构造器、方法。
  3. super的使用
    1. 我们可以在子类的方法或构造器中,通过"super.属性"或"super.方法"的方式去显式调用父类的属性或方法。
    2. 当子类和父类定义了同名的属性,需要用super.属性去调用父类的属性
    3. 子类重写了父类的方法,需要用父类的方法也需要用super.方法去调用

super构造器创建了子类对象,一定会直接或间接的调用父类的接口,一直调用知道Object类,这就是为什么类都有toString方法。

虽然创建了子类的对象是,调用了父类的构造器,但内存中只new了一个子类对象

面向对象特征之三:多态性

理解多态性:可以理解为一个事物的多种状态。

对象的多态性:父类的引用指向子类的对象。

多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法—虚拟方法调用 有了对象的多态性以后,我们在编译器只能调用父类中声明的方法,而在运行时实际调用的子类的方法 总结:编译看左边,运行看右边

多态的前提:类的继承关系、方法要重写

对象的多态性,只适用于方法,不适用于属性

instanceof关键字

a instanceof A :判断对象a是不是类A的实例,是返回true,否返回false

使用情景是为了避免转型时出现ClassCastException,instanceof判断完之后再转型可以避免这一情况

如果B是A的父类 那么 a instanceof A为true时,a intanceof B也会为true。

举报

相关推荐

Java Day05

MySQL学习day05

day05

Day05

Vue day05

day05数组

Day05 - TypeScript

C语言学习Day05

0 条评论