当前位置:   article > 正文

java异常体系-- 提供异常信息_throws ioexception获取异常信息

throws ioexception获取异常信息

目录

一.异常类

1.1 Throwable类 

1.2  Error 类

 VirtualMachineError extends Error

1.3 . Exception 类

二. 处理异常的方式 :捕获,向上抛出throws 异常类型 

2.1 Catch 捕获异常 : 可视性不好

2.1.1 final 块 

2.2 抛出或声明一个异常 throw , throws

三. 自定义异常 


异常:在Java语言中,在程序运行时出现的错误叫异常,或在程序执行中发生的不正常情况称为“异常”。

Java中的异常用于处理非预期的情况,如文件没找到,网络错误,非法的参数

Error:  JVM系统内部错误、资源耗尽等严重情况 程序员无法解决的

Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,例如: 空指针访问 试图读取不存在的文件 网络连接中断 可以解决的 

  RuntimeException

  •    错误的类型转换
  •    数组下标越界
  •   空指针访问

IOExeption

  • 从一个不存在的文件中读取数据
  • 越过文件结尾继续读取
  • 连接一个不存在的URL

  1. 空指针异常 就是 null.xxx
  2. 例子:
  3. public class NullRef{
  4. int i=1;
  5. public static void main(String[] args) {
  6. NullRef t=new NullRef();
  7. t=null;
  8. System.out.println(t.i);
  9. }
  10. }
  11. ava.lang.NullPointerException
  12. at NullRef.main(NullRef.java:6)
  13. Exception in thread "main"

一.异常类

1.1 Throwable类 

  1. 一. 构造器
  2. 不是final修饰,可以扩展
  3. 1. new Throwable()
  4. 2. new Throwable(String message)
  5. message: 提供异常信息
  6. 二. 方法
  7. 1. getMessage(); 获取异常信息
  8. 2. void printStackTrace(); 打印错误信息的(异常名) ,用来跟踪异常事件发生时执行堆栈的内容。

1.2  Error 类

 VirtualMachineError extends Error

 OutOfMemoryErrorStackOverflowError 继承 VirtualMachineError

  • StackOverFlowError: 栈溢出, 方法调用方法的时候
  • OutOfMemeryError: 内存不足了,无法创建对象

1.3 . Exception 类

  • IOException: 数据传输的异常, QQ, 微信

   抛出的异常是IOException类的异常,则必须捕获,否则编译错误

  • RuntimeException: 运行时异常
  1.  ArithmeticException 数学异常
  2. ClassCastException 类型转换异常(多态)
  3. IndexOutOfBoundsException 下标越界异常
  4. ArrayIndexOutOfBoundsException 数组下标越界异常
  5. StringIndexOutOfBoundsException 字符串下标越界异常
  6. NullPointerException 空指针异常
  7. IllegalArgumentException 非法参数异常
  8. ConcurrentModificationException 并发修改异常
  9. RuntimeException类或是它的子类,这些类的异常的特点是:即使没有使用try和catch捕获,Java自己也能捕获,并且编译通过  ( 但运行时会发生异常使得程序运行终止 )。

二. 处理异常的方式 :捕获,向上抛出throws 异常类型 

java中编写程序时,会猜到程序的使用者如果使用不当,有可能会出现异常,但是程序的使用这不知道怎么处理看,我们程序员就直接将这个异常处理即可;

java中提供了2种处理异常的方式:

2.1 Catch 捕获异常 : 可视性不好

try    捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常的代码放在try语句块中。

