如题,谢谢。

解决方案 »

  1.   

    class Test
    {
       String theVal="haha";
       public void doSomething() throws Exception
      {
         //////;
      }
    }我的意思是说,如果我捕获到这个抛出的Exception,怎样通过Exception对象,而得到Test这个对象并且得到theVal的值。
      

  2.   

    exception的默认实现似乎没有。
    catch(Exception e){
    throw MyException(e,this);}
    ---
    catch(MyException e){
     ((User)e.getOjb()).getName();}
      

  3.   

    TO  treeroot:直接获取??以你两星的水平,不会只说这句话吧?TO huabingl:java.lang.Exception  这个类,有getOjb()这个方法吗?
      

  4.   

    Exception  不应该作为参数传递的载体
      

  5.   

    Exception  不应该作为参数传递的载体
    支持一下
    class Test
    {
       String theVal="haha";
       public void doSomething() throws Exception
      {
         //////;
      }
    }你定义的这个方法 public void doSomething() throws Exception
      {
         //////;
      }
    之中会友个throw Exception的地方,你写成
    throw new Exception("xxxx")
    然后就可以用getmessage()得到了
      

  6.   

    首先编写一个自己的异常类:
    public class MyException extends Exception { /**
     * @param args
     */
    private Object causeObject; public MyException(Object cause)
    {
    causeObject = cause;
    }

    public Object getCauseObject()
    {
    return causeObject;
    }}然后再在自己的类中抛出这个异常
    class Test
    {
       private String theVal="haha";
       public String getTheVal()
       {
          return theVal;
       }   public void doSomething() throws MyException
      {
         //////;
            MyException e = new MyException(this);
            throw e;
      }
    }最后,在捕获异常的地方
    catch (MyException e)
    {
        Object causeObject = e.getCauseObject();
        if (causeObject != null &&(causeObject istanceof Test))
        {
            System.out.println(((Test)causeObject).getTheVal());
        }
    }
      

  7.   

    可能我的题目没讲清楚,我是要从属于java.lang.Exception类型或其子类的异常对象中,得到抛出Excetpion的对象中的属性值,目的是跟踪错误发生的类中的属性值。自定义错误类型这个方法我是知道的,为什么不选用这种方法呢?因为如果JVM抛出NullPointerExpcetion,ArithmaticException,FileNotFoundException等异常,由于不属于自定义类型,就跟踪不了错误发生的类中的属性了,因为NullPointerExpcetion,ArithmaticException这些类,和MyExcpetion都是Exception的直接子类,JVM抛出ArithmaticException时,会调用java.lang.Exception上的构造方法,但不会调用MyExcpetion的。
    我讲清楚一点我的目的,由于大部分的异常,都是Exception的子类,所以我通过对Excetpion的拦截,就等于拦掉大部分的异常了,我现在已经做到拦截到系统中所有的Exception及其子类了。然后,我设想从这些异常反过来得到抛出异常的类的属性,这样就能跟踪哪个值出现问题异致异常的抛出。问题就卡在怎样通过一个Exception对象得到抛出这个Exception的对象。只要有关于这个核心问题的正确回答,分数不成问题。
      

  8.   

    楼主,我认为异常机制就是要把错误处理和主程序分离开来,因此异常流是相对独立的,异常流如果和主程序流混在一起就违背异常机制的初衷了。也因为这样,Java的整个异常架构是很“单纯”的,除了顶层的Throwable类有一些核心方法以外,其他所有的异常类都非常简单,大部分类都只有一两个构造函数。Throwable类的所有方法也只与异常流有关,如fillInStackTrace()等。如果你确实要这样做的话,楼上的afrag()的方法应该可以,就是自定义一个异常,用一个变量来存储抛出对象的引用。但是试想如果这是一种很明智的设计的话,java的异常机制为什么没有采纳?请更多地从设计上考虑,不要削足适履。
      

  9.   

    谢谢Dan1980的意见。 我明白你说的“异常机制就是要把错误处理和主程序分离开来”,这样的好处是很明显的。但是,我觉得JAVA是可以从一个Exception得到Exception是来自于哪个对象的。因为它把这些信息存在StackTraceElement中了,Exception.printStackTrace()不是可以哪个类出了错,错在哪一行,一清二楚地显示出来吗?所以说JVM是知道哪个对象抛出异常的,问题是我们怎样用代码去得到这个对象。其实我不是想把主程序和错误处理混在一起,我只不过想建立一种机制,把整个应用中所有发生的所有Exception收集在一起,并进行分类。
      

  10.   

    我觉得我很有必要把我这样做的意图清楚地讲一下设想,如果你是项目经理,你不能保证下面每个程序员的代码都是正确的,也不能保证他们该势出的异常都捕获并抛出。而很多时候,客户向我们反映“我在某个窗体,先点这里,然后不知进行了什么操作,再点那里,然后就出了错”。再他到底进行了什么操作才出错,连他自己本人也不记得。但我们是怎么点击,也调试不出客户说的错误,如果做过大型项目的人都知道,有时一些错误真的很隐蔽的。所以才想把一个站点中所有的Exception都拦下来,然后从Excception跟踪到抛出这个Exception的类,再把类中的各项参数也记录下来,再写进表里,这样,我只要每天都查看这张表中的记录,看到这个错误发生的对象中的详细参数值及报报语句,就能很准确地判断出错误发生的原因了。我之所以有这个想法,全是我过去做项目的经验总结,我真的很希望能实现这样的一种除错机制。刚才我又对贴子加了十分。
      

  11.   

    这样是不是你要的?
    StackTraceElement[] stes=exception.getStackTrace();for(int i=0;i<stes.length;i++){
      Class throwClass=stes[i].getClassName();
      Method throwMethod=stes[i].getMethod();
      //......
    }
      

  12.   

    TO Saro:不是啊,这个方法我知道,我不是要知道哪个class抛出Exception,我是想知道哪个Object 抛出Exception,class和Object的区别,就不多说了,通过class是得不到属性的值的。
      

  13.   

    楼主的想法顶一个
    不过Log4j中直接把Exception中stackTrace存入数据库的方法也能知道那个类第几行出的错 关键在于出错前参数值并没有记录
      

  14.   

    有点看不懂了,楼主要得到对象的属性,直接使用this指针不就可以了吗?不知道楼主是不是这个意思。import java.io.*;
    public class NewEmpty 
    {
        int i; 
        public static void main(String args[]) 
         {
         NewEmpty ne=new NewEmpty();
            ne.go();
         } 
        public void go(){
            i=1;
            try{
                test();
            }
            catch(IOException e){
                System.out.println(this.i);
            }
        }
         public void test() throws IOException{
             throw new IOException();
         }
    }
      

  15.   

    只有Saro的方法能达到我的要求,我想看看有没有其它方法再结贴。