Java ‘URL(java. lang. String)‘ 自版本 20 起已弃用

Java 20 及更高版本中,不推荐直接使用 new URL(String spec) 构造方法。官方建议通过更加安全和明确的方式来创建 URL。下面示例给出两种常见替代方案:使用 URI 转化为 URL,或使用多参数构造方法。


原始写法(已弃用)

public class UrlDemo {
    public static void main(String[] args) {
        try {
            // 自 Java 20 起已弃用
            URL url = new URL("https://www.example.com");
            System.out.println(url.getHost());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

问题说明

  • new URL(String spec) 在 Java 20 中被标记为 Deprecated,不再建议使用。

方案一:使用 URI 并转化为 URL

这是最推荐的做法,先使用 URI 的构造方法或解析方法,随后通过 uri.toURL() 得到 URL

public class UrlDemo {
    public static void main(String[] args) {
        try {
            // 首先创建 URI 对象
            URI uri = new URI("https://www.example.com");
            
            // 再通过 toURL() 转换为 URL
            URL url = uri.toURL();
            
            System.out.println(url.getHost());
        } catch (URISyntaxException | MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

优点

  1. 语义更清晰:URI 对象更符合通用资源标识符语义,且能够更好地处理相对路径等情况。
  2. 异常更准确:如果字符串不符合 URI 语法,会抛出 URISyntaxException;若无法转化为 URL 会抛出 MalformedURLException,分类更明确。

方案二:使用多参数构造方法

可以使用 URL(String protocol, String host, int port, String file) 或者其变体,以显式地为 protocolhostportfile 赋值。例如:

public class UrlDemo {
    public static void main(String[] args) {
        try {
            // 明确指定协议、主机、端口、路径
            URL url = new URL("https", "www.example.com", 443, "/path/to/resource");
            System.out.println(url.getHost());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

优点

  1. 分段指定:将 protocolhostportfile 分开,避免字符串拼装带来的可读性差或语义不清的问题。
  2. 异常处理:若传入的组合无效,会抛出 MalformedURLException

总结

  • 已弃用方法new URL(String spec) 自 Java 20 起被标记为弃用,不建议继续使用。
  • 替代方法
    1. 先创建 URI 对象再使用 uri.toURL()(官方推荐)
    2. 使用 URL 的多参数构造方法,明确指定协议、主机、端口和文件路径

具体选择哪种替代方式,应根据你对字符串解析、异常处理和资源定位的需求来决定。最常见、最安全的做法是 先解析为 URI,然后再转成 URL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方来财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值