Java重新抛出异常

Java重新抛出异常,java,Java,我有一个有两门课的项目。一个对象类和一个GUI类。 如果发生错误,我想抛出我自己声明的异常。 我有两种方法: public class getValueClass { private List<Value> liste; public List<Value> getValues() { try { liste = this.getVal(); } catch (ValueException ex) { Syste

我有一个有两门课的项目。一个对象类和一个GUI类。 如果发生错误,我想抛出我自己声明的异常。 我有两种方法:

public class getValueClass   {

private List<Value> liste;


public List<Value> getValues() {

    try {
        liste = this.getVal();
    } catch (ValueException ex) {
        System.out.println("EXCEPTION!! " + ex.getMessage());
        ex.printStackTrace();
    } 
    return liste;
}


public List<Value> getVal() throws  ValueException
{
liste = null;
try {

    // initialize list
    // do some stuff


    //test exception
    if(1 == 1)
    {
        throw new Exception();  
    }


} catch (Exception ex) {
    throw new ValueException("QWE " + ex);
} 
return liste;

}
}
但是我没有达到这一点,因为我已经在getValues()方法中捕捉到了它


如果不在getValues()方法的方法声明中添加抛出,是否可以这样做?(我从接口获取此方法,并且不会更改它)

您可以抛出未经检查的RuntimeException,例如IllegalArgumentException或自定义RuntimeException子类

public List<Value> getValues() {
    try {
        liste = this.getVal();
    } catch (ValueException ex) {
        throw new IllegalArgumentException(ex.getMessage(), ex);
    } 
    return liste;
}
public List getValues(){
试一试{
liste=this.getVal();
}捕获(值异常){
抛出新的IllegalArgumentException(例如getMessage(),例如);
} 
返回列表;
}

有一种方法可以做你想做的事,但我建议你不要这样做,这取决于你的
ValueException
的预期目的,因为它可能是未来bug的来源

您可以使用
ValueException
extend
RuntimeException
。顾名思义,
RuntimeException
异常集是在运行时抛出的,不会在编译时声明,需要显式捕获。这样,您就不必向
getValues()
方法添加
throws
声明,但仍然可以在主方法中捕获它


免责声明解释如下:

我不喜欢这个想法(通常是
RuntimeException
s)的原因是,在明确查找之前,它们都是未捕获的。在我看来,这不利于编写易于使用的代码,虽然它有非常方便的用途,但我觉得使用它们并不合适,因为它们带有不确定性


同样,这是我的观点,继承自
RuntimeException
的Java异常不能在方法签名中声明的情况下抛出。也就是说,我认为未申报的例外是坏的。practice@Siguza呸!我以为只有我一个人这么想:)比我快了大约10秒;)
public List<Value> getValues() {
    try {
        liste = this.getVal();
    } catch (ValueException ex) {
        throw new IllegalArgumentException(ex.getMessage(), ex);
    } 
    return liste;
}