java的异常处理

时间:2021-12-21 00:50:18

异常是程序中一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的
比如,你的代码少了一个分号,那么运行出来就是java.lang.error;如果你用的System.out.println(11/0),因为你用零做个除数,所以会抛出java.lang.arithmeticException异常。
异常发生的原因很多,通常包括以下几大类

 1. **用户输入了非法数据 
 2.     要打开的文件不存在   
 3. 网络通信时链接中断,或者jVM内存溢出**

    **检查性异常:**最具有代表的检查异常是用户错误或者问题引起的异常,这是程序员无法预见的。例如要打开一个不存在的文件,一个异常就发生了,这些异常在编译时不能被简单的忽略。
    **运行时异常:**运行时程序是可能被程序员避免的异常,与检查性异常相反,运行时异常可以在编译的时被忽略
    **错误:**错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略,例如,当栈内存溢出时,一个错误就发生了,他们在编译时是检查不到的。


try......catchfinally


由于发生了异常,程序立即终止,无法向下继续进行,为了解决这样的问题,java中提供了一种对异常处理的方式-异常捕获,异常捕获是使用try....catch语句
    try{
    //程序代码块
    catch{exceptiontype 类及子类)e){
    //对异常的处理
    }
    其中在try代码块中编译的是可能要发生的错误,catch代码块中编写针对异常进行处理代码,当try代码块中发生异常的时候,系统会将这个异常信息封装成一个异常对象,并将这个对象传递给catch代码块,catch代码块需要一个参数指明它能够接受的参数类型,这个参数必须是Exception类或者其子类。
    注意:发生异常后语句后面的代码块是不会被执行的,只要当try代码块中发生错误
    在程序中有时候我们希望有些语句无论程序时候发生异常都要进行执行,这时候就可以在try....catch后面加上finally代码块。finallu代码块中的代码是程序无论出不出错误都是会被执行的。

throws关键字

在有时候调用别人的方法时,是否知道别人的代码有异常呢?我们很难做出判断,所以java中允许咋方法的后面使用throws关键字对外声明该方法可能发生异常,这样调用着在调用方法的时候就知道该方法存在异常,并且必须在程序中对异常进行处理,否则编译无法通过
语法:修饰符 返回值类型 方法名([参数])throws Exception{
    }
从上句可以看出throws关键字必须写在放啊声明的后面,throws后面需要声明方法中发生异常的的类型,通常将这种做法称为方法声明抛出一个一场。

代码如下

package text;

public class Text2 {

        public static void main(String []args){


            try {
                int result=dicide(4,0);
                System.out.println(result);
            } catch (Exception e) {
                // TODO 自动生成的 catch 块
                System.out.println("錯誤");
            }finally{
                System.out.println("雖然錯誤我還是可以執行");
            }

    }
    public static int dicide(int x,int y){
        int result=x/y;
        return result;

    }

}