首页 > 编程语言 >Java中的一些思想

Java中的一些思想

时间:2024-09-02 21:03:58浏览次数:4  
标签:Java String 思想 System 学生 sid println 一些 public

Java中的一些思想

目录

1 分类思想

  • 分工协作,专人干专事

  • 信息管理系统

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

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

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

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

2 分包思想

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

  • 创建包

    • 多级包之间使用 " . " 进行分割

    • 多级包的定义规范:公司的网站地址翻转(去掉www)

  • 包的命名规则: 字母都是小写

  • 注意事项

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

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

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

3 类与类之间的访问

  • 同一个包下的访问: 不需要导包,直接使用即可

  • 不同包下的访问

    • import 导包后访问

    • 通过全类名(包名 + 类名)访问

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

    • package 必须是程序的第一条可执行的代码
    • import 需要写在 package 下面
    • class 需要在 import 下面

4 static关键字

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

4.1 static修饰的特点

  • 被类的所有对象共享:是我们判断是否使用静态关键字的条件

  • 随着类的加载而加载,优先于对象存在;对象需要类被加载后,才能创建

  • 可以通过类名调用,也可以通过对象名调用

4.2 注意事项

  • 静态方法只能访问静态的成员

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

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

5 信息管理系统

5.1 系统说明

5.1.1 学生管理系统

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

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

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

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

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

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

5.1.2 老师管理系统

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

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

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

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

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

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

5.2 实现步骤

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

5.3 代码实现

5.3.1 Student

  • Student.java

    package com.fcarey.schoolManager.domain;
    
    /*
     * 封装学生信息
     * */
    public class Student {
        // 定义学生ID,指定为私有属性
        private String sid;
        // 定义学生名字,指定为私有属性
        private String name;
        // 定义学生年龄,指定为私有属性
        private String age;
        // 定义学生生日,指定为私有属性
        private String brithday;
    
        // 保留默认的构造方法
        public Student() {
        }
    
        // 定义Student构造方法包含sid,name,age,birthday信息
        public Student(String sid, String name, String age, String brithday) {
            this.sid = sid;
            this.name = name;
            this.age = age;
            this.brithday = brithday;
        }
    
        public String getSid() {
            return sid;
        }
    
        public void setSid(String sid) {
            this.sid = sid;
        }
    
        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 getBrithday() {
            return brithday;
        }
    
        public void setBrithday(String brithday) {
            this.brithday = brithday;
        }
    
    }
    
    
  • SchoolManagerEntry.java

package com.fcarey.schoolManager.entry;

import com.fcarey.schoolManager.controller.StudentController;
import com.fcarey.schoolManager.controller.TeacherController;

import java.util.Scanner;

