Java中的泛型与异常机制

Java中的泛型与异常机制

※泛型的使用
如果在使用集合时没有限定集合所保存的数据类型,则在代码运行期间容易会出现ClassCastException类转换的异常
通过设置泛型,可以在编译期间发生问题。
泛型可以在类、接口、方法中进行定义
※–泛型的作用

(类和接口定义泛型的道理是一样的)
–在类中使用泛型
举例:
快递员送快递的操作,如果是冷链商品则让运算食物的快递员进行运送,否则是默认普通运送员配送

–在接口中使用泛型
举例:
定义飞机的接口,提供两个方法,如果是军用飞机则运送武器,如果是民用客机则运送乘客

※–泛型的通配符
举例:
//1、?代表是所有泛型的父类,也就是一个通配符
//2、可以实现遍历、但是不能添加明确的数据类型、除了null可以

※–泛型通配符的上边界
–泛型继承了某个类型
? extends Class
举例:
定义画布类、画布中有方法可以画出某个多边形,比如有圆形、长方形
–drawAll(List<多边形> list);//遍历多边形的集合,调用多边形的draw()进行画画

多边形(抽象类)
–draw(画布);输出当前多边形的对象

实现步骤
//-1、分别创建画布类、多边形的抽象类、圆形、长方形
//-2、定义多边形的描绘图案的方法,分别在子类圆形和长方形中实现抽象方法
//-3、画布类中定义描绘所有图案的方法、遍历集合、调用描绘方法,入参当前的画布对象
//-4、编写测试代码
//给画布描绘多个图案
//1、创建画布的对象
//2、提供图案的集合 (多个多边形) 圆形图案的集合
//通过调用类的构造器来创建对象,并且初始化成员变量(半径)
//3、通过画布调用描绘所有多边形的方法进行描绘

水果
–补充营养();输出当前水果的补充养分

限定场景,熊只吃浆果类的水果

实现步骤
//-1、分别创建动物类、熊类、水果类、树莓、橡果
//-2、定义水果中的补充营养的方法,分别在子类苹果和橙子中重写方法
//-3、动物类中定义吃水果的方法、遍历水果的集合、调用水果中的补充营养的方法
//-4、编写测试代码
//熊吃浆果类的水果
//1、创建熊的对象
//2、提供浆果类水果的集合 (多个浆果的对象)
//通过调用类的构造器来创建对象,并且初始
//3、通过熊调用吃水果的方法进行补充营养

※–泛型通配符的下边界
–泛型被某个类型所继承(某个类型的父类)
? super Class
要求入参的类型必须为熊类或其父类
? super Bear { Object \ Animal \ Bear}
举例:
定义算术运算类、其中可以定义多个算术运算的操作
比如:
–add(List<数值类型> list);//实现多个数的相加
–subtract(List<数值类型> list);//实现多个数的相减
要求:入参的数值类型必须为Integer的本类或其父类的对象

实现步骤
//-1、分别创建算术运算类MathCountting
//-2、定义add方法,数据相加操作方法
//-3、定义subtract方法、数据相减操作方法
//-4、编写测试代码
//通过算术运算类对某一系列的数值进行运算
//1、创建算术运算类的对象
//2、提供对应类型数值的集合
//3、通过算术运算的方法进行运算

总结:泛型无非就是用限定类型、上限(是某个类的子类)和下限(是某个类的父类)

–泛型的擦除
举例:

–由于泛型的擦除,导致原来的泛型丢失,在编译期间没有办法发现类型限定或者类型转换的问题,有可能在运行时出现ClassCastException异常
–泛型的应用
举例:
JDBC中的模块设计

※异常机制的使用
什么是异常机制 ?
一般来说,高级一点的编程语言,如Java, Php,javascript, c#它们都具备一套用来处理, 在程序的运作过程中监视与捕获突发的各种异常的机制,可允许在相应的代码当中编写相应的补救措施/处理办法。
※–使用try…catch捕抓异常
举例:

–异常的体系架构
举例:

–错误:

–异常:
可以通过trycatch进行捕抓,或者使用throw进行异常的抛出
try{
}catch(异常类型 e){
}

–Checked异常和RumTime异常
举例:
Checked异常为检查时异常,需要在编译期间进行异常的处理,比如SQLException\IOException
RumTime异常为运行时异常,在运行期间会出现,程序员可以在程序中预先进行异常的捕抓和处理、比如:NullPointerException。。。

※–多异常的捕抓
举例:
try{
}catch(异常类型1 e){
}
catch(异常类型2 e){
}

–访问异常类的信息
举例:
//打印异常栈踪迹
e.printStackTrace();
//打印异常的信息message
System.out.println(e.getMessage());
//返回异常跟踪栈的对象数组【异常链、异常来源线索】
e.getStackTrace();

※–finally语句块
–finally和trycatch一起使用的
–不管trycatch中是否有出现异常都会执行finally中的代码
–finally会影响方法的返回值、finally中如果有return语句,则trycatch中的return就不起作用,最终还是返回finally中的数据
finally的作用 JDBC数据库操作 或者 IO流等操作中 进行资源关闭

※–使用throws声明异常
–在方法中声明方法所有抛出的异常,用于声明异常类型(将异常往上抛,不处理异常)

※–使用throw抛出异常
–抛出异常的关键字,用于抛出异常

–trycatch是捕抓并处理异常
–throws只是声明异常和将异常往上抛,不处理异常
–throw是抛出异常

※异常链是异常出现的跟踪栈信息,里面包含了方法的调用关系和原始抛出异常的位置

※–自定义异常类
–自定义一个类,继承Exception,然后提供构造器初始化异常信息

举例:
Person【name\sex\age】
当给age进行赋值时,不能超过一定的数值范围,否则就抛出一个自定义的AgeOutOfRangeException
//1、定义Person类
//2、定义setAge方法,声明异常

–异常类处理规则
–不要过度使用异常(要正确使用),在需要进行异常捕抓或者定义时使用
–不要使用过大trycatch块
–避免使用捕抓所有异常的操作
–不要忽略捕抓到的异常,一定有具体的处理操作

猜你喜欢

转载自blog.csdn.net/weixin_44431672/article/details/114410129