异常笔记

一:异常指的是在Java程序运行期出现的错误

 

二:JAVAC.AAA.JAVA    命令行参数运行JAVA程序格式(AAA为类名)

JAVA.AAA

 

三:JAVA异常是一种用来处理程序中出现的错误而提供的一种机制

 

四:异常生成时会出现异常事件,生成一个异常对象,封装了异常类的信息,抛给JAVA运行时系统,这个过程称之为异常跑出

 

五:当JAVA运行时系统介绍到异常对象时,会寻找能处理这一异常的代码并把当前的异常对象交给其处理,这一过程称之为捕获异常。

 

六:捕获到的异常对象的名字自己随便定义

 

七:ERROR时系统错误,我们无法自己处理,是虚拟机出现的错误,异常是我们可以处理的,无需在throw子句中声明该方法可以抛出Error或其任何子类的异常

 

八:异常通常分为了两类。一种是运行时异常,是经常出现的,可以捕获也可以不捕获;另一种异常必须捕获,这类异常常出现在方法头部的定义后面,这是你必须捕获的异常

 

九:一个TRY后面可以跟着多个CATCH,以此来捕获不同的异常。

 

十:无论是否抛出异常,finally语句块中的语句都要执行,finally语句块中经常用来资源的清除工作,例如文件的关闭,删除临时文件等等,finally块必须放在所有的catch块后面,finally块中也可以内嵌try catch组合处理块

 

十一:常用输出异常信息的方法:printstackTrace()和 getMessage()

 

十二:捕获异常时,首先要捕获小的范围的异常,在捕获大范围的异常

 

十三:还可以使用自定义异常

 

十四:重写方法抛出的异常应该与被重写的方法一模一样的异常或者不抛出异常

 

十五:当异常对象进入一个catch块中被处理后,不会继续向下执行,除非try catch位于循环当中时,才有可能导致多个catch块被执行

 

十六:try 块中生命的变量是代码块内部的局部变量,它只在try块内有效,catch块中不能访问该变量。

 

十七:异常捕获原则:所有父类异常的catch块都应该排在子类异常catch块的后面,否则将会出现变异错误。简称先处理小异常,再处理大异常

 

 

十八:常用辅助异常处理的函数:

              GetMessage()方法:返回该异常的详细描述字符串;

              printStackTrace():将该异常的跟踪栈信息输出到指定输出流;

              GetStackTrace():返回该异常的跟踪栈信息

 

十九:JAVA的垃圾回收机制不会回收任何物理资源,垃圾回收机制只能回收堆内存中所占用的对象的内存

 

二十:除非在try块或 catch块中调用了退出虚拟机的方法,否则不管在try块,catch块执行怎样的代码,出现怎样的情况,异常处理的finally块总会被执行,所以应该谨慎的在异常处理中使用推出虚拟机的方法,以防finally块得不到执行,使占用的资源得不到释放。

 

二十一:应该尽量在finally块中使用returnthrow等导致方法终止的语句,否则可能出现一些很奇怪的情况

 

 

二十三:很多时候,系统是否要抛出异常,可能需要根据应用的业务需求来决定,如果程序中的数据,执行与既定的业务需求不符,那么就是一种异常。这种由于与业务需求不符而产生的异常,必须由程序员决定抛出,系统无法抛出这中异常

 

二十四:用户自定义异常都应该继承Exception基类,如果希望自定义Runtime异常,则应该继承RuntimeException基类。定义异常类时通常需要提供两种构造器:一个是无参数的构造函数:另一个是带一个字符串的构造器,这个字符串将作为该异常对象的详细说明(也就是异常对象的getMessage方法的返回值)

 

二十五:实际应用中往往需要更复杂的处理方式;当一个异常出现时,单靠某个方法无法完成处理该异常,必须由几个方法协作才可完全处理该异常。也就是说,异常出现的当前方法中,程序对异常进行部分处理,还有些处理需要在该方法的调用者才能完成,所以应该再次抛出异常,这样就可以让该方法的调用者也能捕获到该


 二十六:swing->Layout->GroupLayout
 每个 Component 都必须同时存在于水平组和垂直组中,否则,在布局过程中或者在请求最小大小、首选大小或最大大小时,将抛出 IllegalStateException。


二十七.  Exception通常派生出RuntimeException和其他异常两类异常,划分两类异常的标准通常是:由于程序错误导致的异常属于RuntimeException;曾经能够运行,而由于某些情况(如I/O错误)导致的异常不属于RuntimeException。


二十八.  一条相对有道理的准则:如果出现RuntimeException,就一定是你的问题。


二十九.  RuntimeException类异常和Error类异常属于"未检查异常",其他的异常属于"检已查异常"。编译器将检查是否为所有的已检查提供了异常处理器。


三十.  如果类中的某个方法声明要抛出的异常是某个类的实例,那么,它就有可能抛出一个该类或者是该类子类的异常。


三十一.  通常应该捕获那些知道如何处理的异常,而将不知道如何处理的异常抛出去,将异常直接交给能胜任的处理器要比压制对它的处理要好的多。但该规则也有一个例外,如果编写一个覆盖超类的方法的方法,而该方法又没有抛出异常,那么就必须捕获该方法代码中出现的每一个已经查异常。

三十二.  不允许在子类的throws说明符中出现超过超类方法所列出的异常类范围。


三十三.  强烈建议独立使用try/catch和try/finally语句块,这样可以提高代码的清晰度。例如:
InputStream in = ...;
try
{
try
{
//code that might throw exceptions
}
finally
{
in.close();
}
}
catch(IOException e)
{
show error dialog
}
在内层的try语句块中只有一个职责,就是确保关闭输入流。在外层的try语句块也只有一个职责,就是保证报告出现的错误。这种解决方案不仅清楚,而且还具有一个功能,就是报告finally子句中出现的错误。


三十四.  当finally子句包含return语句时,将会出现一种意向不到的结果。假设利用return语句从try语句块中退出。在该方法返回之前,finally语句块中的内容将会被执行。如果finally语句块中也包含一个return语句,那么这个返回值将会掩盖原始的返回值。


三十五.  异常处理不能简单的测试。因此使用异常的基本规则便是只在异常情况下使用异常机制。
1.不要过分细化异常
2.利用异常的层次结构。将一种异常转化成一种更适合的异常是不要犹豫。
3.不要压制异常。
4.在检测错误时,"苛刻"要比放任好。
5.不要羞于传递异常。


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值