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异常的主要内容,如果未能解决你的问题,请参考以下文章
Android Java:在 onCreateView() 中返回空视图的片段
java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段