如果发现错误,会中断程序流程?

时间:2010-11-17 15:06:12

标签: java exception exception-handling error-handling

好的我有一个方法可以启动一个与数据相关的对象 - 一种工厂。

工厂拆分数据并将拆分的数据发送到进一步处理/细化数据的自定义对象。

我的问题是我使用一个对象记录错误,该对象基本上只是将字符串附加到一个错误日志中。有些错误是正确的 - 这意味着程序流程可以继续 - 但有些是严重,因此进程需要终止,我需要将错误日志抛回原始方法。并在此时停止处理数据,否则可能会搞砸。

原始方法返回您看到的字符串。我不必担心方法如何返回错误,只需要将其发送到它。

alt text

由于

6 个答案:

答案 0 :(得分:1)

听起来你应该在遇到严重错误时抛出异常,并在try catch语句中调用工厂来处理它可以生成的错误。

有关详细信息,请查看http://download.oracle.com/javase/tutorial/essential/exceptions/throwing.html

基本代码是

Exception e = new Exception();
throw e;

但是,您可以查看创建自己的异常类,以包含有关特定错误的更多信息。

编辑:您提到要返回错误日志,自定义异常可能包含此内容。

双重编辑: 像

这样的东西
public class BadFactoryException extends Exception{
    private String log;
    public BadFactoryException(String log){
        this.log = log
    }
}

使用可以抛出类似

的工厂方法
public returntype factory throws BadFactoryException(input){
    try{
    //code goes here
    }catch(Exception e){
         throw new BadFactoryExeption(log);
    }       

}

答案 1 :(得分:0)

您刚刚从第一天起就描述了例外和exception handlinga feature of Java

答案 2 :(得分:0)

您的问题中未提及Exception - 您是否已经使用过它们?

如果没有,这正是他们的目的。

如果这样做,那么您需要重新考虑如何捕获日志记录的异常。

答案 3 :(得分:0)

关于例外的基本教程:http://download.oracle.com/javase/tutorial/essential/exceptions/

另一篇好文章:http://www.javaworld.com/javaworld/jw-07-1998/jw-07-exceptions.html

如果您想要解决非关键的危急情况,请执行以下操作:

try {
// get here all your work
} catch (TerribleException e) {
// log and exit the application
} 

在你的工作中,不要抛出任何异常。简单记录情况并继续工作。所以你需要的是定义什么情况应该停止执行,然后在那个地方抛出一些Exception并在启动工作的类中捕获它。

答案 4 :(得分:0)

我不是Java人,但我认为您需要使用try {...} catch (error) {...}块。捕获到所需错误后,运行System.exit()。这是一个例子:

try {
  /* Do your stuff here */
} catch (ExceptionType name) {
  /* Oh noes, a fatal error! */
  print('Oh noes!');
  System.exit()
}

这是你在找什么?

答案 5 :(得分:0)

好的,这就是我想要的......最终想出来了。

4个类,包括自定义异常。

package ExceptionTest;

public class Main {

    public static void main(String[] args) {
        exceptionTester();
    }

    private static void exceptionTester(){
        try{         
            new FirstLevelObj().begin();        
        }
        catch(MyException e){
            System.out.println("Its worked!");
            e.printStackTrace();
        }
        finally{
            System.out.println("Oh young man..This Class doth created the other classes! \nAnd has now thrown the exception!");
        }

    }

}

package ExceptionTest;

public class FirstLevelObj {

    private SecondLevelObj second;

    public FirstLevelObj() throws MyException{
    }

    protected void begin()throws MyException{
        try{
            second = new SecondLevelObj();
            second.start();
        }
        catch(MyException e){
            throw new MyException("This Is The One!");
        }
        finally{
            System.out.println("And finally..");
        }
    }

}

package ExceptionTest;

public class SecondLevelObj {

    public SecondLevelObj(){

    }

    protected void start() throws MyException{
        for(int i = 0; i<10; i ++){
            if(i == 6){
                System.out.println("Exception should be thrown:");
                throw new MyException("An Error Hath Occurred Young Man!");
            }
            else{
                System.out.println(i);
            }
        }
    }
}

package ExceptionTest;

public class MyException extends Exception{
    public MyException(String s){
        super(s);
    }
}