/*
* 程序的入口类,提供一个main方法
* */
public class SchoolManagerEntry {
    public static void main(String[] args) {
        while (true) {
            System.out.println("--------欢迎来到fcarey信息管理系统--------");
            System.out.println("请输入您的选择: 1.学生管理  2.老师管理  3.退出");
            Scanner sc = new Scanner(System.in);
            // 接收用户输入的选择
            String choice = sc.nextLine();
            switch (choice) {
                case "1":
                    StudentController studentController = new StudentController();
                    studentController.start();
                    break;
                case "2":
                    TeacherController teacherController = new TeacherController();
                    teacherController.start();
                    break;
                case "3":
                    // 退出当前正在运行的JVM虚拟机
                    System.exit(0);
                default:
                    System.out.println("输入错误,请输入列表所对应数字!!!\n");
            }
        }
    }
}

  • StudentController.java

    package com.fcarey.schoolManager.controller;
    
    import com.fcarey.schoolManager.domain.Student;
    import com.fcarey.schoolManager.service.StudentService;
    
    import java.util.Scanner;
    
    /*
     * 和用户打交道
     * */
    public class StudentController {
        private StudentService studentService = new StudentService();
    
        public void start() {
            studentLoop:
            while (true) {
                System.out.println("--------欢迎来到 <学生> 管理系统--------");
                System.out.println("请输入您的选择: 1.添加学生  2.删除学生  3.修改学生  4.查询学生  5.查看学生  6.退出");
                Scanner scanner = new Scanner(System.in);
                String choice = scanner.nextLine();
                switch (choice) {
                    case "1":
                        // 添加学生
                        addStudent();
                        break;
                    case "2":
                        // 删除学生
                        deleteStudent();
                        break;
                    case "3":
                        // 修改学生
                        updateStudent();
                        break;
                    case "4":
                        // 查询学生
                        findStudent();
                        break;
                    case "5":
                        // 查看学生
                        retrieveStudent();
                        break;
                    case "6":
                        // 退出
                        System.out.println("退出学生管理系统");
                        break studentLoop;
                    default:
                        System.out.println("输入错误,请输入列表所对应数字!!!");
                }
            }
        }
    
        private void findStudent() {
            // 处理数据库中没有学生时的情况
            if (!isNull()) {
                System.out.println("当前数据库没有学生信息");
            } else {
                // 处理数据库中有学生时情况
                Scanner findsc = new Scanner(System.in);
                System.out.println("请输入学生id:");
                String sid = findsc.nextLine();
                // 确认是否数据库中是否存在当前学生id信息,存在返回的是所在学生数组索引位置,否则返回-1
                int flag = studentService.isExist(sid);
                // 当学生存在时
                if (flag != -1) {
                    // 将查询到的学生信息进行打印
                    Student student = studentService.findStudent(flag);
                    System.out.println("所查询学生信息如下:\n" + student.getSid() + "\t" + student.getName() + "\t" + student.getAge() + "\t\t" + student.getBrithday());
                } else {
                    System.out.println("学生对象不存在哦");
                }
            }
    
        }
    
        private void updateStudent() {
            Scanner updatesc = new Scanner(System.in);
            System.out.println("请输入学生id:");
            String sid = updatesc.nextLine();
            // 确认是否数据库中是否存在当前学生id信息,存在返回的是所在学生数组索引位置,否则返回-1
            int flag = studentService.isExist(sid);
            if (flag != -1) {
                // 当学生存在时,将更新的信息及所在学生数组中的索引位置传入studentService.updateStudent方法,进行数据更新
                studentService.updateStudent(editStudent(sid), flag);
                System.out.println("更新成功。");
            } else {
                System.out.println("学生对象不存在哦");
            }
        }
    
        private Student editStudent(String sid) {
            // 处理学生信息,并返回学生对象
            Scanner editsc = new Scanner(System.in);
            System.out.println("请输入学生姓名:");
            String name = editsc.next();
            System.out.println("请输入学生年龄:");
            String age = editsc.next();
            System.out.println("请输入学生生日:");
            String birthday = editsc.next();
            Student student = new Student();
            student.setSid(sid);
            student.setName(name);
            student.setAge(age);
            student.setBrithday(birthday);
            return student;
        }
    
        private void deleteStudent() {
            Scanner deletesc = new Scanner(System.in);
            System.out.println("请输入学生id:");
            String sid = deletesc.nextLine();
            // 确认是否数据库中是否存在当前学生id信息,存在返回的是所在学生数组索引位置,否则返回-1
            if (studentService.isExist(sid) != -1) {
                // 如果存在该学生信息,将学生IP提交给studentService.deleteStudent处理
                studentService.deleteStudent(sid);
                System.out.println("删除成功,当前还有以下学生");
                // 返回最新的学生数据库信息
                retrieveStudent();
            } else {
                System.out.println("你要删除的学生不存在哦");
            }
        }
    
        private void retrieveStudent() {
            Student student;
            // 遍历学生数据库
            if (!isNull()) {
                System.out.println("当前数据库没有学生信息");
            } else {
                for (int i = 0; i < studentService.retrieveStudent().length; i++) {
                    if (studentService.retrieveStudent()[i] != null) {
                        student = studentService.retrieveStudent()[i];
                        System.out.println(student.getSid() + "\t" + student.getName() + "\t" + student.getAge() + "\t\t" + student.getBrithday());
                    }
                }
            }
        }
        // 判断学生数据库,记录的学生是否为空,若是返回false,否返回true
        public boolean isNull() {
            StudentService teacherService = new StudentService();
            boolean flag = false;
            for (int i = 0; i < teacherService.retrieveStudent().length; i++) {
                if (teacherService.retrieveStudent()[i] != null) {
                    flag = true;
                    break;
                }
            }
            return flag;
        }
    
        private void addStudent() {
            Scanner addsc = new Scanner(System.in);
            System.out.println("请输入学生id:");
            String sid = addsc.nextLine();
            int flag = studentService.isExist(sid);
            // 确认是否数据库中是否存在当前学生id信息,存在返回的是所在学生数组索引位置,否则返回-1
            if (flag == -1) {
                // 将用户输入的学生数据对象传入studentService.addStudent,以添加学生
                studentService.addStudent(editStudent(sid));
                System.out.println("添加成功。");
            } else {
                System.out.println("该学生已经添加过啦");
            }
        }
    }
    
    
  • StudentService.java

    package com.fcarey.schoolManager.service;
    
    import com.fcarey.schoolManager.dao.StudentDao;
    import com.fcarey.schoolManager.domain.Student;
    
    /*
     * 业务的逻辑处理
     * */
    public class StudentService {
        // 接收StudentController的请求并转发给数据访问对象处理
        StudentDao studentDao = new StudentDao();
    
        public void addStudent(Student student) {
            studentDao.addStudent(student);
        }
    
        public int isExist(String sid) {
            return studentDao.isExist(sid);
        }
    
    
        public Student[] retrieveStudent() {
            return studentDao.retrieveStudent();
        }
    
        public void deleteStudent(String sid) {
            studentDao.deleteStudent(sid);
        }
    
        public void updateStudent(Student student, int flag) {
            studentDao.updateStudent(student, flag);
        }
    
        public Student findStudent(int flag) {
            return studentDao.findStudent(flag);
        }
    }
    
    
  • StudentDao.java

