异常(Exception),例外,程序在运行时出现的异常,如要打开某个文件,而文件不存在;输入非法参数;
java.lang.Throwable
作为所有异常的超类(祖宗类)。OutOfMemoryError
。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。在Exception
分支中有一个重要的子类RuntimeException
(运行时异常)
ArraylndexOutOfBoundsException
(数组下标越界)NullPointerException
(空指针异常)ArithmeticException
(算术异常)MissingResourceException
(丢失资源)ClassNotFoundException
(找不到类)等异常,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常通常是因为程序逻辑问题引起的,程序应该从逻辑角度尽可能避免这类异常的发生!
Error
和Exception
的区别:
Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。
idea快捷键:CTRL + ALT + T (自动生成try catch)
语法:
try{
//可能出现异常的代码
}catch(需要捕获的异常名 e) {
//Catch块
}
实例:
public class Demo01 {
public static void main(String[] args) {
int a = 5;
int b = 0;
try {
// 输出 a/b 被除数为0,出现ArithmeticException异常
System.out.println(a/b);
}catch(ArithmeticException e) {
System.out.println("出现异常!");
}
}
}
运行结果出现异常:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.wnaoii.exception.Demo01.main(Demo01.java:9)
语法:
try{
//可能出现异常的代码
}catch(需要捕获的异常名 e){
//Catch块
}finally{
//需要执行的代码
}
try
之后有多个 catch
代码块,捕获多个异常语法:
try{
// 可能出现异常的代码
}catch(异常类型1 异常的变量名1){
//Catch块
}catch(异常类型2 异常的变量名2){
//Catch块
}catch(异常类型3 异常的变量名3){
//Catch块
}
如果保护代码中发生异常,异常被抛给第一个 catch 块。
如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。
如果不匹配,它会被传递给第二个 catch 块。
如此,直到异常被捕获或者通过所有的 catch 块。
throw
关键字能主动抛出异常,一般在方法中使用。throws
关键字是该方法可能抛出异常的声明,throws 关键字放在方法签名的尾部。例:
public class Demo01 {
public static void main(String[] args) {
test(1,0);
}
// 定义一个方法
private static void test(int a,int b) throws ArithmeticException{
if (b == 0){
// 事先知道会出现异常主动抛出
throw new ArithmeticException();
}
System.out.println(a/b);
}
}
原文:https://www.cnblogs.com/WNAOII/p/14766720.html