ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-07-29 20:32:02  阅读:153  来源: 互联网

标签:idCard String 于芮 void 第一组 20220729 异常 public BigDecimal


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

异常
异常处理
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 }

 

标签:idCard,String,于芮,void,第一组,20220729,异常,public,BigDecimal
来源: https://www.cnblogs.com/dijiuzu/p/16533454.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有