第六章(异常)
1.java异常概念
异常:不正常,不是代码可以解决的
广义上的异常:程序中出现的任何异常
狭义上的异常(我们所说的异常):程序在运行时出现的不正常情况,可以使用异常处理机制解决
Error:java虚拟机无法解决的严重问题,一旦程序运行时出现错误 程序是无法解决的
Exception:程序运行时出现不正常情况,异常处理机制可以处理 如越界
2.异常的体系
1.算术异常 ArithmeticException System.out.println(10/0);
2.数组越界 ArrayIndexOutOfBoundsException
3.数字格式化 NumberFormatException int a = Integer.parseInt("a10");
4.空指针 使用值为null的引用 NullPointerException String s = null; s.getBytes();
5.类型转换异常 ClassCastException Object a = "abc"; Integer b = (Integer)a;
3.throws和thhrow
throws:定义一个方法的时候可以使用throws关键字声明(表示可能出现的异常),表示此方法
不处理异常,而交给方法调用处进行处理,所以调用时必须处理声明的异常,要么使用try-catch处理掉,要
么继续使用throws声明向上抛出去。
例如:
throw:用于显
public void test throws 异常1,异常2,异常3{ }
示抛出异常,抛出的是异常类实例化对象(即“ XX ” )
如:throw new RunTimeException();//异常类构造方法
public static void someMethod() { if (1==1) { throw new RuntimeException("错误原因(实例化对象 就是getMessage();要输出的内容)"); //如何调用?catch{System.out.println(e.getMessage())} } }
4.异常处理
Java的异常处理是通过5个关键字来实现的:
try、catch、 finally、throw、throws
基本语法
try{
可能会发生异常的代码
}catch(异常类型 引用名 如e){
e.printStackTrace();//打印异常信息
异常处理代码
}finally{
必须执行代码
}
5.自定义异常
自定义异常就是自己定义的异常类,也就是API中的标准异常类的直接或间接的子类
作用:用自定义异常标记业务逻辑的异常,避免与标准异常混淆
定义异常类:
package com.ffyc.javaexception;/* 我们可以根据自己的业务需要,开发自定义异常类 */ public class ScoreException extends Exception{ public ScoreException() { super(); //继承父类Exception 不写也默认继承 } public ScoreException(String message){//构造方法 super(message); //该子类继承父类的message } }
package com.ffyc.javaexception; public class Demo7 { public static void main(String[] args) { try { test(101); } catch (ScoreException e) { e.printStackTrace();//打印异常信息 System.out.println(e.getMessage()); } } public static char test(int score) throws ScoreException { if(score<0||score>100){ //不合法分数,没必要继续向下执行,此处可以使用throw直接在方法中抛出一个异常对象. throw new ScoreException("不合法的分数"); } if(score>=90){ return 'A'; }else{ return 'B'; } } }
运行结果: