Java异常

Posted breeze

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java异常相关的知识,希望对你有一定的参考价值。

异常概述:

异常是指在程序运行过程中发生的异常事件 , 如0溢出,数组下标越界,找不到文件等,这些事件发生会导致程序不能正常运行。因此,为了加强程序的健壮性,在进行程序设计时,必须考虑可能发生的异常事件并要做出相应的处理。Java通过面向对象的方法来处理异常/。如果在一个方法的运行过程中发生了异常,则这个方法生成代表该异常的一个对象,并把它交给运行时系统,运行使系统会寻找相应的代码来处理繁盛的异常。我们吧生成异常对象帮把它交给运行时系统这一过程称为抛出(throw)一个异常。
Java 异常体系 :
Error  :  错误  出现错误引发程序崩溃
Exception  : 分为 IOException 和  RuntimeException引起线程中断, 是所有异常的基类。
checked Exception 检测异常,要求必须被捕获处理,比如IOException
Runtime Exception 运行时异常,也叫做unchecked Exception
异常的处理方式;
一 : 积极的异常处理方式。 
1 try {
2            // 可能出现异常的代码块
3 }catch (Exception e)// 括号内为异常的处理对象{
4         // 捕获异常的处理方式
5 }finally{
6             // 无论有没有异常对象被捕获都会执行的代码
7 }

积极的异常处理方式的捕获顺序 ;

 1 public class ExceptionDemo2 {
 2     public static void main(String[] args) {
 3         String s = "abc";
 4     try{
 5         s.charAt(5);
 6     }catch(StringIndexOutOfBoundsException e){
 7         System.out.println("StringIndexOutOfBoundsException");
 8     }catch(IndexOutOfBoundsException e){
 9         System.out.println("IndexOutOfBoundsException");
10     }catch (Exception e) {
11         System.out.println("Exception");
12     }
13     }
14 }

 

 二;  消极的异常处理方式:

public void test() throws Exception{
        // 消极的异常处理方式, 表示当前方法一旦发生异常,则自己不做处理,而将异常交给上级方法进行处理.
}

 Java 的异常处理机制:

Java异常体系的关键字 :

  • throw  主动抛出异常

  • throws

1. 写在方法上,表示当前方法会抛出一个异常
2. 如果抛出的异常是checked Exception那么要求上级调用方法必须做出处理
3. 如果抛出的异常是一个运行时异常,那么不做处理

  •  finally
    在积极的异常处理中最后一个代码块,表示当前逻辑一定会被执行 。
 自定义异常:
java虽然为我们提供了很多种异常类,但并不能满足程序设计中不可预见的异常。有时候,我们希望在程序中自定义异常,来表示可能遇到的问题。Java提供的自定义异常可以满足程序员按需创建异常的要求。我们可以通过简单的继承已知异常类来创建我们的自定义异常类。创建异常类时,最简单的办法是使用编译器产生的缺省构造方法。要抛出自定义异常, 我们必要要有自定义的异常类。并且继承了RuntimeException。
自定义异常类的使用:
1 public class ExceptionDemo {
2     public static void main(String[] args){
3     test("zhangsan");
4 } 
5     public static void test(String s){
6     throw new LoginException("您的账户密码错误: "+s);
7 }
8 }

 

try catch finally 的执行顺序
首先执行try,如果有异常执行catch,无论如何都会执行finally 
一个函数中肯定会执行finally中的部分。 
关于一个函数的执行过程是,当有return以后,函数就会把这个数据存储在某个位置,然后告诉主函数,我不执行了,接下来你执行吧,所以函数就会推出。 
但是当一个函数中出现finally以后,finally永远都要执行,所以,就算try或者catch中已经执行了return了,但是这时函数不会退出,不会告诉主函数去执行,而是等待finally执行完了才回去告诉主函数去执行,这时候如果finally中出现了return的话,这次return的值就会覆盖掉try或者catch中的值,然后才会告诉主函数:我不执行了,你去执行吧。所以主函数会得到finally中的返回值。也就是说子函数的返回值永远是finally中的返回值(只要被调用的函数中有值)

以上是关于Java异常的主要内容,如果未能解决你的问题,请参考以下文章

片段中的 EditText 上的空指针异常 [重复]

Java异常处理机制

片段 getArguments() 空指针异常

Android Java:在 onCreateView() 中返回空视图的片段

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段