主页 > 人工智能  > 

Java第八章异常(2)

Java第八章异常(2)

目录

​编辑

异常处理

捕获异常

基本语法

实例

声明异常

注意:

实例

抛出异常

实例

运行期异常和编译期异常

自定义异常

定义

 基本语法

注意

实例



异常处理

●Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws


捕获异常 try        执行可能产生 异常的代码catch     捕获异常finally   无论是否发生异常, 代码总能执行 基本语法

1.try{

       可能会发生异常的代码

       }catch(异常类型 引用名){

      异常处理代码

       }

2.try{

可能会发生异常的代码

}catch(异常类型 引用名){

异常处理代码

}finally{

必须执行代码

}

实例 try{//可能出现异常的代码 int a = 10; int b = 0; System.out.println(a/b); }catch (ArithmeticException a){//捕获对应类型的异常,在catch中执行处理程序,执行完,后续程序可以继续执行 System.out.println("除数不能为0");//向用户做出提示 a.printStackTrace();//打印抛出的异常对象信息 System.out.println(a.getMessage());//获取异常原因 }catch (ArrayIndexOutOfBoundsException ae){ System.out.println("数组索引越界"); System.out.println(ae.getMessage()); ae.printStackTrace(); }catch (Exception e){ System.out.println("系统忙,请稍后再试"); } System.out.println("后续程序"); } FileInputStream inputStream= null; FileOutputStream outputStream=null; try { inputStream = new FileInputStream("E:/a.txt"); outputStream = new FileOutputStream("E:/B.txt"); int b = 0; while ((b = inputStream.read())!=-1){ outputStream.write(b); } } catch (FileNotFoundException e) { System.out.println("文件不存在"); }catch (IOException e){ System.out.println("文件中断"); }finally {//必须执行的代码块 if (inputStream!=null){ inputStream.close(); } if (outputStream != null) { outputStream.close(); } }
声明异常

throws    声明方法可能要抛出的各种异常(定义一个方法的时候可以使用throws关键字声明,表示此方法 不处理异常,而交给方法调用处进行处理)

eg.

public void test() throws 异常1,异常2,异常3{

}

注意: 任何方法都可以使用throws关键字声明异常类型,包括抽象方法。 调用使用了throws的方法时必须处理声明的异常,要么使用try-catch,要么 继续使用throws声明。 如果抛出的是运行期异常,则不会有任何提示,需要查看所调用的方法结构 实例 /* throws关键字在方法参数列表后,用于声明此方法中有可能抛出哪种类型都异常,此方法不处理 谁调用谁处理 */ public static void main(String[] args) { try { testA(); } catch (UnsupportedEncodingException e) { System.out.println("编码异常"); } catch (ArrayIndexOutOfBoundsException e){ System.out.println("数组越界"); } System.out.println("aaaaaaaaa"); } public static void testA() throws UnsupportedEncodingException { testB(); } public static void testB() throws UnsupportedEncodingException { "abc".getBytes("utf-888"); int [] a= {1,2,3,4}; a[5]=5;//此方法中有数组操作 }
抛出异常 throw      手动抛出异常用于显式抛出异常,抛出的时候是抛出的是一个异常类的实例化对象.

语法:throw new 异常类构造方法

实例 public static void main(String[] args) { try { get(-1); }catch (ArrayIndexOutOfBoundsException a){ System.out.println(a.getMessage()); } } /* throw 在方法体中,当不满足某种条件时,主动的抛出一个异常对象 此时方法中按出现异常对待,方法不在往下执行 */ public static int get (int index){ int []arr = {1,2,3,4,5}; if (index<0||index>=arr.length){ throw new ArrayIndexOutOfBoundsException("非法的数组索引:"+index); //当索引条件不满足需求时,主动在方法中抛出一个异常对象,方法不在往下执行 } return arr[index]; }
运行期异常和编译期异常

● 异常分为运行期异常和编译期异常两种

● 编译时期异常(即checked异常、受检异常):在代码编译阶段,编译器就能明确警示当前代码可能发生XX异常,并明确督促程序员提前编写处理它的代码。如 果程序员没有编写对应的异常处理代码,则编译器就会直接判定编译失败,从而 不能生成字节码文件。

● 运行时期异常(即runtime异常):在代码编译阶段,编译器完全不做任何检查, 无论该异常是否会发生,编译器都不给出任何提示。只有等代码运行起来并确实 发生了XX异常,它才能被发现。

java.lang.RuntimeException类及它的子类都是运行时异常。

比如: ArrayIndexOutOfBoundsException数组下标越界异常,

            ClassCastException 类型转换异常


自定义异常 定义

自定义异常就是自己定义的异常类,也就是API中的标准异常类的直接或间接的子类

作用:用自定义异常标记业务逻辑的异常,避免与标准异常混淆

 基本语法

public class 异常类名 extends Exception/RuntimeException{

public 异常类名(String msg){

super(msg);

}

注意 自定义异常类中往往不写其他方法,只重载需要使用的构造方法 继承Exception,在方法中使用throw抛出后,必须在方法中try-catch或 throws抛出 实例 /* 自定义异常, 在业务逻辑中,当不满是某种条件时,可以根据需要自定义对应的异常类型,与api中标准异常进行区分 */ public class ScoreException extends Exception { public ScoreException(String message){ super(message); } } public class Dom7 { public static void main(String[] args) { try { print(101); }catch (ScoreException s){ System.out.println(s.getMessage()); } } public static char print(int score) throws ScoreException { if ( score <0||score>100) { throw new ScoreException("分数不合法:"+score); } if (score >= 90) { return 'A'; } else if (score>=75 && score<90) { return 'B'; } else if (score>=60 && score<75) { return 'C'; } return 'D'; } }
标签:

Java第八章异常(2)由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Java第八章异常(2)