/*
- 异常的概述与分类
- 1,在Java语言中,将程序执行中发生的不正常情况称为“异常”。 (开发过程中的语法错误和逻辑错误不是异常)
- 2,Java程序在执行过程中所发生的广义异常事件可分为两类:
- 2.1Error(也叫错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。
- 比如:StackOverflowError和OutOfMemoryError。一般不编写针对性的代码进行处理。需要修改现有代码。
- 2.2Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。
- 例如:空指针访问,数组角标越界,试图读取不存在的文件,网络连接中断等。
- 3 对于这些错误,一般有两种解决方法:一是遇到错误就终止程序的运行。
- 另一种方法是由程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理。
- 捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生。比如:除数为0,数组下标越界等
- 4,按照出现时机分类,异常可分为编译期异常和运行时异常。
- 4.1编译时异常(也叫checked 受检异常,比较严重),是指编译器要求必须处置的异常。即程序在运行时由于外界因素造成的一般性异常。
- 编译器要求Java程序必须捕获或声明所有编译时异常。对于这类异常,如果程序不处理,可能会带来意想不到的结果。
- 4.2运行时异常(也叫unchecked非受检异常),是指编译器不要求强制处置的异常。一般是指编程时的逻辑错误,
- 是程序员应该积极避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常。
- 对于这类异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。
- 5,常见异常
- 5.1异常的顶级父类是Throwable,位于java.lang包下。下面两个子类是Error和Exception,Exception下的子类RuntimeException中的子类都是运行时异常
- Exception下的其他子类都是编译时异常。例如:IOException,ClassNotFoundException,CloneNotSupportedException。
- 5.2常见异常
- 运行时:
- 1,NullPointerException
- 2,ArrayIndexOutOfBoundsException
- 3,ClassCastException
- 4,NumberFormatException
- 5,InPutMismatchException
- 6,ArithmeticException
- 编译时:
- 1,IOException
- 2,FileNotFoundException
- 3,ClassNotFoundException
*/
package exception;
import java.io.File;
import java.io.FileInputStream;
import java.util.Date;
import java.util.Scanner;
import org.junit.Test;
public class Exception1 {
public static void main(String[] args) {
//栈溢出,例如局部变量循环引用。
main(args);//java.lang.StackOverflowError
//堆溢出,创建对象过多
Double[] d = new Double[1024*1024*1024];//java.lang.OutOfMemoryError
}
@Test
//空指针异常与角标越界异常
public void method() {
//空指针
String s = null;
System.out.println(s.charAt(1));
//角标越界
int[][] array = new int [6][];
array[0] = new int[10];
System.out.println(array[0][10]);
}
@Test
//类型转换异常,数据类型异常
public void method1() {
//类型转换异常
Object o = new Date();
String s = (String)o;
//数据类型异常
String str = "123F";
int n = Integer.parseInt(str);
}
@Test
//输入数据不匹配异常,算数异常
public void method2() {
//输入数据不匹配异常
Scanner scan = new Scanner(System.in);
int n = scan.nextInt(); //当在控制台输入小数时,报异常
//算数异常
int a = 11;
int b = 0;
System.out.println(a / b);
}
@Test
//编译期错误,IDE中会报错,
public void method3() {
File file = new File("E:\\eclipse-workspace\\Contacts\\src1.txt");
FileInputStream fis = new FileInputStream(file);
int date = fis.read();
while(date != -1) {
System.out.print((char)date);
date = fis.read();
}
fis.close();
}
}