• 16.分类和static


    1.案例驱动模式

    1.1案例驱动模式概述 (理解)

    通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题

    1.2案例驱动模式的好处 (理解)

    • 解决重复代码过多的冗余,提高代码的复用性

    • 解决业务逻辑聚集紧密导致的可读性差,提高代码的可读性

    • 解决代码可维护性差,提高代码的维护性

    今后写代码要达成的目标

    • 复用性
    • 可读性
    • 维护性

    通过新知识点解决

    2.分类思想

    2.1分类思想概述 (理解)

    之前写的学生管理系统存在的问题:代码的维护性,可读性以及复用性是有些问题的

     

    分工协作,专人干专事

    2.2黑马信息管理系统 (理解)

    • Student类                 标准学生类,封装键盘录入的学生信息(id , name , age , birthday)

    • StudentDao类 Dao : (Data Access Object 缩写) 用于访问存储数据的数组或集合

    • StudentService类       用来进行业务逻辑的处理(例如: 判断录入的id是否存在)

    • StudentController类    和用户打交道(接收用户需求,采集用户信息,打印数据到控制台)

    3.分包思想

    3.1分包思想概述 (理解)

    如果将所有的类文件都放在同一个包下,不利于管理和后期维护,所以,对于不同功能的类文件,可以放在不同的包下进行管理

    3.2包的概述 (记忆)

    • 本质上就是文件夹

    • 创建包

      多级包之间使用 " . " 进行分割 多级包的定义规范:公司的网站地址翻转(去掉www) 比如:黑马程序员的网站址为www.itheima.com 后期我们所定义的包的结构就是:com.itheima.其他的包名

    • 包的命名规则

      字母都是小写

    • 包的定义
    • 使用package关键字定义包
    • 格式:package包名;如果是多级包,中间用"."进行分割
    • 一般情况下,我们不会手动的去给某一个类定义包,使用idea开发工具创建即可

    3.3包的注意事项 (理解)

    • package语句必须是程序的第一条可执行的代码

    •  

    • package语句在一个java文件中只能有一个

    • 如果没有package,默认表示无包名

    3.4类与类之间的访问 (理解)

    • 同一个包下的访问

      不需要导包,直接使用即可

    • 不同包下的访问

      1.import 导包后访问

      2.通过全类名(包名 + 类名)访问      应用场景:多个包下出现了相同的类名称,就可以使用这种访问进行区分

    • 注意:import 、package 、class 三个关键字的摆放位置存在顺序关系

      package 必须是程序的第一条可执行的代码

      import 需要写在 package 下面

      class 需要在 import 下面

    4.黑马信息管理系统

    4.1系统介绍 (理解)

    4.2学生管理系统 (应用)

    4.2.1需求说明

    • 添加学生: 键盘录入学生信息(id,name,age,birthday)

      使用数组存储学生信息,要求学生的id不能重复

    • 删除学生: 键盘录入要删除学生的id值,将该学生从数组中移除,如果录入的id在数组中不存在,需要重新录入

    • 修改学生: 键盘录入要修改学生的id值和修改后的学生信息

      将数组中该学生的信息修改,如果录入的id在数组中不存在,需要重新录入

    • 查询学生: 将数组中存储的所有学生的信息输出到控制台

    使用分类思想,分包思想完成

    4.2.2实现步骤

    • 环境搭建实现步骤

      存储的类作用
      com.itheima.edu.info.manager.domain Student.java 封装学生信息
      com.itheima.edu.info.manager.dao StudentDao.java 访问存储数据的数组,进行赠删改查(库管)
      com.itheima.edu.info.manager.service StudentService.java 业务的逻辑处理(业务员)
      com.itheima.edu.info.manager.controller StudentController.java 和用户打交道(客服接待)
      com.itheima.edu.info.manager.entry InfoManagerEntry.java 程序的入口类,提供一个main方法
    • 菜单搭建实现步骤

      • 需求

        • 黑马管理系统菜单搭建

      • 思路:用输出语句完成主界面的编写
      • 用Scanner实现键盘录入数据
      • 用switch语句完成操作的选择
        • 学生管理系统菜单搭建

      • 注意:此处的退出,是回退到上级菜单,并不是将整个程序结束掉
      • 实现步骤

        1. 展示欢迎页面,用输出语句完成主界面的编写

        2. 获取用户的选择,用Scanner实现键盘录入数据

        3. 根据用户的选择执行对应的操作,用switch语句完成操作的选择

    • 添加功能实现步骤

       

    • 添加功能优化:判断id是否存在

       

    • 查询功能实现步骤

       

    • 删除功能实现步骤

       

    • 修改功能实现步骤

        

    • 系统优化

      • 把updateStudent和deleteStudentById中录入学生id代码抽取到一个方法(inputStudentId)中 该方法的主要作用就是录入学生的id,方法的返回值为String类型

    • 把addStudent和updateStudent中录入学生信息的代码抽取到一个方法(inputStudentInfo)中 该方法的主要作用就是录入学生的信息,并封装为学生对象,方法的返回值为Student类型

     

    5.static关键字

    5.1static关键字概述 (理解)

    static 关键字是静态的意思,是Java中的一个修饰符,可以修饰成员方法,成员变量

    5.2static修饰的特点 (记忆)

      被static修饰的成员,

     

      • 被类的所有对象共享

          是我们判断是否使用静态关键字的条件

      • 随着类的加载而加载,优先于对象存在

          对象需要类被加载后,才能创建

      •   多了一种调用方式:
      •   可以通过类名调用

        也可以通过对象名调用、、  推荐使用类名调用

    5.3static关键字注意事项 (理解)

    静态是随着类的加载而加载,优先于对象存在

    非静态需要在创建对象之后,才可以进行使用

    • 静态方法只能访问静态的成员(成员变量,成员方法)

    • 非静态方法可以访问静态的成员,也可以访问非静态的成员

    • 静态方法中是没有this关键字

    this:当前对象的引用   静态存在的时候,对象可能还没有被创建

    4.2.3代码实现

    学生类

    package com.itheima.edu.info.manager.domain;
    
    public class Student {
        private String id;
        private String name;
        private String age;
        private String birthday;
    
        public Student() {
        }
    
        public Student(String id, String name, String age, String birthday) {
            this.id = id;
            this.name = name;
            this.age = age;
            this.birthday = birthday;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public String getBirthday() {
            return birthday;
        }
    
        public void setBirthday(String birthday) {
            this.birthday = birthday;
        }
    }
    

    程序入口InfoManagerEntry类

    package com.itheima.edu.info.manager.entry;
    
    import com.itheima.edu.info.manager.controller.StudentController;
    
    import java.util.Scanner;
    
    public class InfoManagerEntry {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            //主菜单搭建
            while (true){
                System.out.println("--------欢迎来到黑马信息管理系统--------");
                System.out.println("请输入您的选择: 1.学生管理  2.老师管理  3.退出");
                String choice=sc.next();
                switch (choice){
                    case "1":
                        //System.out.println("学生管理");
                        //开启学生管理系统
                        StudentController studentController=new StudentController();
                        studentController.start();
                        break;
                    case "2":
                        System.out.println("老师管理");
                        break;
                    case "3":
                        System.out.println("感谢您的使用");
                        //退出当前正在运行的JVM虚拟机
                        System.exit(0);
                        break;
                    default:
                        System.out.println("您的输入有误,请重新输入");
                        break;
                }
            }
    
        }
    
    }
    

    StudentController类  

    package com.itheima.edu.info.manager.controller;
    
    import com.itheima.edu.info.manager.domain.Student;
    import com.itheima.edu.info.manager.service.StudentService;
    
    import java.util.Scanner;
    
    public class StudentController {
        // 3. 将学生对象,传递给StudentService(业务员)中的addStudent方法
        private StudentService studentService=new StudentService();
    
        private Scanner sc=new Scanner(System.in);
        //开启学生管理系统,并展示学生管理系统菜单
        public void start() {
            studentloop:while(true){
                System.out.println("--------欢迎来到 <学生> 管理系统--------");
                System.out.println("请输入您的选择: 1.添加学生  2.删除学生  3.修改学生  4.查看学生  5.退出");
                String choice=sc.next();
                switch (choice){
                    case "1":
                        //System.out.println("添加");
                        addStudent();
                        break;
                    case "2":
                        //System.out.println("删除");
                        deleteStudentById();
                        break;
                    case "3":
                        //System.out.println("修改");
                        updateStudent();
                        break;
                    case "4":
                        //System.out.println("查询");
                        findAllStudent();
                        break;
                    case "5":
                        System.out.println("感谢您使用学生管理系统,再见!");
                        break studentloop;
                    default:
                        System.out.println("您的输入有误,请重新输入");
                        break;
                }
            }
        }
        //修改学生方法
        public void updateStudent() {
            String updateId=inputStudentId();
            Student newStu=inputStudentInfo(updateId);
            studentService.updateStudent(updateId,newStu);
            System.out.println("修改成功");
        }
        //删除学生方法
        public void deleteStudentById() {
            String delId =inputStudentId();
            //调用业务员中的deleteStudentById根据id,删除学生
            studentService.deleteStudentById(delId);
            //提示:删除成功
            System.out.println("删除成功");
        }
        //查看学生方法
        public void findAllStudent() {
           //1.调用业务员中的获取方法,得到学生的对象数组
            Student[] stus=studentService.findAllStudent();
            //2.判断数组的内存地址,是否为null
            if(stus==null){
                System.out.println("查无信息,请添加后重试");
                return;
            }
            //3.遍历数组,获取学生的信息,并打印在控制台
            System.out.println("学号		姓名	年龄		生日");
            for (int i = 0; i < stus.length; i++) {
                Student stu=stus[i];
                if(stu!=null){
                    System.out.println(stu.getId()+"	"+stu.getName()+"	"+stu.getAge()+"		"+stu.getBirthday());
                }
            }
        }
        //添加学生方法
        public void addStudent() {
    
            String id;
            while(true){
                System.out.println("请输入学生id");
                id=sc.next();
                boolean flag=studentService.isExists(id);
                if (flag) {
                    System.out.println("学号已经被占用,请重新输入");
                }else{
                    break;
                }
            }
    
           Student stu=inputStudentInfo(id);
    
            boolean result=studentService.addStudent(stu);
            // 4. 根据返回的boolean类型结果, 在控制台打印成功失败
            if (result) {
                System.out.println("添加成功");
            }else {
                System.out.println("添加失败");
            }
        }
        //键盘录入学生id
        public String inputStudentId(){
            String Id;
            while(true){
                System.out.println("请输入学生id");
                Id=sc.next();
                boolean exists=studentService.isExists(Id);
                if (!exists) {
                    System.out.println("您输入的id不存在,请重新输入");
                }else{
                    break;
                }
            }
            return Id;
        }
    
        //键盘录入学生信息
        public Student inputStudentInfo(String id){
            System.out.println("请输入学生姓名");
            String name=sc.next();
            System.out.println("请输入学生年龄");
            String age=sc.next();
            System.out.println("请输入学生生日");
            String birthday=sc.next();
            //2.将学生信息封装为学生对象
            Student stu=new Student();
            stu.setId(id);
            stu.setName(name);
            stu.setAge(age);
            stu.setBirthday(birthday);
            return stu;
        }
    }
    

    StudentService类

    package com.itheima.edu.info.manager.service;
    
    import com.itheima.edu.info.manager.dao.StudentDao;
    import com.itheima.edu.info.manager.domain.Student;
    
    public class StudentService {
        // 创建StudentDao (库管)
        private StudentDao studentDao=new StudentDao();
        public boolean addStudent(Student stu) {
            // 添加学生方法
            // 2. 将学生对象, 传递给StudentDao 库管中的addStudent方法
            // 3. 将返回的boolean类型结果, 返还给StudentController
            return studentDao.addStudent(stu);
    
        }
    
        public boolean isExists(String id) {
            Student[] stus=studentDao.findAllStudent();
            //假设id在数组中不存在
            boolean exists=false;
            //遍历数组,获取每一个学生对象,准备进行判断
            for (int i = 0; i < stus.length; i++) {
               Student student= stus[i];
                if (student !=null &&student.getId().equals(id)) {
                    exists=true;
                    break;
                }
            }
            return exists;
        }
    
        public Student[] findAllStudent() {
            //1.调用库管对象的findAllStudent获取学生对象数组
            Student[] allStudent=studentDao.findAllStudent();
            //2.判断数组中是否有学生信息(有:返回地址。没有:null)
            //思路:数组中只要存在一个不是null的元素,那就代表有学生信息
            boolean flag=false;
            for (int i = 0; i < allStudent.length; i++) {
                Student stu=allStudent[i];
                if (stu != null) {
                    flag=true;
                    break;
                }
            }
            if (flag) {
                return allStudent;
            }else{
                return null;
            }
        }
    
        public void deleteStudentById(String delId) {
            studentDao.deleteStudentById(delId);
        }
    
        public void updateStudent(String updateId, Student newStu) {
            studentDao.updateStudent(updateId,newStu);
        }
    }
    

    StudentDao类

    package com.itheima.edu.info.manager.dao;
    
    import com.itheima.edu.info.manager.domain.Student;
    
    public class StudentDao {
        // 创建学生对象数组
        private static Student[] stus=new Student[5];
        public boolean addStudent(Student stu) {
    
            // 添加学生方法    思路:将对象存入到数组中null元素对应的索引位置
    
            // 2. 添加学生到数组
            //2.1 定义变量index为-1,假设数组已经全部存满,没有null的元素
            int index=-1;
            //2.2 遍历数组取出每一个元素,判断是否是null
            for (int i = 0; i < stus.length; i++) {
                Student student=stus[i];
                if (student == null) {
                    index=i;
                    //2.3 如果为null,让index变量记录当前索引位置,并使用break结束循环遍历
                    break;
                }
            }
            // 3. 返回是否添加成功的boolean类型状态
            if (index == -1) {
                //装满了
                return false;
            }else{
                //没有装满正常添加,返回true;
                stus[index]=stu;
                return true;
            }
    
        }
    
        public Student[] findAllStudent() {
            return stus;
        }
    
        public void deleteStudentById(String delId) {
            //1.查找id在容器中的索引位置
            int index=getIndex(delId);
            //2.将该索引位置,使用null元素进行覆盖
            stus[index]=null;
        }
    
        public int getIndex(String id){
            int index=-1;
            for (int i = 0; i < stus.length; i++) {
                Student stu=stus[i];
                if (stu != null&&stu.getId().equals(id)) {
                    index=i;
                    break;
                }
            }
            return index;
        }
    
        public void updateStudent(String updateId, Student newStu) {
            //1.查找updateId,在容器中的索引位置
            int index =getIndex(updateId);
            //2.将该索引位置,使用新的学生对象替换
            stus[index]=newStu;
        }
    }
    

    4.3老师管理系统 (应用)

    4.3.1需求说明

    • 添加老师: 通过键盘录入老师信息(id,name,age,birthday)

      使用数组存储老师信息,要求老师的id不能重复

    • 删除老师: 通过键盘录入要删除老师的id值,将该老师从数组中移除,如果录入的id在数组中不存在,需要重新录入

    • 修改老师: 通过键盘录入要修改老师的id值和修改后的老师信息

      将数组中该老师的信息修改,如果录入的id在数组中不存在,需要重新录入

    • 查询老师: 将数组中存储的所有老师的信息输出到控制台

    • 使用分类思想,分包思想

    4.3.2实现步骤

    • 环境搭建实现步骤

      存储的类作用
      com.itheima.edu.info.manager.domain Student.java Teacher.java 封装学生信息 封装老师信息
      com.itheima.edu.info.manager.dao StudentDao.java TeacherDao.java 访问存储数据的数组,进行赠删改查(库管)
      com.itheima.edu.info.manager.service StudentService.java TeacherService.java 业务的逻辑处理(业务员)
      com.itheima.edu.info.manager.controller StudentController.java TeacherController.java 和用户打交道(客服接待)
      com.itheima.edu.info.manager.entry InfoManagerEntry.java 程序的入口类,提供一个main方法
    • 菜单搭建实现步骤

      1. 展示欢迎页面,用输出语句完成主界面的编写

      2. 获取用户的选择,用Scanner实现键盘录入数据

      3. 根据用户的选择执行对应的操作,用switch语句完成操作的选择

    • 添加功能实现步骤

       

    • 查询功能实现步骤

       

    • 删除功能实现步骤

       

    • 修改功能实现步骤

       

    • 系统优化

      • updateTeacherdeleteTeacherById中录入老师id代码抽取到一个方法(inputTeacherId)中 该方法的主要作用就是录入老师的id,方法的返回值为String类型

      • addTeacherupdateTeacher中录入老师信息的代码抽取到一个方法(inputTeacherInfo)中 该方法的主要作用就是录入老师的信息,并封装为老师对象,方法的返回值为Teacher类型

    4.3.3代码实现

    老师类

    package com.itheima.edu.info.manager.domain;
    
    public class Teacher {
        private String id;
        private String name;
        private String age;
        private String birthday;
    
        public Teacher() {
        }
    
        public Teacher(String id, String name, String age, String birthday) {
            this.id = id;
            this.name = name;
            this.age = age;
            this.birthday = birthday;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public String getBirthday() {
            return birthday;
        }
    
        public void setBirthday(String birthday) {
            this.birthday = birthday;
        }
    }
    

    TeacherController类

    package com.itheima.edu.info.manager.controller;
    
    import com.itheima.edu.info.manager.domain.Student;
    import com.itheima.edu.info.manager.domain.Teacher;
    import com.itheima.edu.info.manager.service.TeacherService;
    
    import java.util.Scanner;
    
    public class TeacherController {
        private Scanner sc = new Scanner(System.in);
        private TeacherService teacherService=new TeacherService();
        public void start() {
            teacherloop: while(true){
    
                System.out.println("--------欢迎来到 <老师> 管理系统--------");
                System.out.println("请输入您的选择: 1.添加老师  2.删除老师  3.修改老师  4.查看老师  5.退出");
                String choice = sc.next();
    
                switch (choice) {
                    case "1":
                        //System.out.println("添加");
                        addTeacher();
                        break;
                    case "2":
                        //System.out.println("删除");
                        deleteTeacherById();
                        break;
                    case "3":
                        //System.out.println("修改");
                        updateTeacher();
                        break;
                    case "4":
                        //System.out.println("查询");
                        findAllTeacher();
                        break;
                    case "5":
                        System.out.println("感谢您使用老师管理系统,再见!");
                        break teacherloop;
                    default:
                        System.out.println("您的输入有误,请重新输入");
                        break;
                }
            }
            }
        //修改老师
        public void updateTeacher() {
            String updateId = inputTeacherId();
            Teacher newTeacher = inputTeacherInfo(updateId);
            //调用业务员的修改方法
            teacherService.updateTeacher(updateId,newTeacher);
            System.out.println("修改成功");
        }
    
        //删除老师
        public void deleteTeacherById() {
            String delId = inputTeacherId();
            //调用业务员中的deleteStudentById根据i
            //,删除老师
            teacherService.deleteTeacherById(delId);
            //提示:删除成功
            System.out.println("删除成功");
        }
    
    
        //查询老师
        public void findAllTeacher() {
            //1.从业务员中获取老师对象数组
            Teacher[] teachers=teacherService.findAllTeacher();
            //判断数组中是否有元素
            if (teachers == null) {
                System.out.println("查无信息,请添加后重试");
                return;
            }
    
            //3.遍历数组,获取学生信息,并打印在控制台
            System.out.println("学号		姓名	年龄		生日");
            for (int i = 0; i < teachers.length; i++) {
                Teacher t=teachers[i];
                if (t != null) {
                    System.out.println(t.getId()+"	"+t.getName()+"	"+t.getAge()+"		"+t.getBirthday());
                }
            }
        }
    
        //添加老师
        public void addTeacher() {
            String id;
            while (true){
                //1.接受一个不存在的老师id
                System.out.println("请输入老师id");
                id=sc.next();
                //2.判断id是否存在
                boolean exists =teacherService.isExists(id);
                if (exists) {
                    System.out.println("id已被占用,请重新输入");
                }else{
                    break;
                }
            }
            Teacher t = inputTeacherInfo(id);
    
            //5.将封装好的老师对象,传递给TeacherService继续完成添加操作
            boolean result=teacherService.addTeacher(t);
            if (result ) {
                System.out.println("添加成功");
            }else{
                System.out.println("添加失败");
            }
    
    
        }
        //录入老师id
        public String inputTeacherId(){
            String id;
            while(true){
                //键盘接收要删除的老师id
                System.out.println("请输入id");
                id=sc.next();
                boolean exists = teacherService.isExists(id);
                if (!exists ) {
                    System.out.println("您输入的id不存在,请重新输入:");
                }else{
                    break;
                }
            }
            return id;
        }
        //录入老师信息,封装为老师对象类型
        public Teacher inputTeacherInfo(String id){
            //3.接受老师的其他信息
            System.out.println("请输入老师的姓名");
            String name=sc.next();
            System.out.println("请输入老师的年龄");
            String age=sc.next();
            System.out.println("请输入老师的生日");
            String birthday=sc.next();
            //封装为老师对象
            Teacher t=new Teacher();
            t.setId(id);
            t.setName(name);
            t.setAge(age);
            t.setBirthday(birthday);
            return t;
        }
    }
    

    TeacherService类

    package com.itheima.edu.info.manager.service;
    
    import com.itheima.edu.info.manager.dao.TeacherDao;
    import com.itheima.edu.info.manager.domain.Teacher;
    
    public class TeacherService {
    
        //创建库管对象
        private TeacherDao teacherDao=new TeacherDao();
        public boolean addTeacher(Teacher t) {
            return teacherDao.addTeacher(t);
        }
    
        public boolean isExists(String id) {
            //1.获取库管对象中的数组
            Teacher[] teachers=teacherDao.findAllTeacher();
            boolean exists=false;
            //2.遍历数组,取出每一个元素,进行判断
            for (int i = 0; i < teachers.length; i++) {
                Teacher teacher=teachers[i];
                if (teacher != null&&teacher.getId().equals(id)) {
                    exists=true;
                    break;
                }
            }
            return exists;
        }
    
        public Teacher[] findAllTeacher() {
            Teacher[] allTeacher = teacherDao.findAllTeacher();
            boolean flag=false;
            for (int i = 0; i < allTeacher.length; i++) {
                Teacher t=allTeacher[i];
                if (t != null) {
                    flag=true;
                    break;
                }
            }
            if (flag == true) {
                return allTeacher;
            }else{
                return null;
            }
        }
    
    
        public void deleteTeacherById(String delId) {
            teacherDao.deleteTeacherById(delId);
        }
    
        public void updateTeacher(String updateId, Teacher newTeacher) {
            teacherDao.updateTeacher(updateId,newTeacher);
        }
    }
    

    TeacherDao类

    package com.itheima.edu.info.manager.dao;
    
    import com.itheima.edu.info.manager.domain.Teacher;
    
    import java.awt.geom.Area;
    
    public class TeacherDao {
    
        //创建一个Teacher数组
        private static Teacher[] teachers = new Teacher[5];
    
        public boolean addTeacher(Teacher t) {
            //需要把t对象 扔到数组里面去  ,扔到哪一个索引位置呢
            int index = -1;
            for (int i = 0; i < teachers.length; i++) {
                Teacher teacher = teachers[i];
                if (teacher == null) {
                    index = i;
                    break;
                }
            }
            if (index == -1) {
                return false;
            } else {
                teachers[index] = t;
                return true;
            }
        }
    
        public Teacher[] findAllTeacher() {
            return teachers;
        }
    
        public void deleteTeacherById(String delId) {
            int index = getIndex(delId);
            //将该索引位置的元素使用null进行替换
            teachers[index] = null;
    
        }
    
        //1.查询id在集合中的索引位置
        public int getIndex(String id) {
            int index = -1;
            for (int i = 0; i < teachers.length; i++) {
                Teacher t = teachers[i];
                if (t != null && t.getId().equals(id)) {
                    index = i;
                    break;
                }
            }
            return index;
        }
    
        public void updateTeacher(String updateId, Teacher newTeacher) {
            int index = getIndex(updateId);
            teachers[index] = newTeacher;
    
    
        }
    }
    

      

      

      

      

      

      

      

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    物理材质
    铰链joints
    unity 刚体
    扩展方法
    转换操作符方法(非基元类型转换)
    向方法传递可变数量的参数
    参数:可选参数和命名参数
    实例构造器与值类型和引用类型、类型构造器
    成员的可访问性,友元程序集,静态类
    如何删除github上项目的文件
  • 原文地址:https://www.cnblogs.com/faded8679/p/13890541.html
Copyright © 2020-2023  润新知