Java异常的处理

转载 2006年06月08日 14:35:00
问题1、继承与RuntimeException是因为它是uncheck的错误类型,可以减少以后程序的代码量和使用方便。而Exception是必须check的错误类型,程序中一定要加上try,catch处理,比较繁琐。

关于LOG4J因为每个类中的catalog是不一样的。而且也不需要区别多用户的信息,应该可以满足现在的要求。

以下另:

通过自定义异常,来解决异常的覆盖问题。

并且也可以实现异常信息的自定义

文后说明了JAVA异常处理的几个注意点


自定义异常类:

通过重载getMessage方法,改写多个异常情况下异常信息输出。并且也可以在该方法中实现异常编码和异常信息的绑定:可以通过读取配置文件或者数据库,将异常编码转换为异常信息产生输出

package com.gever.jcw.test;

import java.util.List;
import java.util.ArrayList;


public class MyException extends Exception{
    List list;
    public MyException(){
        super();
        list=new ArrayList();
    }
    public MyException(ExceptionMsg msg){
        super();
        list=new ArrayList();       
        list.add(msg);
    }
    public void addException(ExceptionMsg msg){
        list.add(msg);
    }
    public List getExceptionList(){
        return list;
    }
    public String getMessage(){
        StringBuffer sb=new StringBuffer();
        if(list==null){
            sb.append("nothing Exception!/n");
        }else{
            if(list.size()>0){
                for(int i=0;i                    ExceptionMsg msg=(ExceptionMsg)list.get(i);
                    sb.append(msg.getClassname());
                    sb.append(".");
                    sb.append(msg.getMethodname());
                    sb.append(" ");
                    sb.append(msg.getLinenumber());
                    sb.append(" Line, ");
                    sb.append("wrong number ");
                    sb.append(msg.getErrnumber());
                    sb.append(":");
                    switch(msg.getErrnumber()){
                        case 101:
                            sb.append("this is 0 wrong");
                            break;
                        case 102:
                            sb.append("this is 1 wrong");
                            break;
                        case 103:
                            sb.append("this is 1 wrong");
                            break;
                        default:
                            sb.append("unknow error");
                            break;
                    }
                    sb.append("/n");
                }
            }
        }
        return sb.toString();
    }
    public void print(){
        System.out.println(this.getMessage());
    }
}

异常信息类:

package com.gever.jcw.test;

public class ExceptionMsg {
    private int errnumber=0;
    private String classname="";
    private String methodname="";
    private int linenumber=0;

    public ExceptionMsg(int errnumber,String classname,String methodname,int linenumber){
        this.errnumber=errnumber;
        this.classname=classname;
        this.methodname=methodname;
        this.linenumber=linenumber;
    }
    public int getErrnumber() {
        return errnumber;
    }

    public void setErrnumber(int errnumber) {
        this.errnumber = errnumber;
    }

    public String getClassname() {
        return classname;
    }

    public void setClassname(String classname) {
        this.classname = classname;
    }

    public String getMethodname() {
        return methodname;
    }

    public void setMethodname(String methodname) {
        this.methodname = methodname;
    }

    public int getLinenumber() {
        return linenumber;
    }

    public void setLinenumber(int linenumber) {
        this.linenumber = linenumber;
    }
}

测试类如下:

package com.gever.jcw.test;
public class TestT {
    public void test() throws MyException{
        MyException myex=new MyException();
        try{
            file://myex.addException();
            throw new MyException(new ExceptionMsg(101,this.getClass().toString(),"test",14));
        }catch(Exception e){
            myex.addException(new ExceptionMsg(102,this.getClass().toString(),"test",16));
        }finally{
            myex.addException(new ExceptionMsg(103,this.getClass().toString(),"test",18));
            throw myex;
        }

    }
    public static void main(String[] args){
        TestT test=new TestT();
        try{
            test.test();
        }catch(MyException e){
            e.print();
            e.printStackTrace();
        }
    }
}
又一注意问题:finally会在return之前执行。如果try或者catch语句中,有return,并且有finally,那么该return语句将不会执行。

 

JAVA异常处理的几个注意点:

1)使用finally防止资源泄露

2)不用从try区块中执行return语句。如果该区块后有finally区块,则finally区块将首先执行

3)将try、catch区块置于循环体之外,因为在没有起用JIT编译器的情况下,两者执行效率差异显著

4)只有在异常情况下才去使用异常。不能够预计的才能叫异常;否则都应该用判断语句来进行校验

5)在构造函数中抛出异常。这样可以避免构造出不正确的对象

6)抛出异常前,如果可能,恢复对象的有效状态。

相关文章推荐

java基础关于异常处理方式

  • 2016年08月20日 09:42
  • 13.49MB
  • 下载

java异常处理

  • 2014年12月13日 20:18
  • 124KB
  • 下载

Java 入门 之 字符串与异常处理

本节主要要求掌握,字符串的常见方法(字符串转字符数组、字符串的比较函数、提取索引位置字符、将字符串转换为一个字节数组(???),返回字符串索引、去掉字符串前面的空格、从字符串中提取子串、大小写转换、替...

java,访问异常处理方法

  • 2014年12月16日 16:43
  • 963B
  • 下载

java异常处理

  • 2013年08月09日 11:44
  • 2KB
  • 下载

java异常处理机制详解

六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWr...

java异常处理

  • 2013年12月30日 22:16
  • 79KB
  • 下载

C++ Java异常处理比较

  • 2014年06月21日 21:12
  • 21KB
  • 下载

java 中的try—catch异常处理

什么是try块 try块包含可能发生异常的代码块,try块通常要跟着一个catch块,这个catch块处理发生在try块中的异常。一个try块一定要跟着一个catch块或者是一个finally块,或...

6.尚硅谷_java基础_异常处理

  • 2013年08月29日 12:01
  • 788KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java异常的处理
举报原因:
原因补充:

(最多只允许输入30个字)