乐趣区

关于java:这几种Java异常处理方法你会吗

摘要: 咱们在软件开发的过程中,任何语言的开发过程中都离不开异样解决。

本文分享自华为云社区《Java 异样解决学习总结》,作者:zekelove。

咱们在软件开发的过程中,任何语言的开发过程中都离不开异样解决。如果不解决异样,将会导致软件异常中断,解体,退出,重大影响用户的应用和体验。如果正当的利用异样解决那将会缩小软件呈现的谬误,能够敌对的提醒用户,晋升用户的体验。

异样是什么

异样是程序中的一些谬误,但并不是所有的谬误都是异样,并且谬误有时候是能够防止的。如:用户输出非法数据,做除法运算的时候除数为 0,语句少写分号,关上的文件不存在,内存溢出,网络中断等。

异样解决机制能让程序在异样产生时,依照代码的事后设定的异样解决逻辑,针对性地解决异样,让程序尽最大可能恢复正常并继续执行,且放弃代码的清晰。

异样类型

Java 中所有的异样类是从 java.lang.Exception 类继承的子类。Exception 类是 Throwable 类的子类。除了 Exception 类外,Throwable 还有一个子类 Error。

查看性异样:用户谬误或问题引起的异样,这是程序员无奈预感的。除了 Error 和 RuntimeException 的其它异样。

运行时异样:运行时异样是可能被程序员防止的异样。Error 和 RuntimeException 以及他们的子类。

谬误:谬误不是异样,而是脱离程序员管制的问题。通常的做法是告诉用户并停止程序的执行。

常见异样

输入输出异样:IOException

算术异样类:ArithmeticExecption

空指针异样类:NullPointerException

类型强制转换异样:ClassCastException

文件未找到异样:FileNotFoundException

数组下标越界异样:ArrayIndexOutOfBoundsException

数组负下标异样:NegativeArrayException

文件已完结异样:EOFException

字符串转换为数字异样:NumberFormatException

办法未找到异样:NoSuchMethodException

操作数据库异样:SQLException

罕用异样办法

getMessage:获取异样的详细信息。

toString:应用 getMessage() 的后果返回类的串级名字。

printStackTrace:谬误输入流。

异样解决

对查看异样解决的形式:应用 try…catch…finally 语句块解决;在函数定义中应用 throws 申明。

语法:

try{// try 块中放可能产生异样的代码。}catch(ArithmeticException arithexception){
    // 1. 每一个 catch 块用于捕捉并解决一个特定的异样,或者异样类型的子类。// 2.catch 前面括号中定义了异样类型和异样参数。// 3. 在 catch 块中能够应用这个块的异样参数来获取异样的相干信息。// 4. 如果 try 块中产生的异样在所有 catch 中都没捕捉到,则去执行 finally,而后到这个函数的内部 caller 中去匹配异样处理器。// 5. 如果 try 中没有产生异样,则所有的 catch 块都不执行。}catch(Exception exception){// 捕捉异样}finally{
    // 1.finally 块是可选的。// 2. 无论异样是否产生,finally 都会执行。// 3. 一个 try 至多要有一个 catch 块,或者至多要有一个 finally 块。// 4.finally 块次要做一些敞开清理工作,如敞开文件,敞开数据库连贯等。}

示例

package com.exception;
public class test {public static void main(String[] args) {
        // TODO 主动生成的办法存根
        compute();}

    public static void compute() {
        try {
            double num = 10 / 0;
            System.out.println(num); 
        }catch(ArithmeticException exp){System.out.println(exp.getMessage().toString());
        }finally {System.out.println("执行 finally 块");
        }
    }
}

关键字 throws/throw

如果一个办法没有捕捉到一个查看性异样,那么该办法必须应用 throws 关键字来申明,throws 关键字放在定义方法的尾部。

也能够应用 throw 关键字抛出一个异样,无论它是新实例化的还是刚捕捉到的。

throws 语法:

修饰符 返回值类型 办法名(参数)throws 异样类名 1, 异样类名 2, … {代码块}

package com.exception;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class test {public static void main(String[] args) throws FileNotFoundException {
        // TODO 主动生成的办法存根
        readFile();}
 
    public static  void readFile() throws FileNotFoundException {InputStream file = new FileInputStream("E:/test.txt");
    }
}

throw 语法:

throw new xxxException();

其中 xxxException 必须是 Exception 的派生类。

留神:throw 出的是 1 个异样对象,所以 new 不能省略。

自定义异样

除了 JDK 定义好的异样类外,咱们能够依据本身业务状况自定义异样解决类。

编写自定义异样类留神点:

1. 所有异样都必须是 Throwable 的子类。

2. 如果写一个查看性异样类,则须要继承 Exception 类。

3. 如果写一个运行时异样类,则须要继承 RuntimeException 类。

语法:修饰符 class 类名 extends Exception {代码块}

package com.exception;
/**
 * 自定义异样类
 * 登录失败异样信息类
*/
public class LoginFailException extends RuntimeException {public LoginFailException() {super();
    }
    public LoginFailException(String message) {super(message);
    }
    public void printStackTrace(){ 
        //overwrite  
        super.printStackTrace();  
        System.out.printf("This is a LoginFailException excetpion\n");    
    }  
}
public class test {public static void main(String[] args){
        // TODO 主动生成的办法存根
        Boolean isLogin = false;
        if(!isLogin) {
            // 登录失败,抛出异样
            throw new LoginFailException("Login is fail");
        }
    }
}

点击关注,第一工夫理解华为云陈腐技术~

退出移动版