总结JAVA异常处理和泛型

 

程序运行或编写过程中,发生的错误和异常是避免不了的情况,这些情况就组成了JAVA的一个异常体系。

那种Error错误的发生一般都JVM虚拟机出现了问题(AWT组件错误、输入输出流的错误、一般jar包冲突的依赖错误还有堆栈溢出,内存溢出造成的虚拟机错误)当程序发生错误,程序就会直接被中断,因此我们是无法解决掉这些Error。而对于异常的处理,JAVA程序中存在有直接的异常处理机制,很好的用来抛出异常、捕捉异常、处理掉异常。异常也有多种情况:IOExceptionIO异常(FileNotFoundException文件未找到,EOFException文件已结束)、RuntimeException运行异常()、ReflectiveOprationException检查异常。

在C#编程中就有接触到用try catch块来捕捉错误。JAVA中也一样,捕获异常使用try catch.Catch块中需要声明捕获异常类型。这样程序块出现异常,catch块就可以及时捕捉到。用运行异常中遇到数组索引越界异常来举例,最后输出的内容是通过在catch块中调用Exception类printStackTrace()方法追踪输出打印错误的地方。

 

使用Catch块捕获异常要从小到大的异常开始捕获,如果从大的开始,小异常就不会被检查抛出。Try catch使用捕捉编译中的异常即使很方便,它也是不能当做流程控制语句来使用,所以不能太过依赖异常使用。

上面例子是一个try后接一个catch的单个异常捕获,当然还存在有一个try代码块后有两个或多个Catch块的情况。它的意义在于当代码块中发生异常,异常类型与前面的catch块不匹配,就会继续往下被传递直到异常被正常捕获结束。拿文件读取流的编译代码为例,一个类型声明文件未找到,一个声明IO异常。

除了多重异常捕获,还有多异常捕获。在JAVA7以后就可以用一个catch进行多种类型异常的捕获。它的用法就是在Catch块声明异常类型时,使用|将多个类型的异常分隔开来。我们不能对由final修饰的异常变量进行重新赋值的操作。用RuntimeException运行异常中的几种异常情况来演示多异常捕获操作。

除了try catch块来捕获抛出异常,throws和throw两个关键字也可声明抛出异常。其实throws我们有经常用到,在主方法的最后throws抛出异常。Eg: public static void main(String[] args) throws IOException 。一个方法用throws抛出多个异常,类似多异常,不过这里用逗号分隔声明的异常类型。

在当前方法不知道如何处理这种类型的异常,该异常应该由上级调用者处理;如果main方法也不知道如何处理这种类型的异常,也可以 使用throws声明抛出异常,该异常将交给JVM处理。JVM对异常的处理方法是,打印异常的跟踪栈信息,并中止程序运行。改编一下上面例子的异常抛出形式。

throw关键字,用来在程序中自行抛出异常。throw一次只能抛出一个异常,并且它抛出的是异常实例不是异常类,可以单独使用Throw语句。

 

JAVA的Exception异常情况不只有RuntimeException, CheckException.还有用户自己在编写程序过程中通过继承Exception类或RuntimeException类来自定义异常。定义异常类时通常需要提供两个构造器:一个是无参数的 构造器;另一个是带个字符串参数的构造器,这个字符串将作为该异常对象的描述信 息(也就是异常对象的getMessage()方法的返回值)。

 

泛型这一概念,在前面c#的学习中就有泛型这一字眼的出现,C#中我们知道能使类型参数化的声明方式。然后在类实例化时再提供具体的真实数据类型称作泛型。在JAVA中我觉得定义也差不多,作为在Java  se1.5以后出现的特性,泛型的出现使操作的数据类型被参数化类型,简单地说就是让泛型指定的不同类型来控制形参具体限制的类型。在创建方法,类,接口的过程中有使用到参数类型的称作泛型方法,泛型类和泛型接口。泛型对程序的编译过程中提供了检测类型是否安全的机制,帮我们检测到编程过程中的那些非法类型。泛型有它的泛型方法和类,它们在使用过程中都支持在一个方法中指定一组相关的方法,在一个类中指定一组相关的类。

泛型方法是对对象数组排序,然后再调用这个泛型方法对不同参数类型的数组进行排序的操作。定义泛型方法的时候,它的类型参数声明变量写在方法返回类型之前用符号<>隔开:public static<F> void printArray(F[] inputArray)。泛型参数也称类型变量,用作泛型类型名称标识符。在方法体中声明的类型参数需要用到包装类,而不是原来自身基本的数据类型。

 

对泛型类的印象我们可以结合Collection集合框架:List,Set,Map来理解。泛型的类型参数也只能是包装类,传入的参数类型要和泛型的类型参数类型保持一致。泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值