java异常错误的是_Java错误和异常

一、顶级异常类-----Throwable

Throwable继承自Object类,实现了Serializable接口,可以进行序列化。常用的子类有Exception和Error

1.序列化的作用

在Throwable类中使用输出流来进行输出,并把其对象作为输出流对象,这就需要必须实现序列化接口,使得其可以进行序列化,才能作为输出流中的对象进行输出。

2.Exception和Error

Exception指Java程序设计中,可以预料到在运行时可能发生并且应该被捕获的错误,需要相应的处理;

Error主要是用于表示Java和虚拟机内部的异常信息,其不便于捕获,也难以处理;

一、Throwable的两大子类------Exception和Error

1. Exception和Error的设计与分类

d11ab9fe98a7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

Exception类分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception)。

RE能通过编译,但会在运行时抛出,如果未进行处理会导致程序崩溃。RE是完全可以在编程中避免的,因而是不受编译器检查的(unchecked,也包括Error),例如:NullPointerException、ArrayIndexOutOfBoundsException等;

CE是指不能通过编译器检测的异常情况,这总异常通常难以避免,必须try...catch...进行处理,例如:FileNotFoundException。

question:ClassNotFoundException和 NoClassDefFoundError的区别?

NoClassDefFoundError 是程序在编译时候可以找到其依赖的类,但是在运行时找不到或者可以找到多个相同的依赖类,此时抛出NoClassDefFoundError

ClassNotFoundException通常是在类路径错误,或者类名称发生更改时抛出,编译器无法通过路径加载该类,即无法通过编译。

2. 如何处理好Exception

不要捕获Exception这样的通用异常,而应捕获特定的异常,并对其作出相应的处理。

例示:

//no

try {

.....

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//yes

try {

.....

} catch (InterruptedException e) {

// TODO Auto-generated catch block

Log.(TAG,"线程中断/阻塞,需要清理");

}

尽早的抛出异常,以便分析堆栈日志,或者详细地输出到Log中,以便分析。

private void read(String filename) {

Objects.requireNonNull(filename);

try {

InputStream in = new FileInputStream(filename);

} catch (FileNotFoundException e) {

Log.(TAG,"文件路径错误");

}

}

3. 如何自定义异常

所有异常都必须是 Throwable 的子类。

自定义检查性异常类,继承 Exception 类。

自定义运行时异常类,继承 RuntimeException 类。

4. 注意事项

try-catch会产生额外的性能开销,影响JVM对代码进行优化。所以只需try住必要的代码段,而不是整个一大段代码。

不要用try-catch的形式控制代码流程(逻辑),远比switch-case、if-else要低效。

Java在实例化Exception时,都会对当时的栈进行快照,当频繁进行该操作时,会影响到性能。

尽可能的就地处理异常,而不是向上抛出/只捕获不处理。

不要在finally中处理返回值,会覆盖掉try代码块里面的return。

当try和catch中有return时,finally仍然会执行;

finally中包含return,不会对try块中要返回的值进行保护

public static int test() {

int i=0;

try {

i = 1;

return i;

} finally {

i = 2;

return i;

}

}

//返回 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值