异常的介绍
程序正常的情况下是可以运行的,知识偶尔因为其他的原因导致了程序的不正常。
列如:用户输入参数的问题(除数不能为零),用户文件被删除,用户控件已满,网络中断
程序的运行过程中,可能遇到了“不正常”的情况,导致程序暂停或者崩溃了。
不是异常的情况:
(1)语法错误,编译都不通过
(2)逻辑错误
java如何处理异常,java的异常的处理机制是什么样子的?
java运行中,如果某句代码发生异常,那么java会在这句代码处停下来,
java会创建一个“异常的对象”,并且“抛”出来。
java会检测这句代码的外围是否有“try…catch”可以“捕获”它,如果可以捕获,那么程序会从这个try…catch继续运行
如果外围没有“try…catch”可以“捕获”它那么程序就会先抛给“上级(调用者)”,上级也会检查否有“try…catch”可以“捕获”它,如果可以捕获,那么程序会从上级try…catch继续运行继续运行如果一路上都没有try…catch可以捕获它,那么程序就“挂了”
简单说:java的异常处理机制用“异常对象”来表示异常情况,如果有try…catch可以捕获,就继续,否则就挂了。
异常的父类Throwable
Throwable 类是java 语言中所有错误或异常的超类
分为两个子类:
(1)Error:Error是Throwable的子类,用于指示合理的应用程序不应该试图捕获的严重问题
列如:VirtualMachineError(虚拟机错误)
(2)Exception
又分为两大类
A:RuntimeException运行时异常(非受检异常);只有RuntimeException类型或它的子类是属于运行时异常
凡是运行时异常,编译器不会要求你加“try…catch”或“throws”
常见的运行时异常:
ArrayaindexOutOfBoundsException(数组下标越界)
NullPoniterException(空指针异常)
ClassCastException(类型转换异常)
ArithmeticException(算数异常)
B:编译时异常(受检异常):除了运行时异常,剩下的全部是编译时异常。
凡是编译时异常,编译器强制要求你必须加“try…catch”或“throws”之一,否则编译不通过
常见的编译时异常:
InterruptedException:线程中断打扰异常
FileNotFoundException:文件找不到
面试题:
1、编写代码,使得发生VirtualMachineError(OutOfMemoryError,StackOverflowError)
2、列出你开发中常见的类型?(至少五个以上)
列出几种运行时异常
列出几种编译时异常
import java.io.FileInputStream;
import org.junit.Test;
public class TestExceptionType_2 {
@Test
public void test(){
//FileInputStream fis = new FileInputStream("");
}
// @Test
// public void test() throws InterruptedException{
// Thread.sleep(1000);
// }
@Test
public void testRuntimeException() {
int[] arr = new int[5];
// System.out.println(arr[6]);//ArrayaindexOutOfBoundsException
String str = null;
System.out.println(str.length());//NullPoniterException
}
//OutOfMemoryError(堆内存溢出)
@Test
public void testOutOfMemoryError() {
Object[] arr = new Object[Integer.MAX_VALUE];
System.out.println(arr.length);
}
//StackOverflowError(栈内存溢出异常,自己调用自己就会发生这个错误)
// @Test
// public void testStackOverflowError() {
// testStackOverflowError();
// }
}