java中异常处理try~catch~finally介绍

1.异常:
1.1:错误和异常是两个概念:错误是需要避免的,而异常是你能预见到的并且能掌控的了

1.2:处理异常:用try。。。catch。。。finally
用throw,就得用throws来修饰方法名
public void sayHello() throws Exception{}这样写,如果在别的方法
中想要调用这个方法,要么用try。。catch捕获异常,要么throws
Exception交给下一个用它的方法。
1.3:try{如果这里面的语句出现错误,那么将不执行下一句,直接跳转到catch语句当中}
1.4:finally当中的语句不管怎样都会执行。就算try中和catch用return返回了,那
finally也会照样执行。
1.5:throw和throws的区别:throw:抛出异常对象。throws:修饰方法的声明。
1.6: 一个try可以跟多个catch,因为try里面的代码可能会出现许多的错误,错误的种类
或者类型是不相同的,所以可以跟多个,但是找到对应的,下面的catch就不会执行
了,就会跳出try。。catch。
1.7: 异常一般分为两大类:检查的:Exception和不检查的或者叫运行时的:
RuntimeException,这个可以不去管。
1.8: 自定义异常类:继承自Exception得类就叫做自定义异常类。

 代码如下 复制代码
public class myException extends Exception{
public void printstrackance(){
}
}

1.9:
三种方法处理异常:系统自动处理,使用try~catch~finally语句,throw语句直接抛
出异常或使用throws语句间接抛出异常

5、示例

下面是示例:TestServlet 调用TestDB和TestPsi,(附代码)如果发生异常怎样最快解决程序发生的异常错误。

在整个项目的开发过程中,指定错误代码表,并分类。如PSI类,数据库异常类代码,应用异常类代码,XML异常,网络通讯异常等等;

采用自己的异常类,当遇到异常是,激发的异常携带错误类或异常方法的路径:

如:setFlag(“PSI001”);

 代码如下 复制代码

throw new WhcaException(“JB:TestA M:exe1 ”+e.getMessage);

这里:PSI001为错误代码,“JB:TestA M:exe1”为异常链,e.getMessage为异常信息。

例如:遇到错误信息列表为:JB:TestB M:exe2 JB:TestA M:exe1 java.sql.SQLException,说明TestB 的方法exe2调用TestA的方法exe1发生了操作数据库异常。则可以迅速,准确的定位到那个类那个方法发生了异常。

 注:(简写)JB:JavaBean M:Method

访问数据库类

 代码如下 复制代码

//Class: TestDB

package corbaidl;

/**

 * Title:

 * Description:

 * Copyright:    Copyright (c) 2000

 * Company:

 * @author

 * @version 1.0

 */

import java.io.*;

import java.sql.*;

import whca.common.WhcaException;

public class TestDB {

  private PreparedStatement pstmt =null;

  private Connection conn = null;

  private String flag;

  public TestDB() {

  }

  public void CreateSysMan() throws WhcaException{

    try {

      /**@todo: CreateSysMan method*/

    }

    catch (Exception ex) {

      setFlag("ORA004");

      throw new WhcaException("JB:TestDB M:CreateSysMan ERR="+ex.getMessage());

    }

    finally {

      cleanUpAll();

    }

  }

  public void PublishCert() throws WhcaException{

    try {

      /**@todo: PublishCert method*/

    }

    catch (Exception ex) {

      setFlag("ORA005");

      throw new WhcaException("JB:TestDB M:PublishCert ERR="+ex.getMessage());

    }

    finally {

      cleanUpAll();

    }

  }

  public void cleanUpAll() throws WhcaException {

      try {

          if (pstmt != null)

              pstmt.close();

          if (conn != null)

              conn.close();

      } catch (Exception e) {

          throw new WhcaException("JB:RootCaDB M:cleanUpAll Exception" + e.getMessage());

      }

  }

  public void setFlag(String flag) {

    this.flag = flag;

  }

  public String getFlag() {

    return flag;

  }

}

Psi调用公共类
//Class: TestPsi

package corbaidl;

 

/**

 * Title:

 * Description:

 * Copyright:    Copyright (c) 2000

 * Company:

 * @author

 * @version 1.0

 */

import psi.*;

import whca.common.WhcaException;

public class TestPsi {

  private PSIJni psijni;

  private String flag;

  private int exeHandle=0;

  public TestPsi() {

  }

  public int exePsiInit() throws WhcaException {

          try {

                  //Step 1:psijni init

                  int ret;

                  int handle;

                  psijni = new PSIJni();

                  ret = psijni.pkiInit();

                  if (ret != 0) {

                          setFlag("PSI001");

                          throw new WhcaException("Initialize library environment failed!");

                  }

 

                  //Step 2:psijni getHandle

                  handle = psijni.getHandle();

                  if (handle < 0) {

                          setFlag("PSI002");

                          throw new WhcaException("Get handle error");

                  }

                  return handle;

          } catch (Exception ex) {

                  throw new WhcaException(ex.getMessage());

          }

  }

