URI.create()vs new URI()

时间:2015-08-03 04:38:06

标签: java performance uri

可以通过两种方式创建uri

URI uri = new URI("https://www.google.com/");

或者,

URI uri = URI.create("https://www.google.com/");

我想知道哪种更好的做法。我没有注意到任何性能差异并且我已经阅读了文档,但是它有点难以理解。对此有任何见解表示赞赏。

2 个答案:

答案 0 :(得分:15)

阅读文档,它的用法不同。

  

通过解析给定的字符串来创建URI。这个便利工厂   方法就好像通过调用{@link一样   URI(String)}构造函数;构造函数抛出的任何{@link URISyntaxException}都会被捕获并包装在新的{@link中   IllegalArgumentException}对象,然后抛出。

     

此方法用于已知的情况   给定的字符串是合法的URI ,例如URI常量   在程序中声明,因此它将被视为a   字符串编程错误,不能解析。该   应该直接抛出{@link URISyntaxException}的构造函数   用于从用户输入或构造URI的情况   来自其他可能容易出错的来源。

     

@param str要解析为URI的字符串

 * @return The new URI
 *
 * @throws  NullPointerException
 *          If {@code str} is {@code null}
 *
 * @throws  IllegalArgumentException
 *          If the given string violates RFC 2396
 */
public static URI create(String str) {
    try {
        return new URI(str);
    } catch (URISyntaxException x) {
        throw new IllegalArgumentException(x.getMessage(), x);
    }
}

答案 1 :(得分:0)

没有区别,因为URI.create将调用委托给构造函数。唯一真正的区别是URI.create(String)将构造函数引发的URISyntaxException包装(检查异常)包装到IllegalArgumentException(未检查异常)中,因此,如果您不想处理检查异常最好只调用URI.create(String)

这是JDK的一段代码:

public static URI create(String str) {
    try {
        return new URI(str);
    } catch (URISyntaxException x) {
        throw new IllegalArgumentException(x.getMessage(), x);
    }
}