当前位置:首页>python>Java 什么时候也变得像 Python 一样 “开箱即用”了?

Java 什么时候也变得像 Python 一样 “开箱即用”了?

  • 2026-09-10 05:42:16
Java 什么时候也变得像 Python 一样 “开箱即用”了?

沉默是金,总会发光

大家好,我是沉默

前段时间做代码评审时,我看到同事写了这样一段代码:

import module java.base;public class Demo {    public static void main(String[] args) {        List<String> list = new ArrayList<>();        list.stream().sorted().forEach(System.out::println);    }}

我当场愣了一下。

等等……

List 没导入?ArrayList 也没导入?Stream 也没有?

代码居然还能正常运行。

那一刻我有点恍惚:Java什么时候也变得像 Python 一样“开箱即用”了?

-01-

为什么 Java 的 import 一直让人头疼? 

很多人刚学 Java 时,都被几个问题困扰过:

  • 为什么 String 不用 import?

  • 为什么 List 必须 import java.util.List?

  • import java.util.* 会不会影响性能?

  • Stream 到底在哪个包?

这些问题的根源,其实来自 Java 的包(Package)设计。

简单理解:

Java 的类必须属于某个包。

而使用类之前,就必须 告诉编译器这个类在哪个包里。

在 JDK 25 之前,Java 的导入方式只有两种。

导入方式
示例
优点
缺点
精确导入
import java.util.List
清晰明确
导入多时很臃肿
通配符导入
import java.util.*
写得少
不知道用了哪些类

举个真实场景。

如果我们写一个文件处理程序,可能需要这些类:

import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;

6 行 import。

如果项目稍微大一点:

文件开头一屏幕都是 import。

很多程序员看到这里都会吐槽:

还没写业务代码,先写半页 import。

-02-

import * 会影响性能? 

这是 Java 社区流传了很多年的一个“谣言”。

很多新人都会问:

import java.util.* 会不会降低性能?

答案是:

完全不会。

原因很简单:

Java 的 import只在编译期生效。

编译完成后,字节码里使用的是:

java.util.List

也就是 类的全限定名(Fully Qualified Name)。

所以:

导入方式
运行性能
精确导入
一样
*
 导入
一样

唯一的区别其实是:

代码可读性。

-03-

模块级导入(Module Import)

为了减少 import 的“样板代码”,

JDK 25 在 JEP 511 中提出了一个新能力:

模块级导入(Module Import)。

语法非常简单:

import module 模块名;

例如:

import module java.base;

这一行代码,相当于导入了:

java.langjava.utiljava.iojava.mathjava.timejava.netjava.nio...

共 54 个核心包。

也就是说:

  • String

  • List

  • Map

  • Stream

  • File

  • Optional

全部可以直接使用。

我们看一个真实对比。

传统写法

import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;

JDK 25 写法

import module java.base;

对比结果:

写法
import 行数
传统写法
6 行
模块导入
1 行

对于:

  • Demo 项目

  • 工具程序

  • 学习代码

体验提升非常明显。

如果你需要数据库 API。

只需要再加一行:

import module java.sql;

示例:

import module java.base;import module java.sql;

这样就能直接使用:

ConnectionStatementResultSetDriverManager

代码会变得非常干净。

如果两个模块里有同名类,比如:

java.util.Datejava.sql.Date

解决方法其实和以前一样:

精确导入优先。

例如:

import module java.base;import module java.sql;import java.util.Date;

使用时:

Date utilDate = new Date();java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());

规则总结:

优先级
导入方式
1
精确导入
2
模块导入
-04-
总结

什么时候适合用模块导入?

模块导入不是万能的。

它最适合这些场景:

1. 快速开发

写 Demo、脚本工具、实验代码。

2. Java 新手学习

新手最大困扰之一就是:

类在哪个包?

模块导入可以直接跳过这个问题。

3. 小型业务项目

很多业务代码 80% 都在 java.base。

模块导入完全够用。

什么时候不建议使用?

在这些场景中,精确导入更好:

场景
原因
大型项目
依赖更清晰
开源框架
可读性更强
核心系统
避免隐藏依赖

Java 导入机制的进化

Java 的 import 机制,其实经历了三次演进:

时代
方式
JDK 1.0
import java.util.List
JDK 1.2
import java.util.*
JDK 25
import module java.base

变化趋势只有一个:

让开发者写更少的样板代码。

这让 Java 的开发体验,

越来越接近 Python / Go 这样的现代语言。

如果未来 Java 支持:

import module java.*;

也许我们真的可以做到:

一行 import 都不用写。

那一天到来时,

Java 可能会比很多人想象的,

更优雅。

热门文章

一套能保命的高并发实战指南

架构师必备:用 AI 快速生成架构图

-05-
粉丝福利

我这里创建一个程序员成长&副业交流群,

和一群志同道合的小伙伴,一起聚焦自身发展,
可以聊:

技术成长与职业规划,分享路线图、面试经验和效率工具,

探讨多种副业变现路径,从写作课程到私活接单,

主题活动、打卡挑战和项目组队,让志同道合的伙伴互帮互助、共同进步。

如果你对这个特别的群,感兴趣的,
可以加一下,微信通过后会拉你入群,
但是任何人在群里打任何广告,都会被我T掉。

最新文章

随机文章