  public void exePsiEnd(int handle) throws WhcaException {

          try {

                  psijni.destroyHandle(handle);

                  psijni.pkiEnd();

          } catch (Exception ex) {

            throw new WhcaException(ex.getMessage());

          }

 

  }

时间: 2024-09-01 11:48:51

java中异常处理try~catch~finally介绍的相关文章

java基础-求问关于java中异常处理的问题。。

问题描述 求问关于java中异常处理的问题.. 不是很理解java异常处理中的try catch语句块,比如说我的catch语句块中是一个System.out.println("caught IOEexception":e.getMessage()),那么这个catch语句起到的作用就是提示我一下哪个地方有异常吗?然后我再去它提示我发生异常的地方去修改我的程序? 那么如果我的catch语句里面什么都没写,只是一个catch{}:由于写了try catch语句块编译一定会通过,那岂不是说

java中的自增问题介绍_java

运行下面这段代码,其结果是什么呢? package com.test; public class Inc { public static void main(String[] args) { Inc inc = new Inc(); int i = 0; inc.fermin(i); i = i++; System.out.println(i); } void fermin(int i) { i++; } } 结果是:0 上述类似代码在C/C++中运行结果是:1,这是为什么呢?   这是因为Ja

Java中异常处理之try和catch代码块的使用_java

Java try和catch的使用 尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常.这样做有两个好处.第一,它允许你修正错误.第二,它防止程序自动终止.大多数用户对于在程序终止运行和在无论何时错误发生都会打印堆栈轨迹感到很烦恼(至少可以这么说).幸运的是,这很容易避免. 为防止和处理一个运行时错误,只需要把你所要监控的代码放进一个try块就可以了.紧跟着try块的,包括一个说明你希望捕获的错误类型的catch子句.完成这个任务很简单,下面的程序包含一个

js中的异常处理try...catch使用介绍_javascript技巧

在JavaScript可以使用try...catch来进行异常处理.例如: 复制代码 代码如下: try { foo.bar();} catch (e) { alert(e.name + ": " + e.message);} 目前我们可能得到的系统异常主要包含以下6种: EvalError: raised when an error occurs executing code in eval() RangeError: raised when a numeric variable o

Java中异常处理方法总结

异常(Exception):指程序运行过程中出现的非正常现象. 1.  Java异常的异常处理机制 早期的情况: 早期使用的程序设计语言是没有提供专门进行异常处理功能的,程序设计人员只能苦逼的使用条件语句对各种可能设想到的错误情况进行判断,来捕捉特定的异常,然后进行相应的处理.这样的处理方式,往往要整出大段大段的if-else语句.本来需要完成相应功能的代码块很小,但是加上这样针对异常处理的条件语句使得代码显得非常臃肿,这样一来代码的可读性和可维护性就下降了,而且有时候还会遗漏意想不到的异常情况

Java中的深拷贝和浅拷贝介绍_java

一.引言   对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去.在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部 数据.Java中有三种类型的对象拷贝:浅拷贝(Shallow Copy).深拷贝(Deep Copy).延迟拷贝(Lazy Copy). 二.浅拷贝 1.什么是浅拷贝   浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝.如果属性是基本类型,拷贝的就是基本类型的值:如果属性是内存地

Java中的阻塞队列详细介绍_java

Java中的阻塞队列 1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是: 在队列为空时,获取元素的线程会等待队列变为非空. 当队列满时,存储元素的线程会等待队列可用. 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程.阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素. 2.Java里的阻塞队列 JDK中提供了七个阻塞队列: ArrayBlockingQueue :一个由数组结

java 中函数的参数传递详细介绍_java

 java中函数的参数传递 总结:   1.将对象(对象的引用)作为参数传递时传递的是引用(相当于指针).也就是说函数内对参数所做的修改会影响原来的对象.   2.当将基本类型或基本类型的包装集作为参数传递时,传递的是值.也就是说函数内对参数所做的修改不会影响原来的变量.   3.数组(数组引用))作为参数传递时传递的是引用(相当于指针).也就是说函数内对参数所做的修改会影响原来的数组.   4.String类型(引用)作为参数传递时传递的是引用,只是对String做出任何修改时有一个新的Str

java中equals和==的区别介绍

示例一.  代码如下 复制代码 public class Demo {     public static void main(String args[]) {         String str="soka";         String str2 = "soka";         System.out.println("soka".equals(str));         System.out.println(str==str2);