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

异常机制
   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()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常
  

 

 

你可能感兴趣的:(java)