目录
异常
异常是程序在运行过程中,出现的不正常情况。
异常:广义:任何程序出现的问题 狭义:程序上出现的可以解决的一些问题(代码解决)。
例如:用户输入的数据有问题
异常指的并不是语法错误。语法错误,编译不能通过,不会产生字节码文件,根本不 能运行。
Java中默认的异常处理机制:将出现的异常,按不同的类型分类,为每一种封装了一个类 来进行表示。出现某种类型的异常情况时,会抛出此类的对 象,然后终止虚拟机的运行
常见异常:ArithmeticException 算数异常
ArrayIndexOutOfBoundsException 数组索引越界
StringIndexOutOfBoundsException 字符串索引越界
ClassCastException 类型转换异常
NullPointerException 使用null中的方法/属性 在Java中俗称空指针
NumberFormatException 数据格式化异常
异常处理:
在编码时,就针对可能出现的问题代码(经验) 提前编写一些处理机制
程序运行
出现异常
执行处理机制
继续运行后续的程序
try{
编写可能出现问题的代码
}catch( 异常类型 ){
处理机制
}finally{
//异常没有捕获到,后面的代码不能执行,但是finally里面的代码可以 执行 必须执行的代码}
注意: 无论是在try中执行return还是catch中执行return 都必须执行finally
int b = 5;
int a = 0;
try {
System.out.println(b/a);
}catch (ArithmeticException ai){
ai.printStackTrace();//将异常信息打印到控制面板上
System.out.println("算数错误");
}finally{//finally 是一个关键字 是try语句中必须执行的语句
System.out.println(b/a);
}
编译期异常与运行期异常
编译期异常:在编译期间就会主动提示程序员要进行处理的异常
FileNotFoundException(文件找不到异常)
运行期异常:在编译期间不会主动提示程序员进行处理的异常
ArrayIndexOutOfBoundsException 数组索引越界
StringIndexOutOfBoundsException 字符串索引越界
区别在于异常有没有继承RuntimeException(继承就是运行期异常)
运行期异常
当不满足某种条件时,主动抛出异常
会用到 throw new 异常构造方法("异常的原因")
public static void sj(int a,int b ,int c) throws YCException {
if (a + b <= c || a + c <= b || b + c <= a){//不满足的条件 也就是满足这个条件直接抛出异常
throw new YCException("无法构成三角形");
}
}
自定义异常
public class YCException extends Exception{
public YCException(String message) {
super(message);
}
}
throws 和 throw 的区别
throws:用在方法声明部分,表示此方法中又可能出现某种类型的异常,此方法不处理异常,谁调用谁异常。
throw:在方法体中,抛出一个具体的异常对象。该方法终止运行,在异常对象的构造方法中自定义异常的原因