开发中会遇到各种问题程序运行不下去,我们称之为异常,我们也可以不合逻辑的运行抛出异常
提示:以下是本篇文章正文内容,下面案例可供参考
程序在运行时的时候,发生的不正常事件,就是所谓的异常。
Throwable:可抛出的,一切错误或异常的父类,位于java.lang包中。
Error:JVM、硬件、执行逻辑错误,不能手动处理。
常见错误: StackOverflowError、OutOfMemoryError等。
Exception:程序在运行和配置中产生的问题,可处理。
代码如下(示例):
/** 4 * 异常和错误的区别: 5 */ 6 public class Demo { 7 public static void main(String[] args) { 8 //int[] arr = new int[3]; 9 //System.out.println(arr[0]); 10 //数组越界异常,可以处理 11 //System.out.println(arr[3]);//java.lang.ArrayIndexOutOfBoundsException: 3 12 13 //错误: 14 int[] arr2 = new int[1024*1024*1024]; 15 16 17 } 18
检查异常:由编译器能够检查出来的异常。外部原因导致的异常,程序中必须处理。
代码如下(示例):
3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 8 public class Demo5 { 9 public static void main(String[] args) { 10 11 int i=10; 12 int j = 0; 13 try{ 14 //int div =i/j;//运行时异常,运行的过程中抛出的异常, 15 //可能抛出异常的代码 16 //System.out.println("div:"+div); 17 int k = Integer.parseInt("xxxx"); 18 }catch (ArithmeticException e){ 19 //异常的处理 20 //System.out.println(); 21 e.printStackTrace(); 22 }catch (NumberFormatException e){ 23 e.printStackTrace(); 24 } 25 26 System.out.println("end..........."); 27 28 29 //SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd"); 30 //sdf.parse("wowowwo");//检查异常 31 32 // File file = new File("c:\\a.jpg"); 33 // FileInputStream fis = new FileInputStream(file); 34 35 36 } 37 }
异常产生
异常传递
捕获异常:try,catch,finally
语法规则:
try{ 2 //可能产生异常的代码 3 }catch(异常类型1 e){ 4 //捕获异常的处理 5 }catch(异常类型2 e){ 6 //捕获异常的处理 7 }finally{ 8 //无论程序是否产生异常,此处的代码一定会被执行。 9 //比如说:释放资源,删除临时文件等。。。 10 }
注意点:
1.一个try可以匹配多个catch语句
2.如果try中产生了异常对象,那么会跳出try,进到相应的catch中处理异常,从上向下匹配。
3.如果是多个catch语句,那么小的异常捕获处理写前面,大的异常捕获处理写后面。
4.finally是可选的.
方法级别上,向外抛出异常。
方法的声明上就要通过throws关键字声明抛出异常:
public static void test1(int i,int j)throws NullPointerException{ 2 3 } 4 [修饰符1,修饰符2.。。] 返回值类型/void 方法名(参数列表) 异常的声明{ 5 6 }
按照方法的调用链反向传递,如始终没有处理异常,最终会由JVM进行默认异常处理(打印堆栈跟踪信息)。
运行时异常的抛出,不一定要处理
检查异常的抛出,必须处理
Exception和RuntimeException的区别
1.RuntimeException是Exception的子类。
2.Exception包含了受检异常,所以抛出Exception以及受检异常时,代码中一定要给与处理。如果抛
出的是RuntimeException(运行时异常,非受检)以及它的子类异常,程序中不一定非要处理。
3.重写的时候,子类不能抛出比父类更大的异常
throw和throws的区别
1.throws,用于定义方法的时候,声明该方法向外抛出异常。
2.throw,主动抛出一个异常的对象。打断程序的执行。配合trycatch,或者throws来使用。
Exception exception = new Exception("我自定义的异常。。"); 2 3 try { 4 throw exception;//自己主动抛出的异常 5 } catch (Exception e) { 6 e.printStackTrace(); 7 } 8 9 System.out.println("main......end.....");