您的位置:首页 > 编程语言 > Java开发

java中的常见异常及错误和处理方法

2016-05-12 17:31 691 查看
异常机制

   a、异常及错误:

    Throwable

     Error

      AWTError

      IOError

      LinkageError

      ThreadDeath

     Exception

      SQLException

      IOException 

      RuntimeException

       IndexOutOfBoundsException

       NullPointerException

       ClassCastException

 

 

 


 

b、Throwable:

   有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。

   

   c、Error:

   系统或虚拟机的异常,无法捕获。如:OutOfMemoryError

   

   d、Exception:

   程序本身可以处理的异常。

   

   RuntimeException:JVM 常用操作引发的异常,如:NullPointerException

   e、Checked:

   在编译期间就可以发现的异常,必须在运行之前就进行处理的异常。

   除了RuntimeException及其子类以外,

   其他的Exception类及其子类都属于可查异常。

   这种异常的特点是Java编译器会检查它,也就是说,

   当程序中可能出现这类异常,要么用try-catch语句捕获它,

   要么用throws子句声明抛出它,否则编译不会通过。

   

   f、Unchecked:

   包括运行时异常(RuntimeException与其子类)和错误(Error)。

   g、运行时异常:

   运行时异常的特点是Java编译器不会检查它,

   也就是说,当程序中可能出现这类异常,

   即使没有用try-catch语句捕获它,

   也没有用throws子句声明抛出它,也会编译通过。

   h、编译异常:

   是RuntimeException以外的异常,

   类型上都属于Exception类及其子类。

   从程序语法角度讲是必须进行处理的异常,

   如果不处理,程序就不能编译通过。

   如IOException、SQLException等以及用户自定义的Exception异常,

   一般情况下不自定义检查异常。

   

异常处理:

   a、抛出异常:

   一个方法出现错误引发异常时,

   方法创建异常对象并交付运行时系统,

   异常对象中包含了异常类型和异常出现时的程序状态等异常信息。

   运行时系统负责寻找处置异常的代码并执行。

   throws:如果一个方法可能会出现异常,但没有能力处理这种异常,

   可以在方法声明处用throws子句来声明抛出异常。多个异常可使用逗号分割

   throw:异常必须在方法内抛出。

   b、捕获异常:

   try...catch...finally...

   Java规定:对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。

   try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。

   catch 块:用于处理try捕获到的异常。

   finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行。

   当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。

package main;

public class CoreJavaDay12_2 {

 static String a = null;

 

 public static void main(String[] args) {

  

  try {

   String aString = null;

   String bb = aString.toLowerCase();

  }catch (NullPointerException e) {

   System.out.println("空指针了");

   StackTraceElement [] ste = e.getStackTrace();

   System.out.println(ste[0].getLineNumber());

   e.printStackTrace();

  }catch (Exception e) {

   

  }finally{

   System.out.println("执行了finally");

  }

  

//  try {

//   String a = null;

//   a = a.toLowerCase();

//   int c = b[3];

//  }finally{

//   System.out.println("hahaha");

//  }

  

 }

 

 public  static void doSomething(){

  int []b = new int[3];

  a = a.toLowerCase();

  int c = b[3];

 }

}

 

   在以下4种特殊情况下,finally块不会被执行:

   1)在finally语句块中发生了异常。

   2)在前面的代码中用了System.exit()退出程序。

   3)程序所在的线程死亡。

   4)关闭CPU。

   getCause():返回抛出异常的原因。如果 cause 不存在或未知,则返回 null。

   getMeage():返回异常的消息信息。

   printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。

   

   ClassCastException    类型转换异常类

   ArrayStoreException  数组中包含不兼容的值抛出的异常

   SQLException   操作数据库异常类

   NoSuchFieldException   字段未找到异常

   NoSuchMethodException   方法未找到抛出的异常

   NumberFormatException    字符串转换为数字抛出的异常

   StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常

   IllegalAccessException  不允许访问某类异常

   InstantiationException  当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常

  

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息