java中的异常处理
java异常是Throwable子类的实例化对象。Throwable包含两个重要子类:Exception(异常)和Error(错误)。其中Error是不可查的,所以当出现Error时,一般是不需要去处理的。相比于Error类,Exception是程序设计者可以处理的部分
Exception异常
这种异常分为两类,一类是编译时异常,另一类是运行时异常(RuntimeException)。在java中除了RuntimeException以外的其它所有异常都是属于编译异常,也就是非运行时异常。
对于异常的处理
可以选择抛出(throws)或者try-catch-finally来捕捉。try-catch-finally是将程序的业务功能放在try语句块中,尝试是否可以顺利通过,将异常的代码放在catch语句块中,捕获并处理异常,try-catch协同工作,这是java的异常处理方式。
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Test{
public static void main(String[] args) {
FileReader fr = null;
try {
File file = new File("pathname");
fr = new FileReader(file);
char[] ch = new char[10];
while(fr.read(ch) != -1 ){
System.out.println(ch);
}
}catch (IOException e ){
e.printStackTrace();
}finally {
if(fr != null){
try {
fr.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
}
也可以选择用throws来抛出
public class Test{
public static void main(String[] args) throws IOException{
File file = new File("pathname");
FileReader fr = new FileReader(file);
char[] ch = new char[10];
while(fr.read(ch) != -1 ){
System.out.println(ch);
}
fr.close;
}
在方法体的后面加上throws + 异常类。在调用这个方法的方法体上也需要加上throws + 异常类。
抛出的异常类可以有多个,用 , 隔开。
自定义异常
public class MyException extends Exception {
public MyException(){}
public MyException(String msg){
super(msg);
}
}
//这个自定义异常类需要继承Exception类,然后在有参构造内调super()
在我们需要使用自己定义的异常类时,我们需要在通过throw来手动抛出,这个抛出的不是异常类,而是一个异常对象,每一步只能抛出一个异常对象。
public class Test{
public static void main(String[] args) throws MyException{
Scanner sc = new Scanner(System.in);
int temp = sc.nextInt;
if(temp<0){
throw new MyException("敲入的数字小于0"); //手动抛出对象
}else{
System.out.println("输入值的大小为:"+temp);
}
}
}