7.31学习心得
1. 异常类层次结构
Exception:处理用户程序应当捕获的异常情况。
Error:Error 类的异常为内部错误,因此在正常情况下不期望用户的程序捕获它们 。
2. Java 异常类
3. 异常处理块的一般形式
4. throw 与 throws 区别
throw(抛出异常):如果在当前环境无法解决一个异常,就要将其抛出,把异常交给调用者处理。
throws(声明异常):throws 是方法可能抛出异常的声明。
5. 用户自定义异常
(1)创建一个类继承 Exception 或其子类;
(2)为该异常类添加构造方法;
(3)在一个方法中使用throw抛出异常;
(4)在另一个方法中捕获并处理异常。
课堂作业:
1.编写如下异常类:
空异常(NullException ,年龄低异常(LowAgeException),年龄高异常(HeightAgeException),
工资低异常(LowSalaryException),工资高异常(HighSalaryException),身份证非法异常(IdCardException)
2.编写一个员工类,
(1) 有属性:
编号,姓名,年龄,工资,身份证号码,员工人数(10),员工工资总额(10000)
(2) 有构造器:
构造器1:设置编号,年龄,姓名;如果年龄小于18,抛出年龄低异常;如果年龄大于60
抛出年龄高异常,如果姓名为null或为空字符串,抛出空异常。
构造器2:设置工资,设置身份证号码;如果工资低于600,抛出工资低异常。
如果身份证不是18位,抛出身份证非法异常。
(3) 有方法
增加工资 addSalary(double addSalary),抛出工资高异常,当增加后的工资大于员工工资总额时,抛出此异常。
减少工资 minusSalary(double minusSalary), 抛出工资低异常,当减少后的工资低于政府最低工资时,抛出工资低异常。
显示员工工资总额方法:showTotalSalary(),抛出空异常,当工资总额为0时,抛出此异常。
显示员工人数:voidshowTotalEmployee(),抛出空异常。当员工人数为0时,抛出此异常
3.编写main主测试类
分别生成3个员工,测试构造方法的异常抛出。
每个员工分别增加,减少工资,测试方法的异常。
显示员工的人数和工资总额。
实现:
NullException 类:(所有异常类格式差不多)
方式一:
public class NullException extends Exception {
private String name;
public NullException(String name) {
this.name = name;
}
public String toString() {
return "空异常!";
}
}
方式二:
public class NullException extends Exception {
public NullException(){
super();
}
public NullException(String message){
super(message);
}
}
employees 类:(也可直接给异常类赋值显示出来实现)
public class employees {
private int id;
private String name;
private int age;
private double pay;
private String idcard;
private final int num = 10;
private final double payNum = 10000;
public employees(int i, int a, String n) throws LowAgeException, HeightAgeException, NullException {
this.id = i;
this.age = a;
this.name = n;
if(age < 18) {
throw new LowAgeException(age);
} else if (age > 60) {
throw new HeightAgeException(age);
} else if (name == "" || name == null) {
throw new NullException(name);
}
}
public employees(double p, String ic) throws LowSalaryException, IdCardException{
this.pay = p;
this.idcard = ic;
if(pay < 600)
{
throw new LowSalaryException(pay);
} else if (idcard.length() < 5) {
throw new IdCardException(idcard);
}
}
public void addSalary(double addSalary) throws HighSalaryException{
pay += addSalary;
if(pay > payNum){
throw new HighSalaryException(pay);
}
}
public void minusSalary(double minusSalary) throws LowSalaryException {
pay -= minusSalary;
if(pay < 600){
throw new LowSalaryException(pay);
}
}
public void showTotalSalary() throws NullException{
if(pay == 0){
String pp = String.valueOf(pay);
throw new NullException(pp);
}
System.out.println(pay);
}
public void showTotalEmployee(){
/*if(num == 0){
String n = String.valueOf(num);
throw new NullException(n);
}*/
System.out.println(num);
}
}
main 函数:
public class work2 {
public static void main(String[] args) {
/*try {
employees aa = new employees(1, 18, "aa");
employees bb = new employees(1, 20, "bb");
employees cc = new employees(1, 70, "cc");
} catch (NullException e) {
System.out.println(e);
} catch (LowAgeException e) {
System.out.println(e);
} catch (HeightAgeException e) {
System.out.println(e);
}*/
try {
employees dd = new employees(800, "15487");
employees ee = new employees(700, "15478");
dd.addSalary(1000);
dd.showTotalSalary();
dd.showTotalEmployee();
} catch (LowSalaryException e) {
System.out.println(e);
} catch (IdCardException e) {
System.out.println(e);
} catch (HighSalaryException e) {
System.out.println(e);
} catch (NullException e) {
System.out.println(e);
} finally {
System.out.println("程序结束");
}
}
}
拓展:
在一个合法的 Java 源程序文件中定义了 3 个类,其中属性为 public 的类只能有1个。
重载方法返回值类型可以不同。
char 类型 + 1 实际上是ASCII 码 + 1 。
if (x++ == y) 中先执行 x==y 再执行 ++ 。