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("年龄正确");
}
}
}

 

posted @ 2022-11-07 17:30  杨吃羊  阅读(29)  评论(0)    收藏  举报