介绍
含义:程序运行过程中发生的非正常现象。
过程:
捕获异常:遇到异常通过面向对象的方式去处理,停止执行程序。并生成异常对象,把它抛给JRE处理。
分类:Error(不能处理的异常)和Exception(能处理的异常),它们继承自Throwable。其中Exception又分为RuntimeException(编译器能通过,运行不能通过)和CheckedException(编译就不能通过,必须捕获,如SQLException)。
处理方式:try……catch
捕获和throws
声明。
区别:捕获是自己解决,声明是抛给其它人,直到有人解决为止。
常见异常类
主要有
NullPointerException空指针异常
ArrayIndexOutOfBoundsException数组越界异常
NumberFormatException数字格式异常
这些异常都属于RuntimeException,除RuntimeException以外其都它属于CheckedException。
示例:
package com.itcode.demo5;
/**
* @Auther: 成都码到功成学员
* @Description:
* 常见五个异常类
*/
class AnimalExc{
}
class DogExc extends AnimalExc{
}
class CatExc extends AnimalExc{
}
public class TestException {
public static void main(String[] args) {
// int a = 1/0;
// System.out.println(a);// ArithmeticException
// AnimalExc a = new DogExc();
// CatExc c = (CatExc) a;// ClassCastException
// String s = "w3r344";
// Integer i = Integer.parseInt(s); // NumberFormatException
// int[] arr = null;
// System.out.println(arr[0]);// NullPointerException
int[] arr = new int[2];
System.out.println(arr[2]); // ArrayIndexOutOfBoundsException
}
}
try-catch-finally
概述:try里面放执行语句。catch(catch可以有多个)捕获异常,可以捕获多个异常,子类异常必须在父类前面。finally(finally只有一个)为异常提供统一的出口。
执行流程:当程序程序从try里面的语句开始执行,哪个语句有异常就就到对应的catch里面去捕获。剩下的语句就不执行了,直接执行finally。
GetMessage():获取异常信息,返回字符串。
printStackTrace():获取异常类名、异常信息、异常出现位置。无返回值
示例:
package com.itcode.demo5;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* @Auther: 成都码到功成学员
* @Description:
* try catch
*/
public class TestException1 {
public static void main(String[] args) {
FileReader f = null;
try{
f = new FileReader("D:/a.txt");
char ch = (char) f.read();
System.out.println(f);
}catch (FileNotFoundException e){// 子类异常必须在父类前面
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
if (f != null){
try {
f.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
声明异常
关键词:throws。
示例:
package com.itcode.demo5;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* @Auther: 成都码到功成学员
* @Description:
* try catch
*/
public class TestException2 {
public static void main(String[] args) throws IOException{
FileReader f = new FileReader("D:/a.txt");
char ch = (char) f.read();
System.out.println(f);
if (f != null){
f.close();
}
}
}
自定义异常
概述:
1.在JDK提供的异常类都无法充分描述清楚我们想要表达的问题时创建自己的异常类。
2.自定义异常类需继承Exception类或其子类。
3.自定义异常类继承Exception类时为受检查异常,必须对其处理。不想处理就继承运行时异常RuntimeException类。
4.自定义异常类应包含2个构造器:一个默认构造器,一个带有详细信息的构造器。
示例:
package com.itcode.demo5;
import java.io.FileReader;
import java.io.IOException;
/**
* @Auther: 成都码到功成学员
* @Description:
* 自定义异常类
*/
class BadException extends Exception{
public BadException(){
}
public BadException(String message){
super(message);
}
}
public class TestException3 {
public static void main(String[] args) throws IOException{
int age = 13;
if (age<18){
try {
throw new BadException("未成年!!!");
} catch (BadException e) {
e.printStackTrace();
}
}
}
}
效果:
新示例:
枚举
概述:可以理解为一组固定长度、不可修改的数据集合。使用enum关键字定义,也可作为一种单例模式。
注解