学习周报|3月第4周

wow CSDN的编辑页面更新了耶(^-^)
感觉以前更方便些哈哈哈哈

一、学习内容

1.概要

  • 异常处理
  • 综合项目3:开发团队调度软件
  • 高级篇-多线程
  • 高级篇-常用类

2.具体内容

异常处理

  • 异常处理机制:(2种方法)
    try catch finally:常用,try{包住异常}catch(异常类型){处理异常方法}finally{一定会执行的内容}
    throws: 向上级抛出
  • 手动抛出异常对象——抓抛方法
    抛:2种,系统自动抛出、throw抛出(比如输入为负数之类)
    抓:2种,try catch finally、throws

在这里插入图片描述

项目3 开发团队调度软件

domain ——Javabean类所在的包

Employee及子类Programmer、Designer、Architect
接口Equipment及实现类NoteBook、PC、Printer

基本的类创建

service ——具体实现模块

NameListService:
负责将Data中的数据封装到Employee[]数组中,同时提供相关操作Employee[]方法
在这里插入图片描述
Employee[]中装有 ID 姓名 年龄 工资 职位 奖金 股票 设备
1.先构建Data数量的数组
2.把共有的 ID 姓名 年龄 工资 用Data.EMPLOMMES[i][1]获取
*注意int型double要用Integer.parseInt 把string型转化为int
【eg】 double salary = Integer.parseInt(Data.EMPLOYEES[i][4]);
3.用 switch(type)
{ case xxx :
break;…
}
根据type,提取对应对象的 设备和奖金、股票、职位
【eg】 employees[i] = new Architect(id, name, age, salary, equipment, bonus, stock);
4.3中获取设备 可以写为一个方法:createEquipment(i)
根据 Data.EQUIPMENTS[][]数组中的type,生成对应的文字内容,用switch case
【eg】
double price = Double.parseDouble(Data.EQUIPMENTS[i][2]);
return new NoteBook(model,price);
5.获取所有员工方法getAllEmployees()
直接return employees;
6.获取指定id的员工方法getEmployee(int id) throws TeamException {
*注意 抛 找不到指定员工 异常
【eg】throw new TeamException(“找不到指定员工”);//抛出异常
在这里插入图片描述

TeamService
关于开发团队成员的管理:添加、删除等
在这里插入图片描述
1.属性
counter:member id 从1++【static int 】
MAX_MEMBER:限制开发团队的人数【final int】
Programmer[] team:数组team,保存开发团队成员
total:记录开发团队中实际人数【int】
2.getTeam()
获取开发团队中的所有成员
team[i] = this.team[i];
3.addMember(Employee e) throws TeamException {
将指定员工添加到开发团队中
3.1 对错误情况,报错
该成员不是开发人员,无法添加
该员工已在本开发团队中(用isExit 方法)
该员工已是某团队成员(用状态status判断) 该员正在休假,无法添加
团队中至多只能有一名架构师
团队中至多只能有两名设计师
团队中至多只能有三名程序员

【eg】 该成员不是开发人员,无法添加
if (!(e instanceof Programmer)){
throw new TeamException(“该成员不是开发人员,无法添加”);
}
【eg】判断状态
该员工已是某团队成员(用状态status判断) 该员正在休假,无法添加
//1.强转
Programmer p = (Programmer) e;
//2.判断状态
if (“BUSY”.equals(p.getStatus().getNAME())){//注 放在前面,可能空指针错误
throw new TeamException(“该员工已是某团队成员”);
}else if (“VOCATION”.equals(p.getStatus().getNAME())){
throw new TeamException(" 该员正在休假,无法添加");
}
3.2 对达到上限的情况,报错
//获取team中已有成员中架构师、设计师、程序员的个数
if (team[i] instanceof Architect){
numOfArch++;
//获取当前的p类别
if (p instanceof Architect){
if (numOfArch >= 1){
throw new TeamException(“团队中至多只能有一名架构师”);
}
}else if (p instanceof Designer){
注意 必须的if(){if()…}写法,且从小Arc到大Pro顺序
用&&写法,架构师已满情况下,加入架构师会进入else if中 把架构师当设计师。
逻辑理清楚
3.3加入
//添加
team[total++] = p;
//状态
p.setStatus(Status.BUSY);
//mID
p.setMemberId(counter++);
4.删除
removeMember(int memberId) throws TeamException {
//1 for 遍历 team 找到 id ,状态改为FREE,找到就跳出break
//报错 if (i == total){//已知找不到匹配的则i最后为total
throw new TeamException(“找不到指定memberId的员工,删除失败”);
}
//2 删除 — j-1=j;total-1=null;

View模块

写对应的输出界面
注意 while循环 何时用何时不用

 switch (menu){
               case '1':
                   getTeam();//显示团队成员列表
                   break;
               case '2':
                   addMember();//添加成员
                   break;
               case '3':
                   deleteMember();//删除成员
                   break;
               case '4':
                   System.out.println("确认是否退出(Y/N):");
                   char isExit = TSUtility.readConfirmSelection();
                   if (isExit == 'Y'){
                       loopFlag = false;
                   }

在这里插入图片描述
在这里插入图片描述

高级篇-多线程

线程的创建(4种方法)

继承Thread
实现runnable接口
实现Callable接口
使用线程池(常用)

解决线程安全问题(3种方法)

同步代码块 synchronized(同一的同步监视器){}
同步方法 private synchronized void show(){}
Lock锁 手动.lock .unlock

高级篇-JAVA常用类ing

String…内部创建的位置

在这里插入图片描述

3.遇到的问题及反思(80/100)

  • 对IDEA的快捷键不熟练
    慢慢积累,把常用操作替换成快捷键
  • 不太明白IDEA 项目下面package的关系
  • Huawei软挑热身赛…连导入数据都搞不定…
    检索能力要提升,百度不到位
    等系统学完再看看

二、下周计划

  • 继续高级阶段
  • HW软挑的题目看看
  • Android的开发教程
发布了14 篇原创文章 · 获赞 0 · 访问量 575

猜你喜欢

转载自blog.csdn.net/weixin_44618426/article/details/105167181