package com.fcarey.schoolManager.dao;

import com.fcarey.schoolManager.domain.Student;

/*
 * 访问存储数据的数组,进行增删改查
 * */
public class StudentDao {
    // 创建一个学生一维数组,定义5个元素
    private static Student[] students = new Student[5];
    // 构造默认的构造方法
    public StudentDao() {
    }

    public void addStudent(Student student) {
        for (int i = 0; i < students.length; i++) {
            if (i == students.length - 1) {
                // 确认学生是否加满
                System.out.println("学生加满了,加不动了");
                return;
            }
            if (students[i] == null) {
                // 没有,则将接收过来的学生对象写入学生数组中
                students[i] = student;
                break;
            }
        }

    }

    public int isExist(String sid) {
        int flag = -1;
        // 确认是否数据库中是否存在当前学生id信息,存在返回的是所在学生数组索引位置,否则返回-1
        for (int i = 0; i < students.length; i++) {
            if (students[i] != null) {
                if (students[i].getSid().equals(sid)) {
                    flag = i;
                }
            }
        }
        return flag;
    }

    public Student[] retrieveStudent() {
        return students;
    }

    public void deleteStudent(String sid) {
        students[isExist(sid)] = null;
    }

    public void updateStudent(Student student, int flag) {
        students[flag]=student;
    }

    public Student findStudent(int flag) {
        return students[flag];
    }
}

5.3.2 Teacher

  • 老师类似学生

标签:Java,String,思想,System,学生,sid,println,一些,public
From: https://www.cnblogs.com/f-carey/p/18363115

