码迷,mamicode.com
首页 > 编程语言 > 详细

【Java】【异常】

时间:2018-02-08 12:22:54      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:分类   编译   用户   地方   处理异常   过程   runtime   检查   出现   

java2种方法处理异常
1、在发?异常的地方直接处理;
2、将异常抛给调用者,让调?者处理。
异常分类
1、检查性异常: java.lang.Exception
2、运?期异常: java.lang.RuntimeException
3、错误: java.lang.Error
顶层是java.lang.Throwable类,检查性异常、运?期异常、错误都是这个类的?孙类,
ja va . la n g. Exce pt i onja va . la n g. Error继承?ja va . la n g. Th rowa ble,?
java.lang.RuntimeException继承?java.lang.Exception
1、检查性异常:
程序正确,但因为外在的环境条件不满?引发。例如:用户错误及I/O问题--程序试图打
开?个并不存在的远程Socket端?,或者是打开不存在的文件时。这不是程序本身的逻辑
错误,?很可能是远程机器名字错误(?户拼写错误),对商?软件系统,程序开发者必须
考虑并处理这个问题。 java编译器强制要求处理这类异常,如果不捕获这类异常,程序将
不能被编译。
2、运行期异常:
这意味着程序存在bug,如数组越界、 0被除、入参不满足规范...这类异常需要更改程序
来避免, java编译器强制要求处理这类异常。
3、错误:
一般很少见,也很难通过程序解决,它可能源于程序的bug,但?般更可能源于环境问
题,如内存耗尽。错误在程序中?需处理,由运行环境处理。

 

 



/*
栗子 异常 try...catch

*/

import java.util.Random;

public class test_fanxing {
public static void main(String[] args){
int x = new Random().nextInt(5);
int y = new Random().nextInt(10);
int[] z = new int[5];
try{
System.out.println("x=" + x + "y=" + y + "y/x=" + (y/x));
System.out.println("y=" + y + "z[y]=" + z[y]);
}
catch(ArithmeticException exc1){
//分步捕获算术运算异常信息
System.out.println("算术运算异常:" + exc1.getMessage());
}
catch(ArrayIndexOutOfBoundsException exc2){
System.out.println("数组越界异常:" + exc2.getMessage());
}

}
}




2finally
如果把finally块置try...catch...语句后, finally块?般都会得到执?,它相当于?个
万能的保险,即使前?的try块发?异常,??没有对应异常的catch块, finally块将?上
执?。
以下情形, finally块将不会被执?:
1finally块中发?了异常;
2、程序所在的线程死亡;
3、在前?的代码中?了System.exit()
4、关闭CPU





/*
栗子 finally

*/


import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.Socket;


public class test_fanxing {
public static void main(String[] args) {
FileReader fr = null;
//检查异常
//1. 打开不存在的文件
try{
//fr = new FileReader("D:\\aa.txt");
//System.exit(-1);//使用System.exit()后finally语句块不再执行
Socket s = new Socket("192.168.956.1",21);
}
/* catch (FileNotFoundException e){
System.out.println("文件不存在:" + e.getMessage());//getMessage()不如printStackTrace()
//e.printStackTrace();//输出bug 信息
}*/

catch(IOException e2){
e2.printStackTrace();
}
finally {
//try.catch...语句块中不管出没出现异常,一般都会执行finally语句块
//一般说,把需要关闭的资源。如【文件】、【链接】、【内存】....
System.out.println("测试进入finally语句块");
if(fr!=null){
try{
fr.close();
}
catch (Exception e){
e.printStackTrace();
}
}
}

System.out.println("OK1");


}
}
/*
【结果】
文件不存在:D:\aa.txt (系统找不到指定的文件。)
测试进入finally语句块
OK1
2.如果把第一个catch注释掉
【结果】
java.net.UnknownHostException: 192.168.956.1
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at test_fanxing.main(test_fanxing.java:23)
测试进入finally语句块
OK1

*/









































































































 

【Java】【异常】

标签:分类   编译   用户   地方   处理异常   过程   runtime   检查   出现   

原文地址:https://www.cnblogs.com/suren2017/p/8430608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!