Java之运行时异常与编译时异常区别

2021/5/5 20:25:36

本文主要是介绍Java之运行时异常与编译时异常区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

Java中用2种方法处理异常:

1.在发生异常的地方直接处理;

2.将异常抛给调用者,让调用者处理。

Java异常可分为3种:

  (1)编译时异常:Java.lang.Exception

  (2)运行期异常:Java.lang.RuntimeException

  (3)错误:Java.lang.Error

Java.lang.Exception和Java.lang.Error继承自Java.lang.Throwable;

Java.lang.RuntimeException继承自Java.lang.Exception.

编译时异常: 程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。

运行期异常: 这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。

错误: 一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。

 

常见的五个编译时异常:(解释来自JDK 1.6 API)

除非有特别说明,以下所有异常的父类是Exception

1.SQLException :提供有关数据库访问错误或其他错误的信息的异常。

( 比如SQL语句写错,访问的表不存在,连接数据库失败等等)

2.IOexception :表示发生了某种I / O异常的信号。此类是由失败或中断的I / O操作产生的一般异常类。

( 广泛的说,什么时候会有IOException ,比如你文件都不到的时候 ,你在做数据库操作的时候数据库底层出现问题 ,或者你系统IO出问题了 ,系统拿不到文件句柄 ,你说的读着读着突然被删了,你可以试试,书不定真可以 ,你可以看有多少IOExeption个子类,差不多就有多少种类型 )(百度知道)

3.FileNotFoundException :当试图打开指定路径名表示的文件失败时,抛出此异常。(IOexception的子类)

( 注意,这里的找不到是在你的编译结果文件夹里面找不到,而不是在你的工程里面找不到,很多同学说自己工程里面有这个文件,为什么还要报这个异常?这个时候,你最好跑到你的编译文件放的文件夹下面,比如tomcat的webapps文件夹下面,找找你的工程对应的文件夹,看看那个里面有没有你的文件)(百度知道)

4.ClassNotFoundException :找不到具有指定名称的类的定义。

( 属于编译时异常,是在classloader加载类的时候发现类不存在在类路径的时候报出的。)(百度知道)

5.EOFException :当输入过程中意外到达文件或流的末尾时,抛出此异常。(IOexception的子类)

( 这个一般是因为阻塞引起的,因为server的input.read读不到东西就会阻塞,当你关掉client的时候,server就知道没有东西进来了,所以就报了个异常,其实这个是正常的,只是告诉你,该把socket关闭一下,还有input也关闭一下。)(百度知道)

 

 

 

常见的五个RunTimeException异常:(解释来自JDK 1.6 API)

除非有特别说明,以下所有异常的父类是RunTimeException

1.StringIndexOutOfBoundsException :指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。

(String 的 substring方法 参数index访问下标越界,如:

String a = "abc";

System.out.println(a.substring(1)); //正常,显示“bc”

System.out.println(a.substring(2)); //正常,显示“c”

System.out.println(a.substring(4)); //错误,java.lang.StringIndexOutOfBoundsException: String index out of range: -1 因为一共只有3个字母。)

2.ArrayIndexOutOfBoundsException :用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。

( 当你使用不合法的索引访问数组时会报数组越界这种错误,数组arr的合法错误范围是[0, arr.length-1];当你访问这之外的索引时会报这个错。例如:

int[] arr = {1, 2, 3};

for (int i = 0; i <= arr.length; i++) {
System.out.println(arr[i]); //当i=3时 错误:java.lang.ArrayIndexOutOfBoundsException: 3

})

3. ArithmeticException :当出现异常的运算条件时,抛出此异常。

( 例如,一个整数“除以零”时,抛出此类的一个实例。

double a = 1/0; // java.lang.ArithmeticException: / by zero

System.out.println(a); )

4.IllegaArguementException :抛出的异常表明向方法传递了一个不合法或不正确的参数。

()

5.NullPointerException:当应用程序试图在需要对象的地方使用 null 时,抛出该异常。

( 例子:

String s1 = null;

s1.getBytes(); // java.lang.NullPointerException

System.out.println(s1.getBytes());

这种情况包括:

调用 null 对象的实例方法。
访问或修改 null 对象的字段。
将 null 作为一个数组,获得其长度。
将 null 作为一个数组,访问或修改其时间片。
将 null 作为 Throwable 值抛出。)

 

 

 



这篇关于Java之运行时异常与编译时异常区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程