dijiuzu

 

20220729 第一组 于芮 异常处理(第二十天)

 
小白成长记——第二十天
 
   今天主要的学习内容是异常处理,学习了利用一些异常提醒解决问题,异常不是错误,并且这是一种帮助解决全局中出现问题的一种手段,异常分为多种异常,有编译期异常,运行期异常等,来看一下今天的学习笔记吧!

异常
异常处理
1.下标越界
2.空指针
3.类型转换异常
4.数字格式化
5.算术异常(数学异常)
异常的继承体系结构
throwable:错误,异常
error:正常情况下,不太可能出现。绝大多数error都会导致处于非正常状态下
很难恢复,外力的作用下,不考虑
exception:JAVA语言中,将程序执行中发生的不正常的情况称之为异常
编译期异常:写代码的时候,抛异常
运行期异常:runtimeexception 运行时会抛出异常
自定义异常:java中的异常机制,结合实际业务
如何自定义异常
1.所有异常必须是throwable的子类(不用)
2.如果要定义一个编译期异常,需要继承exception类
3.如果要定义一个运行期异常,需要继承runtimeexception
在一个语句块中,如果使用throw抛出一个编译期异常,就必须在方法的声明处使用throws关键字来标记异常类型

还有一种处理方式,就是直接try...catch

我们为什么要手动抛异常?
因为要配合全局异常处理机制来解决问题
throw语句是可以当做方法的返回值的。

在一个有返回值的方法中,如果有条件分支,一定要保证每种情况下都有返回值,哪怕是抛异常。

开发中,大部分情况下使用的都是运行期异常!!!

异常链
一个异常被抛出之后会继续被调用这个方法的方法捕获或抛出,异常会扩散

如果一个方法没有捕获编译器异常,该方法不需使用throws来声明
throws并不是真正的解决了异常,只是把异常抛给了下一级调用者。
throws出现在什么地方?
方法的声明处,抛出多个异常,用逗号隔开。
finally关键字
finally用来创建在try代码块后面执行放入代码块
无论是否发生异常,finally代码块中的代码一定会执行。一般finally中的代码都是用来释放资源。
重写的方法不能抛出比被重写方法更大的异常类型

