java异常处理
编译异常必须处理,比如
SimpleDataFormat sdf = new SimpleDataFormat("YYYY-MM-DD HH:MM:SS"); Date d = sdf.parse("2022-11月-07 11:11:59");//这一行会有日期异常,必须处理,可以throws往上层抛,也可以try catch自己处理,如果层层上抛都不用try catch处理的话 ,代码运行到这里如果没有出现异常程序没问题,如果出现异常程序就死了不会往下走,如果用try catch处理的话,即使出了异常,程序会按catch里的处理方式处理,然后跳过当前 try里 剩下的代码,继续执行try块以外的代码,实际中的用法是:第一种 :如果自己写一个方法,把方法中所有会抛异常的代码放到一个try里面,用一个 catch Exception打印出错信息,如果方法出现 异常,主方法还能继续执行。为什么不把方法里每个会抛异常的代码都单独try起来呢?这样上面的代码抛了异常还能接着往下走,因为业务的需要往往是一个方法里出现异常机会不往下走了。 第二种:方法里直接抛异常,main方法来try catch
try { FileInputStream fis = new FileInputStream("nonexistentfile.txt"); } catch (FileNotFoundException e) { e.printStackTrace(); }//这种就是编译异常,必须处理,可以try-catch,也可以throws往上抛
运行异常 (RuntimeException或它的子类)可以不处理,不处理也能编译通过,比如数组下标越界异常,空指针异常
try { int[] numbers = {1, 2, 3}; System.out.println(numbers[3]); // 数组越界异常 } catch (ArrayIndexOutOfBoundsException e) { e.printStackTrace(); } //这里的运行异常也可以不写try-catch一样能编译通过
自定义异常 :自己定义一个类,继承Exception,重写构造方法,在需要抛异常的地方 throw new 自定义异常,在方法头用 throws向上抛,在调用这个方法的地方 用try catch处理
//自定义异常类 public class AgeIllegalException{ public AgeIllegalException(){} public AgeIllegalException(String message) { super(message); } }
//测试类
public class ExceptionDem{
public static void main(Strng[] args){
try{
fun(200);
}catch(AgeIllegalException e){
e.printStackTrace();
}
}
public void fun1(int age) throws AgeIllegalException{
if(age<0||age>100){
throw new AgeIllegalException("年龄不对");
}else{
System.out.println("年龄正确");
}
}
}
浙公网安备 33010602011771号