java不求有功,但求无过—异常处理
在程序开发中,错误往往有两种。一种是编译时出现的错误,该种错误比較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,可是我们不可能一个个的去处理这些小石子,由于工作过于繁杂。
总的来说,引入异常处理机制,能够方便我们开发者调试; 保证程序在出现异常情况下能正确运行,提高程序的健壮性 。
java不求有功,但求无过—异常处理的更多相关文章
- 第11章 Java异常与异常处理
1.Java异常简介 1.什么是异常异常出现的时候代码会无法正常运行下去,会产生各种问题2.捕捉异常的作用提早发现异常,方便查找问题,并给出解决方法3.Java中的异常1.Java中所有不正常的类都是 ...
- JAVA动手动脑异常处理
1>请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. import javax.swing.*; class AboutEx ...
- Java Socket常见异常处理 和 网络编程需要注意的问题
在java网络编程Socket通信中,通常会遇到以下异常情况: 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发 ...
- Java中实现异常处理的基础知识
Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...
- java 中的异常处理
一. 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误.本文主要讲授的是Java语言的异常处理.Java语言的异常处理框架, 是Java语言健壮性的一个重要体现. Java把 ...
- Java进阶02 异常处理
链接地址:http://www.cnblogs.com/vamei/archive/2013/04/09/3000894.html 作者:Vamei 出处:http://www.cnblogs.com ...
- 【转】Java中关于异常处理的十个最佳实践
原文地址:http://www.searchsoa.com.cn/showcontent_71960.htm 导读:异常处理是书写强健Java应用的一个重要部分,Java许你创建新的异常,并通过使用 ...
- java复习(6)---异常处理
JAVA异常处理知识点及可运行实例 接着复习java知识点,异常处理是工程中非常重要的. 1.处理异常语句: try{ .... }catch(Exception e){ ..... } finall ...
- java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类
package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...
- 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...
随机推荐
- phpexcel导入数据库 基于thinkphp3.2
public function studentImportExcel(){ if (!empty ( $_FILES)){ $upload = new \Think\Upload(); ...
- yii1.1.15 accessRules的一个小bug
public function accessRules() { return array( array( 'allow', 'actions'=>array('ajaxChangeImage', ...
- python【第十一篇】消息队列RabbitMQ、缓存数据库Redis
大纲 1.RabbitMQ 2.Redis 1.RabbitMQ消息队列 1.1 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议 ...
- gocode 安装
1.安装git,将git/bin添加至PATH 2.执行go get -u github.com/nsf/gocode 3.在%GOPATH%/bin/下会生成gocode.exe
- pip assert_source_matches_version(self)版本验证报错Source in %s has version %s, which satisfies requirement %s的解决方式
在win8.1下为了安装flask模块,开始安装pip,结果发生了上篇博客里面的错误ntpath join(path, *paths) 发生UnicodeDecodeError.解决之后继续发现版本验 ...
- Socket理解
简介 本文主要介绍的socket编程的实现相关的内容: 理论 函数 socket 用来创建socket描述符,它唯一标识一个socket int socket(int domain, int type ...
- window—BAT脚本
bat脚本注释方法: 1.:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符) 2.rem 注释内容(不能出现重定向符号和管道符号) 3.echo 注释内容(不能出现重定向符号和管道符号)〉 ...
- MVC自学系列之四(MVC模型-Models)
ASP.NET MVC 提供了一系列工具和特性去使用仅仅定义的对象模型.你可以坐下来好好思考你将要解决的问题,并且写好C#类,当你准备好时就可以使用MVC提供的工具去为每一个实体构建标准的index. ...
- 如何从 Xcode 控制台输出 JavaScript 的 log?
调试 UIWebView 中的 JavaScript 一直以来都是很痛苦的一件事.通常我们会通过下面的方法调试 HTML 和 JavaScript. 1.第一种,使用桌面浏览器调试.大多数现代浏览器都 ...
- 【POI2003/2004 stage I】
[原题在此] Let us consider a game on a rectangular board m x 1 consisting of m elementary squares number ...