catch (Exceptiontype e)     在catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

  1. try {
  2. //可能出现异常的代码
  3. //捕获异常
  4. String str = null;
  5. str.length();
  6. }catch (NullPointerException e) {
  7. e.printStackTrace();
  8. }catch ( ArithmeticException e) {
  9. e.printStackTrace();
  10. }catch (ClassCastException e) {
  11. e.printStackTrace();
  12. }catch (Exception e) {
  13. e.printStackTrace();
  14. }
  15. try {
  16. //捕获异常
  17. String str = null;
  18. str.length();
  19. }catch (ArithmeticException | NullPointerException e) {
  20. e.printStackTrace();
  21. }
  • Exception in thread "main" java.lang.ArithmeticException: / by zero   : jvm虚拟机处理的,程序停止运行
  • java.lang.ArithmeticException: / by zero   : 自己处理的异常,会继续执行程序
  1. public static void main(String[] args) {
  2. try {
  3. //可能出现异常的代码
  4. int c=1/0;
  5. System.out.println(c);
  6. }catch(Exception e) {
  7. e.printStackTrace();
  8. }

 java异常体系只是提供信息,自己处理异常,减少虚拟机压力

2.1.1 final 块 

finally块儿的作用就是用来关闭资源 ,应为正常情况下,finally 一定会被执行的

但是有不正常的情况:

  1. 使用System.exit(0); 强制退出jvm虚拟机的情况下 ,不执行

  2. 在没有进入try块儿中 ,就已经出现异常了,那么也不执行finally 块儿

    1. try {
    2. int a = 1/1;
    3. System.out.println("haha");
    4. return;
    5. //终止这个方法
    6. } catch (Exception e) {
    7. e.printStackTrace();
    8. }finally {
    9. System.out.println("=====");
    10. }

在finally块儿中使用return关键字会出现什么情况  

1. 返回值被覆盖

  1. try {
  2. int a = 1/1;
  3. System.out.println("haha");
  4. return a;
  5. //终止这个方法
  6. } catch (Exception e) {
  7. e.printStackTrace();
  8. return 20;
  9. }finally {
  10. System.out.println("=====");
  11. return 30;
  12. }
  13. //返回值被覆盖 30
  14. try {
  15. int a = 1/0;
  16. //出现异常后面的语句不执行
  17. System.out.println("haha");
  18. return a;
  19. //终止这个方法
  20. } catch (Exception e) {
  21. e.printStackTrace();
  22. return 20;
  23. }finally {
  24. System.out.println("=====");
  25. return 30;
  26. }
  27. //30

2.  异常丢失

  1. public static void get() throws Exception{
  2. try {
  3. int a = 1/0;
  4. System.out.println("haha");
  5. return;
  6. //终止这个方法
  7. } catch (Exception e) {
  8. throw new ArithmeticException();
  9. }finally {
  10. System.out.println("=====");
  11. return;
  12. }
  13. }
  14. //什么也不输出

总结: 自己处理不了异常,jvm就会处理

2.2  throws + 异常名

1.可以使用throws关键字进行异常处理,会把异常对象抛出给方法的调用者处理(自己不处理,交给别人处理),若没人处理,最终交给JVM处理——>中断处理

2. 在方法声明中用 throws 子句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

抛出异常: Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要人工创建并抛出 首先要生成异常类对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。

  1. //声明一个异常 throws NullPointerException,Exception(虚拟机处理)
  2. public static void div(int a, int b) throws NullPointerException,Exception{
  3. if(b == 0) {
  4. //抛出异常 throw new ArithmeticException();
  5. throw new ArithmeticException();
  6. }
  7. int c = a / b;
  8. }
  9. //以后开发大多数都是 抛出异常,可视性好,而且更灵活

问题: throw 和 throws 的区别:

1.使用位置不同: throws在方法名后声明,由该方法的调用者处理

throw 使用在方法体中,在方法体中处理

2. 发生异常可能性

throws 是声明一个异常,这只是一种可能性,异常不一定会发生

执行throw一定抛出了某种异常

throw关键字后边创建的是RuntimeException或者是RuntimeException的子类对象我们可以不处理,默认交给JVM去处理

throw关键字后边创建的是编译器异常(不是以上两种异常),我们就必须处理这个异常,要么throws,要么try...catch

三. 自定义异常 

java中的异常不能满足我们日常开发,所以要自定义类型的异常处理

如何实现呢? 就是自定义一个类,继承Throwable 或 RuntimeException

自定义异常必须抛出(new 对象)

message e, printStackTrace()

  1. package com.moju.test2;
  2. public class MyArrayIndexOutOfBoundsException extends RuntimeException{
  3. private String message;
  4. public MyArrayIndexOutOfBoundsException() {}
  5. public MyArrayIndexOutOfBoundsException(String message) {
  6. this.message =message;
  7. }
  8. @Override
  9. public String getMessage() {
  10. return message;
  11. }
  12. @Override
  13. public void printStackTrace() {
  14. String name = getClass().getName()+this.message;
  15. System.err.println(name);
  16. }
  17. }
  1. package com.moju.test2;
  2. public class TestArray {
  3. /**
  4. * 获取数组中所有元素的
  5. */
  6. public static void getArrays(int[] array) throws MyArrayIndexOutOfBoundsException{
  7. //故意写错
  8. for(int i = 0;i < 23 ;i++) {
  9. if(i > array.length-1) {
  10. throw new MyArrayIndexOutOfBoundsException("我的数组越界异常");
  11. }
  12. System.out.println(array[i]);
  13. }
  14. }
  15. public static void main(String[] args) {
  16. int[] arr = {1,2,23,34,5,5,1,3,3,31};
  17. try {
  18. getArrays(arr);
  19. } catch (MyArrayIndexOutOfBoundsException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/349264
推荐阅读
相关标签
  

闽ICP备14008679号