相关文章

  • java ThreadLocal做线程隔离
    `ThreadLocal`类提供了线程局部变量,每个线程都可以独立地访问自己的变量副本,而不会影响其他线程的副本。这在多线程环境中非常有用,可以避免线程间的数据共享和竞争条件,提高程序的线程安全性。###ThreadLocal的用法:1.**创建ThreadLocal对象**:首先需要创建一个`ThreadLocal`......
  • java并发 第四章共享模型之管程 3 synchronized 原理
    1.轻量级锁轻量级锁的使用场景:如果一个对象虽然有多线程要加锁,但加锁的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化。轻量级锁对使用者是透明的,即语法仍然是synchronized假设有两个方法同步块,利用同一个对象加锁 staticfinalObjectobj=newObject();......
  • 浙江省住房和城乡建设行业继续教育刷课脚本-JavaScript编写
    脚本学习网站:https://zj.zjjsrc.cn/web/web_toUserSignUp.page脚本地址:浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本:https://greasyfork.org/zh-CN/scripts/506406-浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本教程1.插件安装(以MicrosoftEdge浏览器......
  • 浙江省建设人才远程继续教育平台刷课脚本-JavaScript编写
    脚本学习网站:https://zj.zjjsrc.cn/web/web_toUserSignUp.page脚本地址:浙江省建设人才远程继续教育平台刷课脚本:https://greasyfork.org/zh-CN/scripts/506406-浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本教程1.插件安装(以MicrosoftEdge浏览器为例)打开最中间......
  • 深入理解HTTP连接池及其在Java中的应用
    更多内容前往个人网站:孔乙己大叔        在现代的Web开发中,HTTP请求已经成为应用程序与外部服务交互的主要方式。随着微服务架构的流行,一个应用可能需要同时与多个外部服务进行通信,这导致HTTP请求的数量显著增加。为了提升性能和资源利用率,HTTP连接池成为了一个不可......
  • 【网络安全 | Java代码审计】Code-Breaking Puzzles-javacon
    未经许可,不得转载。源码:https://www.leavesongs.com/media/attachment/2018/11/23/challenge-0.0.1-SNAPSHOT.jar,下载至桌面。考察知识点:SpEL注入正文执行命令运行环境:java-jarC:\Users\86177\Desktop\challenge-0.0.1-SNAPSHOT.jar浏览器访问localhost:8080使用JD-......
  • Java生产环境下性能监控与调优指南
    Java生产环境下性能监控与调优指南目录引言Java性能监控2.1性能监控工具2.2关键性能指标Java应用性能调优3.1内存调优3.2垃圾回收调优3.3多线程优化3.4数据库连接优化3.5代码级优化结语1.引言在Java应用的生产环境下,性能监控及调优显得至关重要,它们......
  • 深度学习实践的一些基本概念
    forward函数自动被调用是PyTorch设计的一部分,这种设计是为了简化神经网络模型的实现和使用。在PyTorch中,forward函数是nn.Module类的一个核心组成部分,它是PyTorch神经网络模块的默认前向传播方法。为什么设计成自动调用?封装性:通过自动调用forward函数,PyTorch......
  • Java线程生命周期:Java线程生命周期全景解读
    1.线程生命周期概述:不仅仅是状态转换在多线程编程中,理解线程的生命周期对于编写有效、高效的代码至关重要。线程生命周期通常描述了线程从创建到死亡的一系列状态变化过程,但其实不仅仅局限于这些状态的简单转换。线程生命周期的理解应该考虑系统资源的分配、线程调度、同步、通信......
  • JAVA基础:对象流
    目录前言序列化和反序列化对象流的创建前言之前的流我们都是使用他们读取一些字节或者字符的数据,但是在实际的应用中数据的类型除了基本数据类型之外,还有引用数据类型,对象流就是能读取引用数据类型的流序列化和反序列化对象流的本质是一个字节流,也是过程流对象流的......