绕过java异常规范。。。?

绕过java异常规范。。。?,java,exception-handling,Java,Exception Handling,我想做什么 public class Settings { static final URL logo = new URL("http://www.example.com/pic.jpg"); // and other static final stuff... } 但是我被告知我需要处理畸形的异常。规范指出,MalformedURLException是 抛出以指示已发生格式错误的URL。在规范字符串中找不到合法协议,或者无法分析该字符串 现在,我知道我提供的URL没有格式错误

我想做什么

public class Settings
{
    static final URL logo = new URL("http://www.example.com/pic.jpg");
    // and other static final stuff...
}
但是我被告知我需要处理
畸形的异常
。规范指出,
MalformedURLException

抛出以指示已发生格式错误的URL。在规范字符串中找不到合法协议,或者无法分析该字符串

现在,我知道我提供的URL没有格式错误,所以我不希望处理我知道不会发生的异常


是否有任何方法可以避免不必要的try-catch块阻塞我的源代码?

最短的答案是否定的。但是您可以创建一个静态实用程序方法来为您创建URL

 private static URL safeURL(String urlText) {
     try {
         return new URL(urlText);
     } catch (MalformedURLException e) {
         // Ok, so this should not have happened
         throw new IllegalArgumentException("Invalid URL " + urlText, e);  
     }
 }
如果您在多个地方需要类似的东西,您可能应该将其放在实用程序类中。

尝试以下方法:

public class Settings
{
    static final URL logo;

    static
    {
        try 
        {
            logo = new URL("http://www.example.com/pic.jpg");
        } 
        catch (MalformedURLException e) 
        {
            throw new IllegalStateException("Invalid URL", e);  
        }
    }
    // and other static final stuff...
}

简洁明了+1 for
//好的,所以这不应该发生
是的,谢谢,我知道try-catch的语法和语义,这不是问题所在。我的问题是,我知道异常永远不会发生,这就是为什么我希望避免用不必要的try-catch子句阻塞源代码。在C++中,我只是忽略了异常,编译器不会纠缠我,对吧?在Java中。。。我真的认为应该有办法说服编译器不要强制执行异常规范在这种情况下,编译器指令,如果没有其他…@opffinarjocke哦,我不是有意冒犯你,尽管你只是不想;我不知道静态初始值设定项。不幸的是,没有办法说Java“闭嘴”:如果有这样一个特性,异常将比现在更加混乱。关键是,每个特性几乎都会相互影响。将异常神奇地关闭意味着相同的代码可以编译,也可以不编译,基于你甚至看不到的东西。谢谢阿尔夫。我没有生气,如果是那样的话我很抱歉。。。是的,我知道完全关闭异常检查可能会把事情搞砸,但是一个编译器指令,如您所说,“闭嘴”,在这种罕见的情况下似乎很有用。无论如何,我将改为使用字符串,并在代码中的其他位置创建URL(其中try-catch似乎更适合我)。谢谢。