先复习一下异常用到的几个关键字:
1. try:检测可能出现异常的代码块,如果出现异常就将其抛出
2. catch:用于捕获异常,捕获try抛出来的异常
3. finally:不管有无异常都会执行的语句块,一般用于回收try中所使用的资源。但需要注意是,当try语句块中抛出了异常,catch没有捕捉处理,就会交给JVM处理,但这样的话finally语句块执行后,在finally外的语句块不会被执行
4. throw:用于抛出异常
5. throws:用在方法定义时,(放方法参数括号的后面)用于声明该方法可能抛出的异常,就是在方法体内抛出的异常对象如果和throws后异常类相匹配的话,就会被它接受放表内,然后调用该方法时异常对象就会被抛出,和throws所供异常类不符的话就会向上抛出
题目:
一个小工厂处理员工工资问题。工厂有员工人数,以及老板能承受给出的最高薪水和员工要求的最低薪水。
员工有姓名,年龄,⼯资,⾝份证号码等代表自身身份的属性。小工厂内有减工资和升工资措施,当工资小于最小薪水时会发生异常给予提醒小工厂老板,当工资大于最大老板能给予的薪水时也会给出异常提醒小工厂老板。
当然小工厂没员工也会发现异常(就是工厂员工人数为0),还有员工的一些信息错误也会异常,比如身份证号错误(身份证号应有十八位),年龄不符合工作条件(年龄需满十八岁且不能高于60岁)
阅读完题目,我们可以总结出我们需要完成的异常类有:空异常,年龄异常,工资异常,身份证非法异常。
如图所示:
根据画的图可以清楚的了解直接继承的关系,然后编写所需的异常类:
- //定义空异常类
- class nullException extends Exception{
- private String message;
- public nullException(String message) {
- this.message = message;
- }
- public String getmessage() {
- return message;
- }
- }
- //定义年龄异常类
- class AgeException extends Exception{
- private String message;
- public AgeException(String message) {
- this.message = message;
- }
- public String getmessage() {
- return message;
- }
- }
- //定义薪水异常类
- class SalaryException extends Exception{
- private String message;
- public SalaryException(String message) {
- this.message = message;
- }
- public String getmessage() {
- return message;
- }
- }
- //定义身份证异常类
- class IDcardException extends Exception{
- private String message;
- public IDcardException(String message) {
- this.message = message;
- }
- public String getmessage() {
- return message;
- }
- }
定义完可能出现的异常类,那么现在就可以构建小工厂类和员工类了:
- //定义小工厂类
- class smallFactory{
- public static int number; //厂内人数
- public static int minSalary;
- public static int maxSalary;
- static {
- number = 10;
- minSalary = 600;
- maxSalary = 100000;
- }
- public smallFactory() {
-
- }
- //方便修改最低最高薪水
- public smallFactory(int minSalary,int maxSalary) {
- this.minSalary = minSalary;
- this.maxSalary = maxSalary;
- }
- }
- //定义员工类
- class Employee extends smallFactory{
- private String name; //员工姓名
- private int Age; //员工年龄
- public int Salary; //员工起始工资,不包含加薪和降薪后的工资(加薪降薪有些人有有些人没有)
- private String idCard; //员工身份证号
- }
(薪水后续可能要改变,可能要被外界访问,所以就设为public访问权限)
定义完属性后,现在可以构造可能发生的异常了,我们可以用throws关键字在员工类的构造函数中进行实现,然后再在员工类中添加两个方法,一个加薪,一个降薪。
写好后员工类的代码如下:
- //定义员工类
- class Employee extends smallFactory{
- private String name; //员工姓名
- private int Age; //员工年龄
- public int Salary; //员工起始工资,不包含加薪和降薪后的工资(加薪降薪有些人有有些人没有)
- private String idCard; //员工身份证号
-
- public Employee(int Age,int Salary,String idCard) throws Exception{
- //可能出现的年龄异常
- if(Age<18) {
- System.out.println("还是先去读书吧,小小年纪别想着进厂");
- throw new AgeException("年龄小了!");
- }
- else if(Age>60)
- throw new AgeException("年龄太大了!");
-
- //可能出现的薪水异常
- this.Salary = Salary;
- if(Salary
- throw new SalaryException("工资也忒少了吧!");
- else if(Salary>smallFactory.maxSalary) {
- System.out.println("想屁吃呢?想拿这么高工资!");
- throw new SalaryException("工资太高了,应该统计错了");
- }
-
- //可能出现的身份证非法异常
- if(idCard.length()!=18)
- throw new IDcardException("身份证号非法异常");
- }
-
- //添加个加薪方法
- public void addSalary(int addSalaryNum)throws Exception {
- Salary = Salary+addSalaryNum;
- if(Salary
- throw new SalaryException("加了钱还这么少啊");
- else if(Salary>smallFactory.maxSalary) {
- System.out.println("想屁吃呢?想拿这么高工资!");
- throw new SalaryException("工厂付不起这工资");
- }
- }
-
- //添加个降薪方法
- public void cutSalary(int cutSalaryNum)throws Exception{
- Salary = Salary-cutSalaryNum;
- if(Salary
- throw new SalaryException("活该这么点工资");
- if(Salary>smallFactory.maxSalary)
- throw new SalaryException("降工资还这么高,应该算错了");
- }
- }
最后我们在主函数内进行测试,看是否有异常,有的话进行捕获和解决,没的话输出该厂这名员工的这些信息。(那个抛出异常对象的那个信息是我自己写的,自己可以写认为看得顺眼的异常产生信息)
总代码如下:
- import java.util. *;
-
- //定义空异常类
- class nullException extends Exception{
- private String message;
- public nullException(String message) {
- this.message = message;
- }
- public String getmessage() {
- return message;
- }
- }
- //定义年龄异常类
- class AgeException extends Exception{
- private String message;
- public AgeException(String message) {
- this.message = message;
- }
- public String getmessage() {
- return message;
- }
- }
- //定义薪水异常类
- class SalaryException extends Exception{
- private String message;
- public SalaryException(String message) {
- this.message = message;
- }
- public String getmessage() {
- return message;
- }
- }
- //定义身份证异常类
- class IDcardException extends Exception{
- private String message;
- public IDcardException(String message) {
- this.message = message;
- }
- public String getmessage() {
- return message;
- }
- }
-
-
- //定义小工厂类
- class smallFactory{
- public static int number; //厂内人数
- public static int minSalary;
- public static int maxSalary;
- static {
- number = 10;
- minSalary = 600;
- maxSalary = 100000;
- }
- public smallFactory() {
-
- }
- //方便修改最低最高薪水
- public smallFactory(int minSalary,int maxSalary) {
- this.minSalary = minSalary;
- this.maxSalary = maxSalary;
- }
- }
- //定义员工类
- class Employee extends smallFactory{
- private String name; //员工姓名
- private int Age; //员工年龄
- public int Salary; //员工起始工资,不包含加薪和降薪后的工资(加薪降薪有些人有有些人没有)
- private String idCard; //员工身份证号
-
- public Employee(int Age,int Salary,String idCard) throws Exception{
- //可能出现的年龄异常
- if(Age<18) {
- System.out.println("还是先去读书吧,小小年纪别想着进厂");
- throw new AgeException("年龄小了!");
- }
- else if(Age>60)
- throw new AgeException("年龄太大了!");
-
- //可能出现的薪水异常
- this.Salary = Salary;
- if(Salary
- throw new SalaryException("工资也忒少了吧!");
- else if(Salary>smallFactory.maxSalary) {
- System.out.println("想屁吃呢?想拿这么高工资!");
- throw new SalaryException("工资太高了,应该统计错了");
- }
-
- //可能出现的身份证非法异常
- if(idCard.length()!=18)
- throw new IDcardException("身份证号非法异常");
- }
-
- //添加个加薪方法
- public void addSalary(int addSalaryNum)throws Exception {
- Salary = Salary+addSalaryNum;
- if(Salary
- throw new SalaryException("加了钱还这么少啊");
- else if(Salary>smallFactory.maxSalary) {
- System.out.println("想屁吃呢?想拿这么高工资!");
- throw new SalaryException("工厂付不起这工资");
- }
- }
-
- //添加个降薪方法
- public void cutSalary(int cutSalaryNum)throws Exception{
- Salary = Salary-cutSalaryNum;
- if(Salary
- throw new SalaryException("活该这么点工资");
- if(Salary>smallFactory.maxSalary)
- throw new SalaryException("降工资还这么高,应该算错了");
- }
- }
-
-
- public class Solution{
- public static void main(String[] args) {
- Scanner reader = new Scanner(System.in);
- String _name = reader.next();
- int _Age = reader.nextInt();
- String _idCard = reader.next();
- int _Salary = reader.nextInt();
-
- try {
- Employee human = new Employee(_Age,_Salary,_idCard);
- //上面如果没有发生异常的话,对有加薪降薪的人进行操作
- /*int addSalaryNum = reader.nextInt();
- human.addSalary(addSalaryNum);*/
- /*int cutSalaryNum = reader.nextInt();
- human.cutSalary(cutSalaryNum);*/
-
- //都没有异常的话,就打印该人的信息
- System.out.print("姓名\t年龄\t身份证号\t\t\t薪水\n");
- System.out.print(_name + '\t' + _Age + '\t' + _idCard + '\t' + human.Salary + '\n');
- }
- catch(Exception e) {
- //获取有关异常的信息
- e.printStackTrace();
- }
- }
- }
测试几条自己想测试的案例会发现,方法体内有一个异常对象被抛出的话,那么它后续的代码都不会被执行。
相信如果你自己单独写完这题会有收获的。
-
相关阅读:
Python制作GUI学生管理系统【毕设必备】
Unity中SmoothStep介绍和应用: 溶解特效优化
Kotlin 环境下解决属性初始化问题
【css揭秘】- 47个不可不知的 css 技巧(上篇0-19)
29. 【Android教程】折叠列表 ExpandableListView
solidworks 2024新功能之-打造更加智能的工作 硕迪科技
C++11(下)
Unity中location和rotation赋值和更改
【brpc学习实战二】brpc client构建基本流程
《下一代互联网(IPv6)搭建与运维》1+X证书
-
原文地址:https://blog.csdn.net/qq_63691275/article/details/126915485