首页编程java编程java为什么会有异常,JAVA反射为什么总要异常处理

java为什么会有异常,JAVA反射为什么总要异常处理

编程之家2023-10-1396次浏览

大家好,今天小编来为大家解答以下的问题,关于java为什么会有异常,JAVA反射为什么总要异常处理这个很多人还不知道,现在让我们一起来看看吧!

java为什么会有异常,JAVA反射为什么总要异常处理

什么是Java的异常

异常通常指,你的代码可能在编译时没有错误,可是运行时会出现异常。比如常见的空指针异常。也可能是程序可能出现无法预料的异常,比如你要从一个文件读信息,可这个文件不存在,程序无法运行下去了,故程序要抓这些异常,通过异常处理机制来抛出这些异常,程序员就可以通过抛出的异常来修改代码。try{}catch{}finally{}try块中放入可能会出现异常的代码,catch块负责捕获异常,finally块负责处理一些必须执行的代码,比较关闭流等。

常见的java异常有:

空指针异常类:NullPointerException

java为什么会有异常,JAVA反射为什么总要异常处理

当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出 null等等。

类型强制转换异常:ClassCastException

假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。

java为什么会有异常,JAVA反射为什么总要异常处理

数组下标越界异常:ArrayIndexOutOfBoundsException

当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。

文件未找到异常:FileNotFoundException

当试图去引用一个路径下的某个文件而该路径下没有文件时,抛出该异常。

数字格式异常:NumberFormatException

当试图将一个String转换为指定的数字类型,而该字符串却不满足数字类型要求的格式时,抛出该异常。

数据库操作异常:SQLException

当执行一段SQL语句或该SQL不符合规则时抛出该异常。

输入输出流异常:IOException

java为什么会发生catch异常

Java代码

import java.io.IOException;

public class ExceptionTryCatchTest{

public void doSomething() throws IOException{

System.out.println("do somthing");

}

public static void main(String[] args){

ExceptionTryCatchTest et= new ExceptionTryCatchTest();

try{

et.doSomething();

} catch(Exception e){

//

} catch(IOException e){

//

}

}

}

问题:上述程序能否编译通过?为什么?

解答:不能编译通过。因为编译的时候会报错:已捕捉到异常 java.io.IOException。 catch(IOException e)这句有错误。

分析:对于try..catch捕获异常的形式来说,对于异常的捕获,可以有多个catch。对于try里面发生的异常,他会根据发生的异常和catch里面的进行匹配(怎么匹配,按照catch块从上往下匹配),当它匹配某一个catch块的时候,他就直接进入到这个catch块里面去了,后面在再有catch块的话,它不做任何处理,直接跳过去,全部忽略掉。如果有finally的话进入到finally里面继续执行。换句话说,如果有匹配的catch,它就会忽略掉这个catch后面所有的catch。对我们这个方法来说,抛出的是IOException,当执行etct.doSomething();时,可能会抛出IOException,一但抛出IOException,它首先进入到catch(Exception e){}里面,先和Exception匹配,由于OExceptionextends Exception,根据多态的原则,IOException是匹配Exception的,所以程序就会进入到catch(Exception e){}里面,进入到第一个catch后,后面的catch都不会执行了,所以catch(IOException e){}永远都执行不到,就给我们报出了前面的错误:已捕捉到异常 java.io.IOException。

总结:在写异常处理的时候,一定要把异常范围小的放在前面,范围大的放在后面,Exception这个异常的根类一定要刚在最后一个catch里面,如果放在前面或者中间,任何异常都会和Exception匹配的,就会报已捕获到...异常的错误。

JAVA反射为什么总要异常处理

JAVA中的异常和反射

一、异常

1

、异常概貌:

概念: JAVA会将所有的异常、错误抽象成为一个类,其根本父类为Throwable。异常是程

序中所有出乎意料的结果,用名称代表发生的问题,见名知义。我们对于程序可能出现的错

误应该做出预案。异常处理可以提高我们系统的容错性、健壮性。

java.lang.Throwable类是所有异常和错误的顶层类。其两个直接子类是java.lang.Error和

java.lang.Exception。

 Error

对象表示程序错误,是底层的、不可恢复的严重错误。此时程序一定会退出,

已经失去了运行所必须的物理环境。因为程序已经退出了,所以对于Error错误无法进

行处理。

我们可处理的只是Exception

类的对象表示的程序异常(例外/异常)。

以下区分:

 RuntimeException

(未检查异常):RuntimeException及其子类都称为运行时异常,它

是(UnChecked Exception),特点是Java编译器不会检查它,可以在编程时避免。也就

