异常分为两种:
Throwable类是所有异常或错误的超类。
Throwable有两个重要的子类:Exception(异常)和 Error(错误)。
Exception又分为两大类:一种是编译时异常,又称检查异常(checked Exception),
另一种是运行时异常,又称非检查异常(Unchecked Exception)。
检查异常:程序在编译时所出现的异常,一旦发出声明,必须解决。
非检查异常:程序在编译时没有进行提示的异常,可以处理也可以不处理。
一、编译时异常(checked Exception)
编译时异常是JVM在运行时发生的非程序的故障,程序无法处理的错误,表示程序在编译过程中出现的严重问题。
如:IOException 、SQLException … …
二、运行时异常(Unchecked Exception)
在程序编译时未被检查出的异常被称之为运行时异常。
JDK7及以后关闭资源方式:try-with-resource
try (一个类(接口)实现了AutoCloseable接口,就可以放入try with resource里面) {
}catch (Exception e) {
e.printStackTrace();
}
// 例:
try (Scanner scan = new Scanner(System.in);) {
System.out.println("请输入一个正整数:");
int num = scan.nextInt();
prime.doPrime(num);
}catch (ArithmeticException e) {
e.printStackTrace();
}
Java异常处理
throw与thtows关键字
throws:用于在方法上声明异常;而throw则是在在代码块中通过new关键字来抛出异常的。
异常捕获
try、catch、finally、throw、throws的用法:
throw:一般自己声明的异常。
throws:只能用与方法声明中,用来声明某个方法可能会出现异常。
try : 存放容易出现异常的代码。
catch:抓住try块中的异常,并处理。
finally:不管是否发生异常都会执行,工作中用来清理对象占用的内存。
try-catch 语句
一般我们在代码容易出现异常的情况下使用try{}catch{}关键字来捕获异常。
语法如下:
try{
// 可能发生异常的代码
} catch(Execption e) {
// 异常的处理语句
}
catch语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
如果代码可能出现多个异常,那么需要使用多重捕获块来捕获可能发生的异常。
语法如下:
try{
// 可能发生异常的代码
}catch(异常类型1 异常的变量名1){
// 异常的处理语句1
}catch(异常类型2 异常的变量名2){
// 异常的处理语句2
}catch(异常类型3 异常的变量名3){
// 异常的处理语句3
} ...
如果try里面的代码出现异常,这会依次(从上到下)与catch进行匹配。
注意:多重catch的时候子类异常类型放在前面,父类异常类型放在后面。
try-catch-finally 语句
检测异常,并传递给 catch 处理,并在 finally 中进行资源释放。
try{
// 可能发生异常的代码
}catch(异常类型1 异常的变量名1){
// 异常的处理语句1
}catch(异常类型2 异常的变量名2){
// 异常的处理语句2
}finally{
// 无论try中代码是否发生异常,finally中的代码始终会被执行。
}
自定义异常
语法格式:
class 自定义异常名 extends Exception或RuntimeException {
public 自定义异常名() {
// 默认调用父类无参构造方法
}
public 自定义异常名(String str) {
// 调用父类具有异常信息的构造方法
super(str);
}
}
- 如果发现代码中出现的异常在Java异常类中没有的,则需要自定义异常。
- 所有异常都必须是 Throwable 的子类。
- 如果希望写一个检查性异常类,则需要继承 Exception 类。
- 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
常见的运行时异常:
NullPointerException :空指针异常
ArrayIndexOutOfBoundsException :数组下标越界异常
ArithmeticException :算术异常
ClassCastException :类型转换异常
InputMismatchException :输入不匹配异常
RuntimException :运行时异常
常见的Error异常:
StackOverflowError :栈内存溢出错误,栈内存已经满了
OutOfMemoryError :JVM内存过小、程序不严密,产生了过多的垃圾。
Error与Exception的区别???
可以参考:https://www.cnblogs.com/lcl-dcr/p/7653274.html
Throwable类是所有异常或错误的超类。
Throwable有两个重要的子类:Exception(异常)和 Error(错误)。
Exception又分为两大类:一种是编译时异常,又称检查异常(checked Exception),
另一种是运行时异常,又称非检查异常(Unchecked Exception)。
检查异常:程序在编译时所出现的异常,一旦发出声明,必须解决。
非检查异常:程序在编译时没有进行提示的异常,可以处理也可以不处理。
一、编译时异常(checked Exception)
编译时异常是JVM在运行时发生的非程序的故障,程序无法处理的错误,表示程序在编译过程中出现的严重问题。
如:IOException 、SQLException … …
二、运行时异常(Unchecked Exception)
在程序编译时未被检查出的异常被称之为运行时异常。
JDK7及以后关闭资源方式:try-with-resource
try (一个类(接口)实现了AutoCloseable接口,就可以放入try with resource里面) {
}catch (Exception e) {
e.printStackTrace();
}
// 例:
try (Scanner scan = new Scanner(System.in);) {
System.out.println("请输入一个正整数:");
int num = scan.nextInt();
prime.doPrime(num);
}catch (ArithmeticException e) {
e.printStackTrace();
}
Java异常处理
throw与thtows关键字
throws:用于在方法上声明异常;而throw则是在在代码块中通过new关键字来抛出异常的。
异常捕获
try、catch、finally、throw、throws的用法:
throw:一般自己声明的异常。
throws:只能用与方法声明中,用来声明某个方法可能会出现异常。
try : 存放容易出现异常的代码。
catch:抓住try块中的异常,并处理。
finally:不管是否发生异常都会执行,工作中用来清理对象占用的内存。
try-catch 语句
一般我们在代码容易出现异常的情况下使用try{}catch{}关键字来捕获异常。
语法如下:
try{
// 可能发生异常的代码
} catch(Execption e) {
// 异常的处理语句
}
catch语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
如果代码可能出现多个异常,那么需要使用多重捕获块来捕获可能发生的异常。
语法如下:
try{
// 可能发生异常的代码
}catch(异常类型1 异常的变量名1){
// 异常的处理语句1
}catch(异常类型2 异常的变量名2){
// 异常的处理语句2
}catch(异常类型3 异常的变量名3){
// 异常的处理语句3
} ...
如果try里面的代码出现异常,这会依次(从上到下)与catch进行匹配。
注意:多重catch的时候子类异常类型放在前面,父类异常类型放在后面。
try-catch-finally 语句
检测异常,并传递给 catch 处理,并在 finally 中进行资源释放。
try{
// 可能发生异常的代码
}catch(异常类型1 异常的变量名1){
// 异常的处理语句1
}catch(异常类型2 异常的变量名2){
// 异常的处理语句2
}finally{
// 无论try中代码是否发生异常,finally中的代码始终会被执行。
}
自定义异常
语法格式:
class 自定义异常名 extends Exception或RuntimeException {
public 自定义异常名() {
// 默认调用父类无参构造方法
}
public 自定义异常名(String str) {
// 调用父类具有异常信息的构造方法
super(str);
}
}
- 如果发现代码中出现的异常在Java异常类中没有的,则需要自定义异常。
- 所有异常都必须是 Throwable 的子类。
- 如果希望写一个检查性异常类,则需要继承 Exception 类。
- 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
常见的运行时异常:
NullPointerException :空指针异常
ArrayIndexOutOfBoundsException :数组下标越界异常
ArithmeticException :算术异常
ClassCastException :类型转换异常
InputMismatchException :输入不匹配异常
RuntimException :运行时异常
常见的Error异常:
StackOverflowError :栈内存溢出错误,栈内存已经满了
OutOfMemoryError :JVM内存过小、程序不严密,产生了过多的垃圾。
Error与Exception的区别???