Java异常
异常:
异常是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程。
设计良好的程序应该在异常发生时提供处理这些不正常事件的方法,使程序不会因为异常的发生而阻断或产生不可预见的结果。
Java语言使用异常处理机制为程序提供了异常处理的能力。
异常的分类:
错误(Error)
JVM系统内部错误或资源耗尽等严重情况-属于JVM需要负担的责任这一类异常事件无法恢复或不可能捕获,将导致应用程序中断。
异常(Exception)
其它因编程错误或偶然的外在因素导致的一般性问题。这类异常得到恰当的处理时,程序有机会恢复至正常运行状况。
错误:
错误(Error):
JVM系统内部错误或资源耗尽等严重情况-属于JVM需要负担的责任这一类异常事件无法恢复或不可能捕获,将导致应用程序中断。
错误出现原因:
栈内存溢出:
public static void main(String[] args) {
//StackOverflowError - 栈内存溢出的错误
//出现原因:调用方法会在栈中开辟空间,用于存放该方法的局部变量,死循环的调用方法,栈内存就满载并溢出了
method();
}
public static void method(){
method();
}
出现原因:调用方法会在栈中开辟空间,用于存放该方法的局部变量,死循环的调用方法,栈内存就满载并溢出了。
堆内存溢出:
public static void main(String[] args) {
//OutOfMemoryError -- 内存溢出的错误
//出现原因:new出来的数组添加到集合中,该数组不会被回收
ArrayList<byte[]> list = new ArrayList<>();
while(true){
byte[] bs = new byte[8192];
list.add(bs);
}
}
出现原因:new出来的数组添加到集合中,该数组不会被回收。
异常:
异常(Exception):
其它因编程错误或偶然的外在因素导致的一般性问题。这类异常得到恰当的处理时,程序有机会恢复至正常运行状况。
异常分类:
1. RuntimeException(非受检性异常):
编译器不要求强制处置的异常。一般是指编程时的逻辑错误。是程序员应该积极避免其出现的异常。
2. 一般性异常(受检性异常): 编译器要求必须处置的异常。指的是程序在运行时由于外界因素造成的一般性异常。
RuntimeException:
RuntimeException(非受检性异常):
编译器不要求强制处置的异常。一般是指编程时的逻辑错误。是程序员应该积极避免其出现的异常。
注意:java.lang.RuntimeException及它的子类都是非受检异常。
异常出现原因:
举些例子,异常种类太多了。
算数异常:
public static void main(String[] args) {
//ArithmeticException -- 算数异常
System.out.println(10/0);
}
数组下标越界异常:
public static void main(String[] args) {
//ArrayIndexOutOfBoundsException -- 数组下标越界异常
int[] arr = {1,2,3};
System.out.println(arr[1000]);
}
下标越界异常:
public static void main(String[] args) {
//IndexOutOfBoundsException - 下标越界异常
ArrayList<Object> list = new ArrayList<>();
System.out.println(list.get(100));
}
空指针异常:
自己去解决,不要问别人!!!
public static void main(String[] args) {
//NullPointerException --空指针异常
String str = null;
method(str);
}
public static void method(String str) {
System.out.println(str.length());
}
类型转换异常:
public static void main(String[] args) {
//ClassCastException - 类型转换异常
Object obj = new Integer(100);
String str = (String) obj;
System.out.println(str);
}
一般性异常:
一般性异常(受检性异常):
编译器要求必须处置的异常。指的是程序在运行时由于外界因素造成的一般性异常。
异常出现原因:
举些例子,异常种类太多了。
类未找到异常:
public static void main(String[] args) throws ClassNotFoundException {
//ClassNotFoundException -- 类未找到异常
Class<?> clazz = Class.forName("java.lang.String111111");
System.out.println(clazz);
}
文件未找到异常:
public static void main(String[] args) throws FileNotFoundException {
//FileNotFoundException - 文件未找到异常
FileInputStream fis = new FileInputStream("C:\\Users\\OYO\\Desktop\\异常理解图.png11111");
System.out.println(fis);
}