Java异常编程题(巩固语法)

  • 处理异常,让含受检异常(checked Exception)的程序可以运行完成。个人觉得学完后,通过自己编几题,可以巩固一下知识,也可以测试一下这方面熟不熟悉吧。

先复习一下异常用到的几个关键字:

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<smallFactory.minSalary)
			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<smallFactory.minSalary)
			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<smallFactory.minSalary)
			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<smallFactory.minSalary)
			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<smallFactory.minSalary)
			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<smallFactory.minSalary)
			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();
		}
}
}

测试几条自己想测试的案例会发现,方法体内有一个异常对象被抛出的话,那么它后续的代码都不会被执行。

相信如果你自己单独写完这题会有收获的。

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

假正经的小柴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值