博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java不求有功,但求无过—异常处理
阅读量:7255 次
发布时间:2019-06-29

本文共 2597 字,大约阅读时间需要 8 分钟。

   在程序开发中,错误往往有两种。一种是编译时出现的错误,该种错误比較easy发现。还有一种是执行时出现的错误,该种错误是开发者比較头疼的。异常就是一个执行时的错误,比如,除数为0 ,数组越界等。 

   异常处理,就是我们定义一个代码段(可能出错的代码段)来捕获和处理异常。 这样当异常情况发生时,一个代表该异常的对象会被创建,并在产生异常的方法中被引发。该方法能够选择自己处理异常,也能够抛出该异常,但不管是哪种,终于异常都会被处理。  

比例如以下面的代码:

import java.io.*;public class TestEx{	public static void main(String[] args){		int[] arr= {1,2,3};		System.out.println(arr[2]);		try{			System.out.println(2/0);		} catch(ArithmeticException ae){			System.out.println("系统正在维护,请稍候!");			ae.printStackTrace();//错误的堆栈信息		}	}}
   当中 
System.out.println(2/0); 则是我们可能出现错误的代码段。
Catch 中我们自定义异常出错的对象,即ae ,一旦出现错误就被初始化。

   System.out.println("系统正在维护,请稍候!");

   ae.printStackTrace();

则是我们对捕获到的异常做出的处理 。

异常的分类 :

如上图,Throwable 是全部异常的父类。  在它之下有两个子类,Error和Exception。

   Error: 是指系统错误,比如虚拟机错误,不能被处理。 

   Exception: 可以处理的异常 

   RuntimeException:能处理但不处理,比如除数为0 ; 数组下标越界
   java异常处理keyword

   Try:意思就是试试它包括的代码段中是否会发生异常。

   catch:捕捉的意思,就是有异常发生时进行捕获,并进行对应的处理。 
       Try 和catch的关系能够是1对1 ,也能够是多对多 ;catch的出现必须有try。
   Finally:因为try块中代码段出现异常时,不被运行。可是有时候我们希望不管异常是否发生,某段代码都被运行,比如释放分配中的资源时。

FileInputString in = null;        try{                in = new FileInputStream("myfile.txt");                int b;                 b = in.read();                while (b !=-1){                        System.out.println((char) b);                        b = in.read();                }                        }catch (FileNotFoundException e){                        System.out.println(e.getMessage());                        }finally{                        try {                        in.close();                                        } catch(IOException e){                                        e.printStackTrace();                }        }

   getMessage和printStackTrace两个方法用于输出异常信息。 前者用于获得异常信息的字符串,后者能够将方法调用堆栈中的打印信息出来,方便程序猿測试。 

   使用自己定义的异常

private int getTotalRecords(Connection conn)throws SQLException	{		String sql = "select count(*) from t_user where user_id <> 'root'";		PreparedStatement pstmt = null; 				ResultSet rs = null;			int count = 0;		try{			pstmt =conn.prepareStatement(sql);			rs = pstmt.executeQuery();			rs.next();			count = rs.getInt(1);		}finally{			DBUtil.close(rs);			DBUtil.close(pstmt);		}		return count;	}}
   说明:
定义一个getTotalRecords 的方法,并用throws语句说明能够跑出用户自己定义的异常类SQLException。 
throws是用来声明一个方法可能抛出的全部异常信息

throw则是指抛出的一个详细的异常类型。

   通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个详细的异常信息。

   总结:人生道路不可能是那么的一帆风顺的。就好像你开车去旅行的时候,也许你会碰到你车子哪个零部件坏了,引发了Error异常。也也许是前面有大石头挡着你的去路,引发了 Exception异常。遇到这样的情况,你有两种选择,一是你自己找个大的木棍把它撬走。二是打电话交给管理道路的人员处理。可是事实上你在旅行的道路中,还会遇到非常多非常多的小石子,这就相当于是RuntimeException,可是我们不可能一个个的去处理这些小石子,由于工作过于繁杂。

   总的来说,引入异常处理机制,能够方便我们开发者调试; 保证程序在出现异常情况下能正确运行,提高程序的健壮性 。

你可能感兴趣的文章
bzoj4367-[IOI2014]holiday假期
查看>>
JNI的调试_从java代码连调到C/C++
查看>>
centos忘了root用户密码
查看>>
在Visual Studio中使用.lib和.dll的环境搭建
查看>>
form表单的button
查看>>
正则表达式(更新中。。。)
查看>>
2017年终总结
查看>>
问题账户需求分析
查看>>
Notepad++ 配置信息导出导入(快捷键配置导出导入等等)
查看>>
adb命令--之查看进程及Kill进程
查看>>
AI - H2O - 第一个示例
查看>>
schedule调用相关整理
查看>>
[HDU6155]Subsequence Count
查看>>
Javascript 实现简单计算器实例代码
查看>>
数论概论(Joseph H.Silverman) 定理39.1 连分数的递归公式
查看>>
将对象相同属于赋值于另一个对象
查看>>
技术人,你的简历够技术么?
查看>>
C#设计模式:适配器模式(Adapter Pattern)
查看>>
linux中jdk的安装
查看>>
.Net事件机制
查看>>