01分类和static
案例驱动教学模式介绍
业务逻辑聚集的过于紧密,将导致我们的代码可读性很差
- 达成目标
分类思想
我们之前写的学生管理系统是把所以的业务功能都放在一个java文件中,如果出现了问题维护起来也不太方便。我们需要将代码进行拆分,进行分类管理
- 当工作量比较小时
- 工作量大了进行分工协作效率更高,也更易于管理
- 当用户来访问我们的系统
- 由客服进行接待,用户表达诉求,客服做出相应的反应
此时当用户提供数据,我们的客服不能拿着数据直接去找存储数据具的集合或者数组,因为进行了跨部门,访问集合或者数组的操作只能由库管来完成,而客服的职责只能是和用户打交道,它并没有权限去操作数组和集合
- 客服应该接收到信息,通知Studentservice(业务员来做添加操作)
- 业务员会进行一些业务逻辑的处理,但是判断id是否存在等一些操作需要找StudentDAO(库管)帮忙
- DAO(库管)访问数据集合,然后将结果告诉StudentService(业务员)
- 业务员将id可用的消息告诉客服,可用继续录入信息
- 此时客服会告诉用户进行输入信息
后面用户继续录入信息,然后由客服请求业务员进行逻辑处理,逻辑员请求库管进行协作,然后库管操作数据库,这样一步步处理,然后将处理结果一步步上传到客服,以此反复 - 总结
包的概念和定义
从分类的思想可用知道,我们的项目会被划分为多个类,而这些类文件也需要被管理。即通过分包来管理‘
- 包的概述
包的注意事项和类访问
包的定义(package语句)必须为类文件中第一条可执行代码
我们可以看到使用全类名进行访问的话比较麻烦,所以在大多数时间里面,我们都是使用导包来完成不同包中类的访问。
使用全类名访问的应用场景
- 当我们需要使用2个不同包中相同名称的类时**
- 发现通过导包访问会报错
- 此时就可以通过全类名进行区分
- 总结
黑马信息管理系统--需求说明和效果演示
注意在学生或者是老师管理系统输入5退出时,是退出到主界面,再次按5退出时才是完全退出程序
环境搭建
- 分析那些代码属于那些类处理
菜单搭建
- 当输入1时要跳转到学生管理系统
根据各司其职的原则,当用户输入1时将跳转到学生管理系统,其中学生管理系统的页面展示应该是由StudentController来完成的
基本添加功能思路分析
基本添加功能代码实现
- 添加功能的实现
该思路就是每次添加的时候遍历我们的数据数组,如果为位置为空,则break,然后将数据存入该位置。我感觉这样有定麻烦
添加功能--加入学号判断
- 优化部分
关于为什么,此时关于输入id的唯一性判断没有成功实现的问题分析
- 内存中都有2份对象
第一次添加的数据会存储在第一个对象的数组中,第二次添加的会存储在第二个对象的数组中,这就是问题所在 - 使用static关键字解决
Static关键字的特点
static注意事项--学号存在问题解决
静态成员存在的时候,非静态成员可能还不存在
关于static修饰的成员不能调用非static修饰的成员的理解:
-
static修饰的内容会随着类的加载而加载到内存中,而非static修饰的内容会随着对象的创建而存在
-
当调用static修饰的内容时,对象可能还不存在,所以非static修饰的成员也还不存在。所以static 修饰的成员不能调用static
-
修饰的成员
为什么static修饰的内容里面不能存在this关键字 -
this表示当前正在调用的对象的引用
-
当static修饰的方法被调用的时候可能还不存在对象
为什么非静态修饰的成员既可以访问非静态修饰的成员也可以访问静态修饰的成员?
- 因为非static修饰的内容随着对象的存在而存在,而static修饰的内容在对象存在之前一定已经存在
- 总结
学号存在问题的解决
查看学生
- 思路分析
删除功能 ----代码实现
- 思路分析
我们发现我们在一个类中的很多方法中都创建了Scanner ,优点浪费,可以直接在成员的位置创建一个即可
在这里我们删除数组中的元素是直接使用Null进行覆盖,所以获取数组中的元素的时候必须要判断是否为Null
修改功能--代码实现
- 思路分析
学生管理系统的优化
- 录入id优化
在我们的代码中存在2段都是录入学生id,并且判断该id是否存在,不存在则循环继续录入的的代码。这样将会造成代码冗余。我们可以将这段代码抽取成一个方法
我们的add方法和update和delect方法关于id录入的逻辑是不一样的,所以不能将add里面的录入id的代码也和upate一样录入成一个方法
- 录入学生信息优化
老师管理系统
环境搭建