java异常详解2
来源:互联网 发布:淘宝神经猫 编辑:程序博客网 时间:2024/06/07 14:56
sun提供了很多的异常类给我们用于描述程序中各种的不正常情况,但是sun 给我
提供异常类还不足以描述我们现实生活中所有不正常情况,那么这时候我们就需要自定义异常类。
需求: 模拟feiQ上线的时候,如果没有插上网线,那么就抛出一个没有插上网线的异常,
如果已经插上了网上,那么就正常显示好友列表。
自定义异常类
自定义异常类的步骤: 自定义一个类继承Exception即可。//自定义了一个没有网线的异常类了。class NoIpException extends Exception{public NoIpException(String message){super(message); //调用了Exception一个参数的构造函数。}}class Demo2 {public static void main(String[] args) {String ip = "192.168.10.100";ip = null;try{feiQ(ip); // 如果调用了一个声明抛出异常类型的方法,那么调用者必须要处理。}catch(NoIpException e){e.printStackTrace();System.out.println("马上插上网线!");}}public static void feiQ(String ip) throws NoIpException{if(ip==null){throw new NoIpException("没有插网线啊,小白!");}System.out.println("正常显示好友列表..");}}
运行结果
异常体系:
--------| Throwable 所有错误或者异常的父类--------------| Error(错误)
--------------| Exception(异常) 异常一般都通过代码处理
------------------| 运行时异常: 如果一个方法内部抛出了一个运行时异常,那么方法上 可以声明也可以不 声明,调用者可以以处理也可以不处理。
------------------| 编译时异常(非运行时异常、受检异常): 如果一个方法内部抛出了一个编译时异常对象,那么方法上就必须要声明,而且调用者也必须要处理。
运行时异常: RuntimeException以及RuntimeException子类 都是属于运行时异常。
编译时异常: 除了运行时异常就是编译异常。
疑问: 为什么java编译器会如此严格要求编译时异常,对运行时异常如此宽松?
运行时异常都是可以通过程序员良好的编程习惯去避免,所以java编译器就没有严格要求处理运行时异常。
finally 块;
finally块的 使用前提是必须要存在try块才能使用。finally块的代码在任何情况下都会执行的,除了jvm退出的情况。
finally非常适合做资源释放的工作,这样子可以保证资源文件在任何情况下都 会被释放。
try块的三种组合方式:
第一种: 比较适用于有异常要处理,但是没有资源要释放的。
try{
可能发生异常的代码
}catch(捕获的异常类型 变量名){
处理异常的代码
}
第二种:比较适用于既有异常要处理又要释放资源的代码。
try{
可能发生异常的代码
}catch(捕获的异常类型 变量名){
处理异常的代码
}finally{
释放资源的代码;
}
第三种: 比较适用于内部抛出的是运行时异常,并且有资源要被释放。
try{
可能发生异常的代码
}finally{
释放资源的代码;
}
class Demo5 {public static void main(String[] args) {//System.out.println("Hello World!");div(4,2);}public static void div(int a, int b){try{if(b==0){System.exit(0);//退出jvm}int c = a/b;System.out.println("c="+ c);}catch(Exception e){System.out.println("出了除数为0的异常...");throw e;}finally{System.out.println("finall块的代码执行了..");}}}以上情况只有退出JVM时,finally才不执行
finally释放资源示例
/*fianlly释放资源的代码*/import java.io.*;class Demo6 {public static void main(String[] args) {FileReader fileReader = null;try{//找到目标文件File file = new File("f:\\a.txt");//建立程序与文件的数据通道fileReader = new FileReader(file);//读取文件char[] buf = new char[1024];int length = 0; length = fileReader.read(buf);System.out.println("读取到的内容:"+ new String(buf,0,length));}catch(IOException e){System.out.println("读取资源文件失败....");}finally{try{//关闭资源fileReader.close();System.out.println("释放资源文件成功....");}catch(IOException e){System.out.println("释放资源文件失败....");}}}}如果文件不存在则抛异常
存在则通过finally释放,同时检测是否释放成功
0 0
- java异常详解2
- java异常处理详解
- java常见异常详解
- Java异常处理详解
- 【转载】Java异常详解
- Java异常详解
- java异常的详解
- java中的异常详解
- Java异常详解
- java中的异常详解
- java(22) - 异常详解
- java异常详解
- Java中异常详解
- java中异常详解
- JAVA 异常机制详解
- java异常详解
- Java中的异常详解
- java-异常详解
- 工作地址收藏夹
- 事件
- Android Studio 快速跳转到XML布局界面
- 交换两个变量的值,不使用第三个变量的方法
- java学习笔记(六)之匿名内部类
- java异常详解2
- shopping(多次spfa求局部最短路)
- poj2739(尺取模型)
- Codeforces Round #378 (Div. 2) C. Epidemic in Monstropolis 贪心+构造
- Swift 3.0 UIAlertController的使用
- 欢迎使用CSDN-markdown编辑器
- Java8 Lambda表达式教程
- 反射的简单应用2
- redis集群实现(三)集群删除节点