try...catch..finally执行顺序:finally永远是在最后执行的

   今天的实例是一个员工系统的升级版,里面利用抛出异常提示一些输入的不合法格式,来看一下代码吧!

  1 package C0729;
  2 
  3 import R0725.Queue;
  4 
  5 import java.math.BigDecimal;
  6 import java.time.LocalDate;
  7 import java.util.Scanner;
  8 
  9 public class Person {
 10     private Queue queue=new Queue();
 11     private  String empNo;
 12     private String name;
 13     private  Integer age;
 14     private  String idCard;
 15     private BigDecimal salay;
 16 
 17     private  Integer totalPeople;
 18     private BigDecimal totalSalay;
 19     private int  startnumber=1001;
 20 
 21     public Person() {
 22     }
 23 
 24     public String getIdCard() {
 25         return idCard;
 26     }
 27 
 28     public void setIdCard(String idCard) {
 29         this.idCard = idCard;
 30     }
 31 
 32     public String getName() {
 33         return name;
 34     }
 35 
 36     public void setName(String name) {
 37         this.name = name;
 38     }
 39 
 40     public BigDecimal getSalay() {
 41         return salay;
 42     }
 43 
 44     public void setSalay(BigDecimal salay) {
 45         this.salay = salay;
 46     }
 47 
 48     public String getEmpNo() {
 49         return empNo;
 50     }
 51 
 52     public void setEmpNo(String empNo) {
 53         this.empNo = empNo;
 54     }
 55 
 56     public Integer getAge() {
 57         return age;
 58     }
 59 
 60     public void setAge(Integer age) {
 61         this.age = age;
 62     }
 63 
 64     public Integer getTotalPeople() {
 65         return totalPeople;
 66     }
 67 
 68     public void setTotalPeople(Integer totalPeople) {
 69         this.totalPeople = totalPeople;
 70     }
 71 
 72     public BigDecimal getTotalSalay() {
 73         return totalSalay;
 74     }
 75 
 76     public void setTotalSalay(BigDecimal totalSalay) {
 77         this.totalSalay = totalSalay;
 78     }
 79 
 80     public int getStartnumber() {
 81         return startnumber;
 82     }
 83 
 84     public void setStartnumber(int startnumber) {
 85         this.startnumber = startnumber;
 86     }
 87 
 88     public Queue getQueue() {
 89         return queue;
 90     }
 91 
 92     public void setQueue(Queue queue) {
 93         this.queue = queue;
 94     }
 95 
 96     public Person(String empNo, String name, Integer age, String idCard) {
 97         this.empNo = empNo;
 98         this.name = name;
 99         this.idCard=idCard;
100         if(genage(idCard)>=18){
101             this.age = age;
102         }else{
103             throw  new RuntimeException("未成年!");
104         }
105         if(genage(idCard)<=60){
106             this.age=age;
107         }else{
108             throw new RuntimeException("年龄过高");
109         }
110         if(name!=null&&name!=""){
111             this.name=name;
112         }else{
113             throw new RuntimeException("姓名格式不合法");
114         }
115     }
116 
117     public Person(String empNo, String name, Integer age, String idCard, BigDecimal salay) {
118         this.empNo = empNo;
119         this.name = name;
120         this.age = age;
121         this.idCard = idCard;
122         this.salay = salay;
123     }
124     public void show(){
125         System.out.println("编号"+startnumber+"姓名:"+name+"年龄:"+genage(idCard)+"生日:"+genBir(idCard)+"工资:"+salay);
126     }
127     public Integer showTotalPeople(){
128         if(totalPeople==0){
129             throw new RuntimeException("没有员工");
130         }
131         return totalPeople;
132     }
133     public BigDecimal showTotalSalsy(){
134         if(totalSalay.compareTo(new BigDecimal("0"))==0){
135             throw new RuntimeException("没有工资");
136         }
137         return totalSalay;
138     }
139     public  void addSalay(BigDecimal salay){
140         if(this.salay.add(salay).compareTo(totalSalay)==1){
141             throw new RuntimeException("工资过高!");
142         }else {
143             this.salay=this.salay.add(salay);
144             this.totalSalay=this.totalSalay.add(salay);
145         }
146     }
147     public  Integer getTicket(){
148 
149         return queue.poll();
150     }
151     public  void pushTicket(int ticketNumber){
152         for (int i = 0; i < ticketNumber; i++) {
153             startnumber+=1;
154             queue.add(startnumber);
155 
156         }
157     }
158     public  void subSalay(BigDecimal salay){
159         if(this.totalSalay.subtract(salay).intValue()<1800){
160             throw new RuntimeException("工资低于1800,不符合标准!");
161         }else{
162             this.salay=this.salay.subtract(salay);
163             this.totalSalay=this.totalSalay.subtract(salay);
164         }
165     }
166     public    Integer genage(String idCard){
167         String yearStr=this.getIdCard().substring(6,10);
168         int year=Integer.parseInt(yearStr);
169         int now= LocalDate.now().getYear();
170         return now-year;
171     }
172     public   String genBir(String idCard){
173         String bir=this.getIdCard().substring(10,14);
174         StringBuilder stringBuilder=new StringBuilder(bir);
175         stringBuilder.insert(2,"月");
176         stringBuilder.insert(5,"日");
177         return stringBuilder.toString();
178     }
179 
180 
181 }
 1 package C0729;
 2 
 3 import java.math.BigDecimal;
 4 import java.util.Scanner;
 5 
 6 public class Test {
 7     public static void main(String[] args) {
 8         Person person=new Person();
 9         Scanner in=new Scanner(System.in);
10         System.out.println("请输入姓名:");
11         String name=in.next();
12         person.getName();
13         System.out.println("请输入身份证号:");
14         String idCard=in.next();
15         person.getIdCard();
16         System.out.println("请输入工资:");
17         BigDecimal salay1=in.nextBigDecimal();
18         person.getSalay();
19         person.getStartnumber();
20         person.show();
21         System.out.println("请选择:1.涨工资 \n2.降工资");
22         int a=in.nextInt();
23         System.out.println("请输入金额:");
24         BigDecimal salay=in.nextBigDecimal();
25         switch (a){
26             case 1:
27                 person.addSalay(salay);
28                 break;
29             case 2:
30                 person.subSalay(salay);
31                 break;
32         }
33         person.showTotalPeople();
34         person.showTotalSalsy();
35 
36 
37     }
38 }

 

posted on 2022-07-29 20:21  于芮  阅读(30)  评论(1编辑  收藏  举报

导航