异常(Exception)

异常在Java中是用于问题的反馈和处理的机制

Throwable是所有异常或错误的超类

区分异常和错误:

错误:一旦出现,不能处理

异常:出现后可以处理,处理方式:捕获或者继续抛出

捕获方式:(try{}catch(){})

1、多个异常处理方式不同,用多个catch分别捕获分别处理

2、所有异常处理方式都一样,捕获一个父类异常统一处理

3、多个异常分成不同组,不同组之间可以用 | 隔开分组处理(JDK1.7开始)

注意:try-catch同时出现,意味着try不一定能执行成功,try在不是必然成功的前提下,try中的return不一定执行

try{
    return 1;
}
catch(Exception e){
    e.printStackTrace();
}

报错会提示:This method must return a result of type int,此时在catchreturn一个int型数据即可,或在catch方法结束后返回一个int型的值

Java中的一些异常提示:

编译时异常:编译的时候就出现,由于在编译的时候就已经出现,所以要求必须处理。

CloneNotSupportedException 不支持克隆异常

ParseException 解析异常(日期或者字符串格式化时可能会抛出这个异常)

package cn.jay.exer;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Exer14 {
    public static void main(String[] args) throws Exception  {
                /*
        String str = "2018-7-18 13:12:11";
        SimpleDateFormat sdf = new SimpleDateFormat();
        Date date = sdf.parse(str);
        System.out.println(date);
        //java.text.ParseException: Unparseable date: "2018-7-18 13:12:11"
        */

        String str = "2018-7-18 13:12:11";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date = sdf.parse(str);
        System.out.println(date);
    }
}        

运行时异常:运行的时候才出现,可以处理,也可以不处理。 --- RuntimeException(所有运行时异常父类)

ArithmeticException 算数异常(整数/0)

ArrayIndexOutofBoundsException数组下标越界异常

NullPointerException 空指针异常

PatternSyntaxException 正则格式异常

NumberFormatException 数字格式化异常

Integer in=new Integer("0x456");

ClassCastException 类转换异常

ArrayStoreException 数组存储异常

InputMismatchException 输入不匹配异常(switch语句实现简单计算器时出现)

后续遇到其它异常会继续更新...

 

Java中异常处理流程(读取文件时的路径异常处理)

 

public class Test{
    public static void main(String[] args) throws PathNotExistException{
                //若读入的文件路径必然正确,则异常不用捕获处理,直接抛出即可
        try{
                //异常捕获处理后,主函数中不用抛出异常
            //读取文件
            String msg = readTxt("H:\\test.txt");
        }catch(PathNotExistException){
            //进行异常处理
                        System.out.println(e.getMessage());
        }
    }
public static String readTxt(String path) throws PathNotExistException{
        //文件路径可能不存在,此时应该抛出异常,方便其他使用该文档的人清楚其中可能出现的异常情况,如果方法中捕获的是父类异常,要在上面单独的捕获方法后再catch一个父类异常,且该父类异常必须在单独异常之后
                if(path.startWith("H:\\")){
                throw new PathNotExistException("警告:路径以H开头!");
            }        
            return "文件读取成功!";
}
//自定义异常(PathNotExistException)
class PathNotExistException extends Exception{
        private String message;
        public PathNotExistException(){}
        Public PathNotExistException(String message){
                this.message =message;
        }
        public String getMessage(){
        return message;
        }
}
View Code

 

自定义异常:定义一个类继承某个异常类,如果继承的是Exception或者是其它的异常,那么定义了一个编译时异常;如果继承的是RuntimeException或者是它的子类,那么定义的就是一个运行时异常。

方法重载时,对异常的范围没有限定

方法重写时,子类抛出的编译时异常不能超过父类编译时异常的范围

 

猜你喜欢

转载自www.cnblogs.com/lj-cn/p/9333018.html