---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
异常的作用是什么?
把发生异常部分内容封装起来,提供给外界以清晰可读的异常信息
在项目开发中,提高可维护性,为修改程序错误提供线索
异常的处理,使程序能够完整地运行
异常三种的三种格式
try语句不能单独存在,可以和catch、finally组成 try...catch...finally、try...catch、try...finally三种结构。
第三这种结构,有些资料上写,如果写了try没有写catch处理语句,编译会报错,其实第三个不写catch是把异常给抛出去了,这里不写catch只是表明这里不处理而已,所以必须要在方法上声明抛异常,并且,要在调用处try捕获异常和catch处理异常
try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面
问题:什么时候抛,什么时候try
问题:是不是一检测到异常,程序立马抛出异常,程序不再往下执行了呢?
我的理解:
这个说法不严谨和不准确
程序运行的时候,有异常检测机制,抛出异常后,不是程序停止运行,而是try里面的的停止运行,并且抛出异常,如果下面有catch,那么try外的接着运行
如何定义异常信息呢?
因为父类中已经把异常信息的操作都封装好了。
所以子类只要在构造时,将异常信息传递给父类通过super语句。
那么就可以直接通过getMessage方法获取自定义的异常信息。
建议在捕获到异常的时候使用e.printStackTrace(),打印到控制台
自定义异常:
必须是自定义类继承Exception。
继承Exception原因:
异常体系有一个特点:因为异常类和异常对象都被抛出。
他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。
只有这个体系中的类和对象才可以被throws和throw操作。
throws和throw的区别
throws使用在函数上。
throw使用在函数内。
throws后面跟的异常类。可以跟多个。用逗号隔开。
throw后跟的是异常对象。
总结:子类不能抛出比父类的异常更大的异常
自定义异常
class MyException extendsException//要继承Exception
{
publicMyException(String msg)
{
super(msg);
}
}
自定义异常在抛出的时候要创建异常对象
throw newMyException("msg");//要用new创建一个异常
Exception型异常在程序中必须使用try…catch进行处理
RuntimeException型异常可以不使用try…catch进行处理,如果发生异常,则直接交由JVM处理
如果是运行时RuntimeException异常,方法上可以不声明,调用处可以不处理,但是,如果是Exception型异常,则必须要在方法上声明,调用处必须处理。所以,不是所有异常都必须声明,也不是所以异常都必须处理
Finally{}在任何时候都可以执行到,但是有一种例外请款,就是执行到系统退出语句System.exit(0),这个时候,虚拟机结束,不执行Finally{}
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------