在程序开发中,错误往往有两种。一种是编译时出现的错误,该种错误比較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不求有功,但求无过—异常处理的更多相关文章

  1. 第11章 Java异常与异常处理

    1.Java异常简介 1.什么是异常异常出现的时候代码会无法正常运行下去,会产生各种问题2.捕捉异常的作用提早发现异常,方便查找问题,并给出解决方法3.Java中的异常1.Java中所有不正常的类都是 ...

  2. JAVA动手动脑异常处理

    1>请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. import javax.swing.*; class AboutEx ...

  3. Java Socket常见异常处理 和 网络编程需要注意的问题

    在java网络编程Socket通信中,通常会遇到以下异常情况: 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发 ...

  4. Java中实现异常处理的基础知识

    Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...

  5. java 中的异常处理

    一. 异常的概念和Java异常体系结构  异常是程序运行过程中出现的错误.本文主要讲授的是Java语言的异常处理.Java语言的异常处理框架,     是Java语言健壮性的一个重要体现. Java把 ...

  6. Java进阶02 异常处理

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/09/3000894.html 作者:Vamei 出处:http://www.cnblogs.com ...

  7. 【转】Java中关于异常处理的十个最佳实践

    原文地址:http://www.searchsoa.com.cn/showcontent_71960.htm 导读:异常处理是书写强健Java应用的一个重要部分,Java许你创建新的异常,并通过使用 ...

  8. java复习(6)---异常处理

    JAVA异常处理知识点及可运行实例 接着复习java知识点,异常处理是工程中非常重要的. 1.处理异常语句: try{ .... }catch(Exception e){ ..... } finall ...

  9. java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类

    package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...

  10. 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架

    前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...

随机推荐

  1. 精通 Oracle+Python,第 3 部分:数据解析

    进行数据解析的理由不计其数,相关的工具和技巧也同样如此.但是,当您需要用这些数据做一些新的事情时,即使有“合适的”工具可能也是不够的.这一担心对于异类数据源的集成同样存在.用来做这项工作的合适工具迟早 ...

  2. Global & Local Variable in Python

    Following code explain how 'global' works in the distinction of global variable and local variable. ...

  3. sourceInsight的技巧

    在用sourceInsight看代码...在这里积累技巧,慢慢积累吧 1.如何高亮显示所有要搜的东西,例如 1.aaaaaa 2. bbbbbbbbaaaaaaa 3. ccccccc 4. aaaa ...

  4. String和bytes的编码转换

    import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; /** * @author 作者 E-mai ...

  5. vim配置-程序员【转】

    Ubuntu11.10的vim升级后,版本为vi Improved 7.3.154功能很强大了.不过,程序员要根据自己的习惯配置好vimrc文件,是vim更加得心应手. 注:一般用户在自己的当前目录下 ...

  6. MacOS快捷键

  7. Count Good Substrings

    Codeforces Round #258 (Div. 2) D:http://codeforces.com/problemset/problem/451/D 题意:给你一个字符串,只有ab组成.相同 ...

  8. 算术编码JM实现

    h.264标准中,CABAC的算术编码部分(9.3.4)只是一个参考,实际编码器中并不一定会按照它来实现,像JM中就有自己的算术编码实现方案. 在上篇文章CABAC中有详细的算术编码描述,在了解算术编 ...

  9. python2.7中使用mysql (windows XP)

    一.首先下载mysql—python模块,下载完毕之后会有一个MySQL-python-1.2.3.win32-py2.7.exe文件,点击安装一路next,ok. 二.编辑配置文件(setting. ...

  10. DD-WRT相关资源

    版本网站下载:Other Downloads,进入betas->2014 FTP下载:如ftp://ftp.dd-wrt.com/betas/2014/06-23-2014-r24461/ Re ...