1、Java的基本理念是:结构不佳的代码不能运行。
2、异常情形是指阻止当前方法或做用户继续执行的问题。异常情形和普通问题是不同的,所谓的普通问题是指:在当前环境下能得到足够多的信息,总能处理这个错误。而异
常情形是指:在当前环境下,无法或的必要的信息来解决问题。
3、抛出异常之后会发生的几件事情:a、将会以new的方式在堆上创建一场对象的引用。
b、当前的执行路径会被终止,并获得弹出的异常的引用。c、异常处理机制接管程序,并且从一个恰当的地方来继续执行程序。这个恰当的地方一般为catch或者finally
4、所有的标准异常类都有两个构造器,一个是默认构造器,另一个是接受字符串作为参数,以便能把相关信息放入异常
对象的构造器。
5、监控区域:是指可能产生异常的代码,并且后面跟着处理这些异常的代码。
6、异常处理理论中有两种模型:
a、终止模型,在这种模型中,将假设错误非常关键,一直与程序无法返回到一场发生的地方继续执行。一单一场被抛出
,就表明错误已经无法挽回,也不能回来继续执行。
b、恢复模型:是指异常处理程序的工作室修正错误,然后重新尝试解决问题。
以上两种模型相比较来说,常常使用终止模型。因为从复杂程度来说,要实现恢复模型,要编写大量处理代码。
7、对于一般的用户新建异常来说,最重要的就是类名的命名,也就是说,从Exception继承异常之后,几乎不用改什么。
8、异常的构造器一般有两个,一个是默认构造器,一个是接受参数的构造器。如果程序员想要自己实现一些构造器,那
么一般来说要重写getMessag()函数。普通自己构建的异常如下:
class MyException extend Exception
{
public MyException(){}
public MyException(String msg)
{ super(msg); }
}
9、printStackTrace()方法如果是无参数形式,则默认输出到标准错误流。当然,可以向其中传递输出流的参数。
10、Exception类中有个一个getMessage()方法。通过覆盖此方法可以实现自定义形式的输出。
11、Exception类是所有异常的基类,所以,当catch异常时,要把catch(Exception e)写在最后,因为派生异常类可以匹配基异常类。
12、printStackTrace()可以直接打印异常栈轨迹。我们也可以通过调用getStackTrace()函数来获取所有的栈顺序,此函数以数组的形式返回栈轨迹。元素0是栈顶元素。
13、对于重抛异常来说,如果仅仅是简单讲当前一场对象重新抛出,那么printStackTrace()函数将显示原来的异常抛出位置,而不会显示重抛位置。要显示重抛位置,则需要用
原先的异常再构建一个新的异常之后抛出。关于如何构造的问题:
a、对于Error、Exception、RuntimeException三种异常,可直接在构造函数出将原有的异常传递即可。b、对于除了以上三种异常之外,则需要调用initCause(异常 e)方法将异常传递。
14、如果RuntimeException没有被捕获而直达main(),那么在程序退出之前会默认调用printStackTrace()。15、对于finally处理模块,无论怎样,这个模块总会被执行,可以用来最后的释放资源等操作。更重要的是,在一个方法中,可以从多个点返回,并且可以保证重要的清理工作仍然会进行,比如:
void haha(int num){
try
{
switch(num)
{
case 0:
return;//返回
break;
case 1:
return;//返回
break:
deflaut:
break;
}
}
finally
{
System.out.println("ok");
}
}
此时,无论从何处返回则finally中的输出部分肯定会执行。
16、在覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常。
17、派生类构造器不能捕获基类构造器抛出的异常。18、对于派生类的异常和基类的异常来说,其异常种类只能变小不能变大。