JAVA:异常

JAVA:异常,第1张

异常

一、

1、异常旗下两大分支:编译时异常和运行时异常

Exception->RunTimeException(运行时异常,又叫未受检异常、非受控异常),编写阶段可不处理,编译器没意见。

Exception->ExceptionSubClass(编译时异常,又叫受检异常、受控异常),是Exception的直接子类,编写程序时必须处理,不然报错。发生概率极高。

切记:所有异常都是发生在运行阶段的。

2、处理异常

第一种:在方法声明的位置上,使用throws关键字,抛给上一级。

eg:我是一个小职员,失误了,导致公司损失1000块,然后告诉了领导,这就是异常的上抛

第二种:使用try..catch语句进行异常捕捉。

eg:我还是那个小职员,但是我这次不告诉领导了,直接用我自己的钱补上,这就是异常的捕捉

注意:java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果,终止java程序的执行。

异常处理机制的作用就是增强程序的健壮性,争取做到发生异常也不影响程序的执行

3、方法声明位置上使用throws

Eg:

public static void doSome() throws ClassNotFoundException(){

Sout("dosome!!!");

}

这个时候要想在主方法直接调用doSome的话,那编译器就会报错(错误信息:未处理的异常,Unhandled exception)。

4、try..catch

语法:

try{

// 尝试,把可能出现问题的代码块放到这里

}catch(异常类 + 变量名){

//catch是捕捉到异常之后执行的分支,如输出一些错误信息

// 变量里面存的是异常对象的内存地址

}

// try..catch抓住异常之后,这里的代码会继续执行。

捕捉等于把异常拦下来,异常真正的解决了,调用者不知道发生过异常。

5、throws

throws相当于把异常上抛,推卸责任。但是要注意,抛出异常之后,当前方法就没有责任了,把责任抛给上级了。且

①往上抛的过程中,只能抛当前异常类及父异常类,级别低了不行。

②可以同时抛出多个异常

③一般不建议在main方法上使用throws

6、深入try…catch…

try{

FileInputStream fis =new FileInputStream("XXXXX");

//这里new了一个异常对象,try里发现异常,于是转交catch捕捉

}catch(Exception e){  // 异常类可以是当前异常类,也可以是其父类。

Sout("文件不存在 !");

}

①catch可以写多个。建议catch的时候,精确的一个一个处理,这样有利于程序的调试,也可以直接来一个catch(Exception e) ,省事。

②多个catch遵循"从上到下,从小到大"的原则

7、jdk8新特性

允许这么写catch(FileNotFoundException | ArithmeticException | NullPointerException),即以“或”的方式来写异常,方便处理

8、异常和捕捉怎么选择?

 如果希望调用者来处理,throws上报;其他情况,直接捕捉。只有这一个原则

二、getMessage() 和 printStacktrace()方法

1、getMessage()方法

作用:获取异常的简单的描述信息,其实就是构造方法上String参数(传进去的)

String msg = exception.getMessage();

2、printStackTree()方法

作用:打印异常追踪的堆栈信息

Exception.printStackTrace();

3、举个例子

Eg:

NullPointerException e = new NullPointerException("空指针异常abc");

String msg = e.getMessage();

Sout(msg); // 输出“空指针异常abc”

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/922313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存