1.概述
Java异常中有Error
和Exception
类,它们都继承自Throwable。
1.1异常的分类
- 编译时异常:Exception(由程序员导致)
- 运行时异常:RuntimeException
- 虚拟机错误:error(系统或底层资源错误)
2.关键字
throws
:用于方法签名中,指定方法可能抛出的异常类型。(可以指定多个异常对象)
throw
:用于在方法内部抛出一个异常对象。(只能抛出一个异常对象)
finally
:定义一个代码块,该代码块中的代码无论是否发生异常都会执行。
try {
// 可能引发异常的代码
} catch (Exception e) {
// 异常处理代码
} finally {
// 最终执行的清理代码
}
3.自定义异常
public class test_02 {
/*
*自定义异常:整数在0~10的范围内
*/ public static void main(String[] args) {
int num = 11;
try {
getInt(num);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void getInt(int num) throws IntException {
if (num >= 0 || num <= 10) {
throw new IntException("不在0~10范围内");
}
}
}
// 自定义
class IntException extends Exception {
public IntException() {
}
public IntException(String s) {
super(s);
}
}
4.异常题目
4.1 final,finally,finalze区别
final
用于声明不可变的实体,可以应用于变量、方法和类。finally
用于定义在异常处理中无论是否发生异常都会执行的代码块。finalize
是一个方法,用于在对象被垃圾回收前执行清理操作。(不常用)
4.2 判断一个字符串是否为IP格式
// 判断ip地址
public static boolean isIP(String input) {
String[] s = input.split("\\.");// 正则表达式分割字符串
if (s.length != 4) {
return false;
}
for (String s1 : s) {
try {
int num = Integer.parseInt(s1);
if (num < 0 || num > 255) {
throw new NumberFormatException("IP地址格式错误!!!");
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
return true;
}
4.3 return和finally的执行顺序对返回值影响
try
和finally
至少含有一个return
语句:
- finally语句块会执行
- finally语句块没有return,finally对变量的值修改无效。(return局部变量保存在栈帧顶部,finally修改原来栈帧位置的局部变量,最后还是会返回栈帧顶部的变量,所以会执行,但是不return值(栈帧顶部))
都含有return语句: - return 值以finally语句块内为准。