Exception

来源:互联网 发布:linux当前文件路径 编辑:程序博客网 时间:2024/06/01 07:37
import javax.naming.AuthenticationException;/*2017-02-20 14:14:02异常机制可以使程序中的异常处理代码和正常的业务代码分离,保证代码的优雅,提高程序的健壮性trycatchfianllythrowthrowstry {可能引发异常的代码} catch (异常类型 e) {处理异常的代码}finally {回收try打开的物理支援总会被执行}throw  抛出实际的异常    可以作为单独的语句使用,抛出一个具体的异常对象throws  在方法签名中使用用于声明该方法可以能抛出异常catch块可以捕获多种类型的异常时在异常之间是用   |   隔开捕获多种类型的异常时,异常变量有隐式的final修饰,因此程序不能对异常变量重新赋值 获取异常信息getMessage 返回该异常的详细描述字符串printStackTrace 将该异常的跟踪栈细信息输出到标准错误输出printStackTrace( PrintStream s) 将异常的跟踪栈信息输出到指定输出流getStackTrace返回该异常的跟踪栈信息*//*2017-02-20 15:20:51使用throw声明抛出异常当前方法不知道该如何处理这种类型的异常,该异常应该有上一级调用者处理如果main方法也不知道如何处理这种类型的异常,也可以使用throws声明抛出异常将该异常抛给jvm处理则jvm 处理方法打印异常的跟踪栈信息终止程序运行throws 声明抛出的语法格式仅跟在方法签名之后一旦是用throws抛出异常程序就无须捕获异常了throws声明抛出异常时有一个限制,就是方法重写时,子类方法声明抛出的异常类型应该是父类方法声明抛出的异常类型的子类或者相同子类方法声明抛出的异常不允许比父类方法声明抛出的异常多Checked异常,java要求必须显示捕获并处理该异常,或者显示抛出该异常,增加了编程的复杂度如果方法中显示声明了抛出Checked异常,将会导致方法签名与异常耦合,如果该方法是重写父类的方法,则该方法抛出的异常还会受到被重写方法所抛出异常的限制大部分时候推荐使用Runtime异常,而不使用Checked异常*//*2017-02-20 15:21:37java把所有的非正常情况分为--异常Exception--错误Error它们都继承Throwable 父类Error错误一般是虚拟机相关的问题,系统崩溃、虚拟机错误、动态链接失败等这种错误无法恢复或不可能捕获导致程序中断程序无法处理这些错误常见的异常IndexOutOfBoundsExceptionNumberFormatExceptionArithmeticException 除0异常NullPointerException处理异常时应该先处理小的异常,再处理大的异常*//*2017-02-20 15:22:08fianlly 回收资源java回收机制不会回收任何物理资源,垃圾回收机制只能回收堆内存中对象所占用的内存不管try块中的代码是否出现异常,fianlly块总会被执行finally 块中使用 return 或throw 等  导致方法终止将会导致try  catch 块中的return 、throw语句失效finally块中也包含了一个完整的异常处理流程这种在try块、catch块 、 finally 块中包含完整的异常处理流程的情形被称为异常处理的嵌套异常处理流程代码可以放在任何能放 可执行性代码的地方,因此完整的异常处理流程既可以放在try块,也可以放在catch块,还可以放在finally块try 关键字后紧跟一对圆括号,可以声明、初始化一个或多个资源此处的资源指的是那些必须在程序结束时显示关闭的资源try为了可以正常关闭资源,这些资源实现类必须实现 AutoCloseable 或 Closeable 接口   中的close 方法自动关闭资源的try语句相当于隐式的finally *//*2017-02-20 15:23:08异常 --Checked异常都是可以在编译阶段被处理的异常,强制程序处理所有的Checked异常--Runtime异常运行时异常所有的RuntimeException类及其子类的实例被称为Runtime异常不是RuntimeException类及其子类的异常实例则被称为Checked异常java认为Checked异常都是可以被处理、修复的异常,所以必须显示处理Checked异常如果程序没有显示处理Checked异常,该程序在编译时就会发生错误,无法通过编译Checked 异常处理的方式--当前方法明确知道异常该如何处理异常,程序应该使用try...catch块开捕获该异常,然后对应的catch块中修复该异常--当前放啊不知道如何处理这种异常,应该在定义该方法是声明抛出该异常Runtime异常则更加灵活,无序显示声明抛出,程序需要捕获Runtime异常也可以使用try...catch块来实现没有完善错误处理的代码根本就不会被执行try块的业务逻辑代码出现异常,系统自动生成一个异常对象,该异常对象被提交给java运行时环境,这个过程被称为抛出throw异常java运行时环境受到异常对象时,会寻找处理该异常对象的catch块。找到合适的catch块,就把该异常对象交给catch块处理,这个过程称为捕获catch异常找不到捕获异常的catch块,则程序运行时环境终止,java程序退出只要程序执行错误的代码块,系统总会自动生成一个异常对象程序没有为这段代码块定义任何的catch块则java运行时无法找到处理该异常的catch块程序就在此退出*//*2017-02-20 15:43:44使用throw抛出异常系统自动抛出异常,自行抛出异常使用throw语句来完成系统是否抛出异常,可能需要根据应用的业务需求来决定程序中的数据、执行与既定业务需求不符,这就是异常由于与业务需求不符合而产生的异常,必须由程序员来决定抛出,系统无法抛出这种异常程序中自行抛出的异常,则应该使用throw语句throw语句可以单独使用throw抛出的不是异常类,而是一个异常实例每次只能抛出一个异常实例throw ExceptionInstance;当java运行时接受到开发者自行抛出的异常时,同样会终止当前的执行流,跳到该异常对应的catch块,有该该catch块来处理该异常不管是系统自动抛出的异常,还是程序员手动抛出的异常,java运行时环境对异常的处理没有任何差别throw语句抛出的异常是Checked 异常,该throw语句要么处于try块,显示捕获该异常要么放在一个带有throws声明抛出的方法中,把该异常交给该方法的调用者处理throw语句抛出的异常时Runtime异常,则该语句无需放在try块中,也无需放在throws声明抛出的方法中程序可以显式使用try...catch  来捕获异常,也可以完全不理会该异常,把异常交给该方法调用者*//*2017-02-20 15:59:26自定义异常用户自定义异常都应该继承Exception 基类自定义Runtime异常,则应该继承RuntimeException基类定义异常类通常需要提供两个构造器--无参构造器--有参构造器该字符串参数作为该异常对象的描述信息,也就是异常对象的getMessage()*//*2017-02-20 16:07:35catch throw 同时使用处理的两种方式在出现异常的方法内捕获并处理,在方法签名中声明抛出该异常异常处理分为应用后台需要通过日志记录异常发生的详细情况应用还需要根据异常向应用使用者传达某种提示*//*2017-02-20 16:13:13捕获一个异常然后接着抛出另一个异常,并把原始的异常信息保存下来是一种典型的链式处理 也被称为异常链, 职责链设计模式*//*2017-02-20 16:14:58异常对象的printStackTrace 方法用于打印异常的跟踪栈信息根据printSrackTrace,开发者可以找到异常的源头异常处理规则使用程序代码混乱最小化捕获并保留诊断信息通知合适的人员采用合适的方式结束异常活动*//*2017-02-20 16:25:10不要过度使用异常--把异常和普通错误混淆在一次,不在编写任何错误处理代码,而是简单地抛出异常来代替所有的错误处理--使用异常处理来代替流程控制对于完全已知的错误,应该编写处理这种错误的代码对于普通错误,应该编写处理这种错误的代码只有对外部的、不能确定和预知的运行时错误才使用异常异常只应该用于处理非正常的情况,不要使用异常处理来代替正常的流程控制对于一些完全可知,而且处理方式清楚的错误,程序应该提供相应的错误处理代码,而不是将其笼统的称为异常*//*2017-02-20 16:25:22不要使用过于庞大的try块try块里放置的大量的代码,业务过于庞大,业务过于复杂,就会造成try中出现异常的可能性大大增加倒追分析异常原因的难度也大大增加在后面的catch中难以针对不同的异常提供不同的处理逻辑应该分割整多个可能出现的异常段落,放在单独的try块中,并分别捕获*//*2017-02-20 17:46:43避免使用Catch All语句Catch All 是一种异常捕获模块,可以处理所有可能的异常所有的异常都采用相同的处理方式,导致无法对不同的异常分类处理,这种捕获方式可能将程序中的错误、runtime 异常等可能出现的导致程序终止的乘客全部捕获到从而压制了异常同时关键的异常也会被 忽略*//*2017-02-20 17:50:14不要忽略捕获到的异常对于已经捕获的异常,catch需要处理并修复这个错误,catch 不能为空处理异常,对异常进行合适的修复,然后绕过执行,或者友好提示等,Checked 异常应该尽量的修复重新抛出异常,抛给上层的调用者在核实的层处理异常*/class myException extends Exception{public myException() {}public myException (String string) {super(string);  //调用父类的构造器 获得异常对象的详细描述信息}}//自定义运行时异常class myRuntime extends RuntimeException{public myRuntime() {}public myRuntime(String message) {super(message);}}public class Exceptionj {public static void main(String[] args) {String string  = "sadf";System.out.println(string.length());String[] string2 = {"s","a","d"};System.out.println(string2.length);System.out.println(Math.pow(2,16));}}

0 0
原创粉丝点击