URL类用于表示和操作URL,专注地址解析、构造与标准化,不发送请求;可拆解协议、主机等字段,支持相对路径解析和自动编码,通过openConnection()配合URLConnection发起请求,但不可变且功能基础。

URL类用于表示和操作统一资源定位符(Uniform Resource Locator),是Java中解析、构造和访问网络资源地址的基础工具。它不负责发送请求或获取内容,而是专注在地址本身的合法性验证、结构分解与标准化处理上。
解析URL的组成部分
URL对象能自动拆解一个字符串地址为协议、主机、端口、路径、查询参数、锚点等标准字段。例如:https://www.example.com:8080/path/to/file?name=java#section1,调用getProtocol()返回"https",getHost()返回"www.example.com",getQuery()返回"name=java",getRef()返回"section1"。
- 所有字段提取方法都基于RFC规范进行解析,不依赖网络连接
- 如果某部分未显式出现(如省略端口),对应方法返回
null或默认值(如HTTP默认端口80) - 路径会自动规范化,比如
"/a/../b"会被转为"/b"
构建和标准化URL地址
可通过字符串或相对路径方式创建URL实例,并支持相对URL解析。例如:
-
new URL("https://example.com")直接构造绝对URL -
new URL(base, "api/users")以base为基准解析相对路径,结果为https://example.com/api/users - 构造时会自动对非法字符进行编码(如空格转为%20),但需注意它只做简单转义,不替代
URLEncoder
与URLConnection配合发起网络请求
URL本身不传输数据,但可调用openConnection()获取URLConnection子类(如HttpURLConnection),进而设置请求头、发送请求、读取响应流。
立即学习“Java免费学习笔记(深入)”;
- 这是Java原生最轻量的HTTP访问方式,适合简单场景
- 注意:URL对象不可变,每次修改地址需新建实例
- 若地址格式错误(如协议名非法、缺少主机),构造时抛出
MalformedURLException
常见误区提醒
URL类不是万能地址处理器:
- 它不验证域名是否真实存在,也不检查服务器是否可达
- 不支持解析非标准协议(除非已注册对应
URLStreamHandler) - 中文路径或参数需提前编码,否则可能抛异常或解析错乱
- 相比现代框架(如OkHttp、Spring RestTemplate),它缺乏连接池、超时控制、JSON自动解析等高级能力










