Java异常处理之throw与显示抛出异常

发布日期:2022-05-17 10:54    点击次数:63

一、自定义异常类

实现自定义异常类需要继承Exception类或其子类,如果自定义运行时异常类需继承RuntimeException类或其子类。

代码如下:

publicclassMyExceptionextendsException{publicMyException{}publicMyException(Stringmessage){super(message);}}

二、throw与显示抛出异常

throws用于方法后声明抛出异常,而throw关键字用来人工引发异常。

通过throw语句显式抛出异常,语法格式如下:

throwThrowable或其子类的实例

所有Throwable或其子类的实例都可以通过throw语句抛出。

显式抛出异常目的有很多,例如不想某些异常传给上层调用者,可以捕获之后重新显式抛出另外一种异常给调用者。

代码如下:

importjava.io.*;importjava.text.DateFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;//throw与显示抛出异常publicclassHelloWorld{publicstaticvoidmain(String[]args){try{Datedate=readDate;System.out.println(date);}catch(MyExceptione){e.printStackTrace;}}publicstaticDatereadDatethrowsMyException{//自动资源管理//调用FileInputStream构造方法可能会发生FileNotFoundException异常,洛阳美迪雅瓷业有限公司try(FileInputStreamreadfile=newFileInputStream("raedme.txt");InputStreamReaderir=newInputStreamReader(readfile);BufferedReaderin=newBufferedReader(ir)){//读取文件中的一行数据,调用BufferedReader输入流的readLine方法可能会发生IOException异常Stringstr=in.readLine;if(str==null){returnnull;}//调用SimpleDateFormat方法可能会发生ParseException异常DateFormatdf=newSimpleDateFormat("yyyy-MM-dd");java.util.Datedate=df.parse(str);returndate;}catch(FileNotFoundExceptione){thrownewMyException;}catch(IOExceptione){thrownewMyException(e.getMessage);}catch(ParseExceptione){System.out.println("处理ParseException");e.printStackTrace;}returnnull;}}

如果软件设计者不希望readDate方法中捕获的FileNotFoundException和IOException异常出现在main方法(上层调用者)中,那么可以在捕获到FileNotFoundException和IOException异常时,通过throw语句显式抛出一个异常,见代码thrownewMyException(e.getMessage)语句,MyException是自定义的异常。

注意throw显式抛出的异常与系统生成并抛出的异常,在处理方式上没有区别,就是两种方法:要么捕获自己处理,要么抛出给上层调用者。在本例中是声明抛出,所以在readDate方法后面要声明抛出MyException异常。

AAB