是说,当程序中出现此类异常时,即使不用try…catch捕获,或不用throws子句抛出,

还是可以编译通过。比如,除数为0的异常ArrithmeticException,就是运行时异常。

非Runtime

异常(已检查异常):包括除了RuntimeException及其子类外的其它Exception

类及其子类,都属于已检查异常(Checked Exception)。其特点是Java编译器会检查它,

我们需要用try…catch语句捕获,或用throws子句声明抛出,否则编译不会通过。比如

打开文件时找不到文件,就属于已检查异常。

Throwable

Error

错误

严重底层错误

不可避免

不可处理

Exception

异常

RuntimeException

未检查异常

(可处理可不处理)

比如除0错误、空指针

非Runtime

已检查异常

(必须处理)

比如打开文件时找不到

2

2

、Java

异常处理机制

(1

)try

catch

捕获异常(积极处理异常的方式)

try代码块包含了可能发生异常的程序代码,catch块紧随其后,用来捕获并处理异常。

格式如下:

try

{

可能出现异常的代码块}

catch

(Exception

e)

{

进行异常处理}

注意:一次异常捕获只会匹配一次try…catch

catch中要求必须先捕获子类异常再捕获父类异常。

(2

)finally

任何情况下都必须执行的代码段(紧接在try或catch代码块后面)。

finally无论如何都会被执行,除非JVM退出。所以,finally代码块常常用于释放被占

用的资源。比如关闭文件、网络、数据库连接等。

(3

)throws

声明可能会抛出的异常(消极处理异常的方式)

格式:方法名(参数表)throws

后面接要往上抛的异常。

表示该方法对指定的异常不作任何处理,直接抛往上一层。

static void methodA(int i) throws IOException{//一直向上抛(消极处理)

}

public static void main(String[] args) throws IOException{//一直抛到JVM

}

多个异常,用逗号隔开。throws IOException, SQLException

throws后的异常允许多态。比如IOException,会包括抛出其子类。

注意:不允许子类比父类抛出范围更大、更多的异常。

方法覆盖时,修饰符要越来越宽;抛例外则要越来越窄。

throws

和try

catch

经常配合使用,把异常传递给最能处理此异常的方法中,体现各

司其职的特点。

Java

中处理异常方式

消极throws用在方法的声明上

积极try…catch…finally

public static int fn(int b){

try{

return b/2;

}catch(Exception e){

return 0;

}finally{

return b;//返回的结果是一定是b;

}

}

3

(4

)throw

抛出异常

打个比方:

public void eat() throws FoodException{//自定义FoodException是以下异常的父类

if(没有食物) throw new NoFoodException(“呵呵,没有食物”);

if(发现苍蝇) throw new FoundFlyException(“哎呀,发现半只苍蝇”);

}

比较throw

和throws

 throw

是一个语句,它出现在方法体中,用来抛出异常对象。

 throws

是出现在方法声明中,表示本方法中会有异常对象向上(调用者)抛出。

 throws

后写的是异常类型; throw

后写的是要抛出的异常对象。

(5

)异常处理流程

try…catch…finally,如果遇到return和System.exit()语句:

一如果在finally之前遇到System.exit()则finally语句不再执行,这是finally不被执行

的唯一情况。因为java.lang.System类的静态方法exit()用于终止当前的Java虚拟机进程。exit()

的参数表示程序终止时的状态码,0表示正常终止,非0表示异常终止。

二return语句用于退出本方法。如果在try或者catch代码块中遇到return语句时,若

有finally语句块,会先执行finally代码块。

三不要在finally代码块中使用return语句。因为这样会导致两种潜在错误:A.覆盖了

try或catch块中的return语句; B.导致丢失异常。

try{

} catch(XxxException e){

} finally{

}

情况一:没有异常,处理顺序为①②③⑤⑥

情况二:在②处有异常,①②④⑤⑥

情况三:有异常,没有被捕获,①②⑤终止

情况四:如果③后有return语句,①②③⑤

情况五:如果遇到System.exit(),则⑤不执行

允许的处理方式:

① try…catch()

② try…finally//与throws配合使用

③ try…catch…finally

④ try…catch(){} catch(){}…//配多个catch

//注意范围大的异常要写在后面

4

(6

)异常处理规则:

①只有在异常情况下才使用异常处理机制;

②保证操作要么一起成功,要么一起失败;

③ try代码块不要太大;

④ catch子句中指定具体的异常类型;

⑤早抛出,晚捕获。

3

java为什么会有异常和JAVA反射为什么总要异常处理的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

java里的意思是什么意思(JAVA中文是什么意思)java对象流是什么(java中的流是什么)