异常
来源:互联网 发布:社会工程学数据库查询 编辑:程序博客网 时间:2024/05/20 06:28
异常
1、main函数抛出的异常是交给了虚拟机,产生了运行时异常,虚拟机默认的处理方式是打印异常信息,并且终止程序。
调用方法时,对方声明几个异常,就对应有几个catch块,如果多个catch块中的异常间出现继承关系时,父类异常catch块放在最下面。
自定义异常类中,可以通过构造方法传入该异常的描述,在方法体中继承父类的即可:
public MyException(String msg)
{
super(msg);
}
throw和throws的区别:
throw放在方法内,throws放在方法上;
throw后面跟的是异常对象(throw new Exception();)
throws后面跟的是异常类,多个类间用逗号隔开(throws MyException,HisException)。
2、RuntimeException:运行时异常,这个异常很特殊:
如果在函数内容里抛出(throw)它或者它的子类异常,函数上可以不用抛出(throws);
如果在函数上声明了该异常,调用者可以不用进行处理(throws、try),编译一样通过。
之所以不用在函数声明,是因为不需要让调用者处理。
当该异常发生,希望程序停止,因为再运行时,出现了无法继续运算或者让程序继续运行的情况,希望程序停止后,对代码进行修正。
同样,自定义异常时:如果该异常的发生,将导致无法再继续进行运算,就让自定义异常继承RuntimeException。
java中的异常分两类:
1)编译时被检测的异常(不抛不try会失败);
2)编译时不被检测的异常(运行时异常,RuntimeException及其子类,建议不处理)
3、finally:
finally代码块:定义一定要执行的代码。
通常用于关闭资源:关闭文件,关闭数据库连接等。
但,finally有一种情况读不到,就是:System.exit(0);//程序退出,jvm结束。
处理异常三种格式:
1)try、catch、finally
2)try、catch
3)try、finally
下面这张方式也可以编译通过,因为问题被内部解决了(catch了):
try{throw new Exception();}catch(Exception e){}
4、catch是用于处理异常的,如果没有catch就代表异常没有被处理过,如果该异常是检测时异常,那么必须声明。
异常在子父类覆盖中的体现:
1)子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖后方法,只能抛出父类的异常或者该异常的子类;
2)如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3)如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出。如果子类方法发生了异常,就必须要进行try处理。
异常的好处:
1)将问题进行封装;
2)将正常流程代码和问题处理啊相分离,方便阅读
throw单独存在时(不是封装在方法里),下面不能定义语句,因为永远执行不到,编译会失败。
【扩展】五片内存区域:
栈、堆、方法区(静态和非静态的)、寄存器、本地方法区(底层的)。具体描述还没有去查。
- 异常
- 异常!
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 《Linux设备驱动开发详解》第3版现隆重征求读者创作意见
- 日记格式
- 微软业务生产力平台基础架构优化(BPIO)之企业项目管理(EPM)解决方案
- Dom4j selectnodes报错Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenExcepti
- dom4j中selectNodes无法获得节点
- 异常
- C#十进制 转换成二进制十六进制 八进制
- com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'title' at row 1
- Erlang并发编程(一)
- Linux手机研发要过五大难关
- sysconf.c
- Linux下的开发工具有哪些呢?
- 一日一点RakNet(37)--Fully Connected 2
- cs0016:未能写入输出文件 "c:"WINDOWS"Microsoft.NET"Fram...