自定义异常

这个非常简单只说两点:1.利用StackFrame来简化错误信息的生成 2.利用自定义异常来简化信息传递.

public class BException : ApplicationException
  ...{
    string _errMsg = "";
    public BException() : base() ...{}
    public BException(string msg) : base(msg) ...{ this._errMsg = msg; }
    public string Message
    ...{
      get ...{ return this._errMsg; }
    }
    public static BException CreateError(string msg)
    ...{
      StackTrace st = new StackTrace();
      StackFrame sf = st.GetFrame(1);
      MethodBase mi = sf.GetMethod();
      Type t = mi.DeclaringType;
      return new BException(string.Format("Error in {0}::{1} -- {2}",
                              t.Name, mi.Name, msg));
    }
    public override string ToString()
    ...{
      return this._errMsg;
    }
  }

在CreateError方法中利用StackTrace找出调用CreateError的调用者,GetFrame(1).GetFrame(0)就是当前的CreateError方法.是不是很方便.

Exception还能简化函数调用中的消息传递.例如我们写程序经常会有"用户密码错误","该用户没有权限"这样的消息提示.我们要么是通过判断方法的返回值的方式,要么是通过参数将提示信息返出来.这两种方式不但麻烦而且调用者还需要记得各个方法返回的涵义.而用Exception是一种较好的方法来解决这个问题把需要提示的信息throw出来,然后统一拦截这个自定义消息进行提示.这里以Asp.net来说明统一处理自定义错误:

protected override void OnError(EventArgs e)
    ...{
      BException msg = Server.GetLastError().GetBaseException() as BException;
      if(ex != null)
      ...{
        //go(-1)是在提示消息后能够返回到上一个提交页面
        Response.Write("<script>alert('"+msg.Message+"');window.history.go(-1);</script>");
        //没有这句消息提示会有误
        Server.ClearError();
        return;
      }
    }

时间: 2024-07-31 23:47:28

自定义异常的相关文章

VC不定参数的传递和自定义异常的抛出

今天下午学习了两点,一,在vc自定义函数中传定不定个数的参数,即如format函数中的第二个参数"...",能接收任意个数参数;二,自定义异常的抛出,即throw一个自定义异常. 函数代码列如下: 1.// ComboProp.h: interface for the CComboProp class.2.//3.//////////////////////////////////////////////////////////////////////4.#if !defined(AF

java中自定义异常的相关问题

问题描述 java中自定义异常的相关问题 java中为什么要自定义异常?若果知道代码有问题又何必自定义异常直接把代码改正确不就行了....... 在什么情况下自定义异常? 解决方案 比如 密码为空抛出 空密码异常 自定义异常可以告诉用户和自己 发生了一些可以预测到的错误 所以就要判断密码是否等于空 否则也许直接引发空指针异常 谁知道是密码为空呢 除非调试 解决方案二: 自定义异常主要是在现有异常定义的基础上,对一些可能发生的错误或某种状况进行处理,自定义异常不一定是处理错误!宽泛的说,你在任何需

C# 自定义异常类型(摘自CLR Via C# 3th Edition)

ExceptionArgs.cs: //异常信息基类 [Serializable] public abstract class ExceptionArgs { public virtual String Message { get { return String.Empty; } } } 泛型的异常类: [Serializable] public sealed class Exception<TExceptionArgs>:Exception,System.Runtime.Serializat

Java 中常见的异常和自定义异常

常见异常:  java.lang.nullpointerexception    这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等.对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了.数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化

Java自定义异常

  先看标准的例子: Test.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 /*     模拟注册 */ public class Test{       public static void main(String[] args){                   //假如用户提供的用户名如下         String username = "xpleaf";                   

spring的事务回滚策略为自定义异常

问题描述 spring的事务回滚策略为自定义异常 我配置的回滚策略如下 BusinessException是个自定义异常,继承了RuntimeException,按道理来说spring应该是捕捉到这个异常类或这个异常类的子类才进行的回滚,但是为什么抛出RuntimeException以后事务还是会回滚? 解决方案 http://shaohan126448.iteye.com/blog/1536879 解决方案二: spring异常与事务回滚Spring异常抛出触发事务回滚策略异常类型 &&

深夜编代码,自定义异常练习出现错误,急求各路神仙指导

问题描述 classExceptionTest9//自定义异常练习{publicstaticvoidmain(String[]args){Testt=newTest();intx=t.div(4,-1);System.out.println("x="+x);}}classfushuExceptionextendsException{}classTest{intdiv(inta,intb)throwsfushuException{if(b<0)thrownewfushuExcept

关于java异常类Exception问题:对抛出的自定义异常类BulletException做了处理,没对IOException进行异常处理,为什么能编译过程序

问题描述 packagetestBank;//importjava.io.*;classBulletExceptionextendsException{publicBulletException(){super();}publicBulletException(Stringmsg){super(msg);}}classBank{publicstaticfloattotal;publicstaticfloattake[];publicstaticfloatinput[];publicstatici

struts1.x自定义异常问题

问题描述 在做struts1.x全局异常捕获的时候遇到一个问题:1.当我的类LoginAction中写execute方法时,能捕获到自定义的异常并跳转到专门处理错误的页面显示错误信息,publicclassLoginActionextendsBaseAction{privateBaseservicebaseservice;publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest