异常
五个关键字
try:执行可能产生异常的代码
catch 捕获异常
finally 无论是否发生异常,代码总能执行
throws 声明方法可能抛出的各种异常
throw手动抛出异常
Exception 异常层次的父类
ArithmeticException 算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException 数组下标越界
NullPointerException 尝试访问 null对象成员
ClassNotFoundException 不能加载所需的类
IllegalArgumentException 方法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException 数字格式转换异常。如把“ABC”转换成数字
当在catch语句块中出现异常时加入强制退出 System.exit(1)时,直接中断程序而不是进入finally块
在catch中加入return
顺序为 try-catch-finally-return
多重catch块中
排列catch语句的顺序,先子类后父类
发生异常时按顺序逐个匹配
只执行第一个与异常类型匹配的catch语句
需求,在控制台输入1-3之间的数字,如果输入不是数字给出提示,不管对错都输出欢迎提出建议
public class Subject {
private static Logger logger=Logger.getLogger(Subject.class);
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
try {
logger.info("请输入一个数字");
int num=input.nextInt();
switch (num){
case 1:
logger.info("Java");
break;
case 2:
logger.info("Html");
break;
case 3:
logger.info("Python");
break;
}
}
catch (InputMismatchException ex){
logger.debug("程序出错");
logger.debug(ex.getMessage());
}
catch (Exception ex){
logger.debug("程序出错");
logger.debug(ex.getMessage());
}
finally {
logger.info("欢迎提出建议");
}
}
}
这里运用了jar日志的形式
捕获异常如果输入不是数字时显示错误信息,但是由于有finally,继续执行后面语句并不会终止程序
在这里插入图片描述
get message是获取错误信息
也可以用InputMismatchException来获取错误信息
我们还可以重写异常方法例如:
public class MyException extends RuntimeException {
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
}
然后建立新的异常方法,例如输入年龄判断
如果年龄不在1-100之间则出现异常报错年龄必须在1-100之间
public class Person {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) throws Exception{
if (age>=1&&age<=100){
this.age = age;}
else {
throw new MyException("年龄必须在1-100之间");
}
}
}
throws定义异常方法
throw抛出年龄不在1-100的异常
public class Test {
public static void main(String[] args){
Person person = new Person();
try {
person.setAge(101);
}catch (Exception ex){
ex.printStackTrace();
}
}
}
测试如果输入的是101
catch捕获异常
而且这里的异常是自己建的MyException
异常分为运行时和检查时
运行时不要求程序必须做处理
检查时程序必须处理该异常