java的异常事件分为两类:
Error:java虚拟机无法解决的严重问题,如jvm系统内部错误,资源耗尽等严重情况,
一般不编写针对性代码处理
Exception:其他编程错误或偶然的外在因素导致的一般性问题,可以针对性的代码进行处理
①空指针访问
②试图读取不存在的文件
③网络连接中断
注意:子类重写父类的方法,其抛出的异常类型只能是被重写的方法的异常类的子类或者异常类型一样。
(重写的异常小些,父类的大些)
package com.aff.excep; import java.io.File; import java.io.FileInputStream; import java.util.Date; import java.util.Scanner; import org.junit.Test; /*
java.lang.Throwable |-----Error:错误,程序不进行处理 |-----Exception:异常,要求编写程序是,就要考虑对这些异常的处理 |编译时异常:编译期间会出现的异常,执行javac.exe命令时,出现异常 | SQLException | IOException | ClassNotFoundException ... |运行时异常(RuntimeException):在运行期间出现的异,执行java,exe命令时,出现异常 | NullPointException | ArithmeticException | ClassCastException |ArrayIndexOutOfBoundsException ... 注意:1.捕捉异常最好在编译期间,有的错误只在运行时才会发生。 比如:除数为0,数组下标越界等 2.当执行一个程序时,如果出现异常,那么异常之后的代码就不在执行了。 */ public class TestException { // 常见的运行时异常 @Test public void test7() { } //编译时异常 @Test public void test6() { /* FileInputStream fis = new FileInputStream(new File("heel.txt")); int b ; while((b = fis.read())!=-1){ System.out.println((char)b); } fis.close();*/ } //空指针异常: java.lang.NullPointerException //p指向null,通过空的引用调用方法 ,运行时异常 @Test public void test5() { Person p = new Person(); p = null; System.out.println(p.toString()); } //类型转换异常: java.lang.ClassCastException: java.util.Date cannot be cast to java.lang.String @Test public void test4() { Object obj = new Date(); String str = (String)obj; //理解为男人赋给一个人,人再赋给女人,编译时候没错 运行时出错 // String str = (String) new Date();理解为男人赋给女人, 编译时就不能通过, } // 2.算数异常:java.lang.ArithmeticException: / by zero @Test public void test3() { int i = 10; System.out.println(i / 0); } // 1.数组下标越界异常 : java.lang.ArrayIndexOutOfBoundsException: 10 @Test public void test2() { int[] i = new int[10]; // System.out.println(i[10]); // System.out.println(i[-10]); } @Test public void test1() { Scanner s = new Scanner(System.in); int i = s.nextInt(); System.out.println(i); } class Person{ } }