Java 25 后的时代:像写 Python 一样写 Java - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Cbdy
V2EX    Java

Java 25 后的时代:像写 Python 一样写 Java

  •  
  •   Cbdy 12 天前 6591 次点击

    Compact Java App - 像写 Python 一样写 Java

    项目地址: https://github.com/alchem-x/compact-sb

    什么是 Compact Java App ?

    Compact Java App 是基于 Java 25 新特性( JEP 512 )的编程方式,让你可以像写 Python 一样写 Java 程序:

    // 传统的 Java Hello World public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } // Compact Java App Hello World void main() { IO.println("Hello, World!"); } 

    核心优势

    • 零样板代码 - 无需类声明、public static void main 等繁琐语法
    • 自动导入 - 自动导入 java.base 所有常用类
    • 简洁 I/O - 新的 IO 类简化控制台输入输出
    • 平滑演进 - 可随时扩展到完整 Java 程序
    • 原生性能 - 编译后与传统 Java 完全等效

    当前项目介绍

    这个仓库演示了 Compact Java App 的实际应用 - 一个轻量级的 Web 服务器实现。

    项目结构

    compact-sb/ ├── Lu.java # 紧凑 Java App 主程序 ├── CompactSB.java # Web 服务器核心 ├── lib/ # 依赖库 └── README.md 

    快速开始

    1. 确保 Java 25+已安装
    java -version # 需要 Java 25 或更高版本 
    1. 运行应用
    java Lu.java && java -cp "lib/*" CompactSB.java 
    1. 访问 Web 服务 打开浏览器访问 http://localhost:8080/

    核心代码示例

    Lu.java - 紧凑 Java App 的精髓:

    void main() { // 简洁的 Web 服务器启动 IO.println("Starting Compact Web Server..."); // 自动导入所有 java.base 类 var server = new Server(); server.start(8080); IO.println("Server running at http://localhost:8080/"); } 

    为什么选择 Compact Java App ?

    1. 教学友好 - 第一天就能写出实用的程序
    2. 脚本化 - 用 Java 写脚本,享受强类型和优秀性能
    3. 零配置 - 无需复杂项目结构和构建工具
    4. 生产就绪 - 可平滑扩展到企业级应用

    与传统 Java 对比

    特性 传统 Java Compact Java App
    Hello World 5 行,4 个概念 3 行,1 个概念
    依赖管理 需要 Maven/Gradle 直接运行源文件
    学习曲线 陡峭 平缓
    开发速度 快速
    运行时性能 优秀 同样优秀

    应用场景

    • 编程教学 - 让学生快速看到成果
    • 快速原型 - 验证想法的最佳选择
    • 系统脚本 - 替代 Shell 脚本的安全选择
    • 数据处理 - 处理 CSV 、JSON 等数据文件
    • Web 服务 - 如本项目的轻量级服务器

    技术细节

    • 隐式类声明 - 源文件自动转换为 final 类
    • 实例 main 方法 - 无需 static 修饰符
    • 自动导入 - java.base 模块 54 个包自动可用
    • IO 简化 - IO.println()替代System.out.println()

    下一步计划

    这个项目展示了 Compact Java App 在 Web 开发中的应用。未来可以:

    1. 添加更多路由处理功能
    2. 集成模板引擎
    3. 支持静态文件服务
    4. 添加数据库连接示例
    5. 创建 RESTful API 演示

    相关资源


    Compact Java App 让 Java 重新变得简单优雅,同时保持其强大的生态系统。未来已来,让我们一起拥抱这个全新的 Java 时代!

    本项目是 Compact Java App 理念的实践演示,展示了如何用简洁的代码构建实用的应用程序。

    46 条回复    2025-09-30 11:34:02 +08:00
    codehz
        1
    codehz  
       12 天前 via Android
    还没有像 c#那样可以直接省略 main
    Tomatopotato
        2
    Tomatopotato  
       11 天前
    java 都精简成这样了,spring 这种框架是打算继续 java kotlin 两脚走路吗?
    beginor
        3
    beginor  
       11 天前 via Android
    感觉像是 AI 写的,是不是该举报一下?
    realpg
        4
    realpg  
    PRO
       11 天前   9
    java 的繁复从来都不是语法简洁不简介

    而是输出个 helloworld 得整个 hanlder provider
    CodeCodeStudy
        5
    CodeCodeStudy  
       11 天前
    原来计划是用 println("Hello, World!");,现在还有加上 IO.
    NotFoundEgg
        6
    NotFoundEgg  
       11 天前
    Java 总是想办法精简这种无关紧要、用 IDE 一键生成不用自己写的代码( record 、psvm 、sout ),根本解决不了什么痛点
    banmuyutian
        7
    banmuyutian  
       11 天前
    我不想写 py 味的 Java ,就像有人不想写 Java 味的 Go
    MRongM
        8
    MRongM  
       11 天前
    MAKE JAVA GREAT AGAIN
    xiangyuecn
        9
    xiangyuecn  
       11 天前
    已经进化到了 notepad.exe 无法编写的程度,可喜可贺
    huangsijun17
        10
    huangsijun17  
       11 天前   1
    @NotFoundEgg #6 方便用 jsh 写脚本?运维表示一个语言像之前的 Java 那样又臭又长的,我基本不会用。
    xgdgsc
        11
    xgdgsc  
       11 天前 via Android
    Java Is BAck
    AutumnVerse
        12
    AutumnVerse  
       11 天前 via iPhone
    一个编程语言好与不好不是看语法糖多少,少写一个 calss 一个 function 关键字有什么实际意义吗?反而徒增理解难度
    sagnitude
        13
    sagnitude  
       11 天前
    导入第三方库,以前 maven 配一下就好了,现在还得手动下载 jar 包放 lib 下面,倒退了属于是
    pandaPapa
        14
    pandaPapa  
       11 天前
    我感觉函数式比面向对象, 难多了
    chendy
        15
    chendy  
       11 天前
    我还以为有强制缩进然后去掉花括号了呢…
    spritecn
        16
    spritecn  
       11 天前
    @NotFoundEgg 确实,这些根本就无关紧要,还有用 java 写脚本,一点都不现实,谁家 linux 自带 jdk
    spritecn
        17
    spritecn  
       11 天前
    @chendy 强制缩进就有点背祖了吧
    mingtdlb
        18
    mingtdlb  
       11 天前
    至少现在对你的工作毫无意义!
    lchynn
        19
    lchynn  
       11 天前
    java 本来可以作为各种脚本语言的运行态的, 以前有个 Jython 的, 直接在 java 中写 python 混搭, 最后编译为 java class , 就像 grovvy 和 kotlin , 可惜最后这个项目好像太监了。
    不然还是挺不错的。
    iflyapi
        20
    iflyapi  
       11 天前
    我对 SB 两个字母总有误解
    tzengshinfu
        21
    tzengshinfu  
       11 天前
    刚从 C#转到 Java 时最不习惯就是字串比较要写成 string1.eqauls(string2)
    后面来几个新人也要解释一番
    cooldong287671
        22
    cooldong287671  
       11 天前
    随地大小写
    Cbdy
        23
    Cbdy  
    OP
       11 天前
    @iflyapi SB = Spring Boot, Java 世界最流行的开发框架
    Cbdy
        24
    Cbdy  
    OP
       11 天前
    @sagnitude 我添加了 Lu.java ( Lib Update ),以便根据 lib.txt 自动下载依赖到 lib ,Maven/Gradle 是更强大的构建工具,但也引入了新的概念,这个 Compact Java App 是用来写一点示例代码、教学代码、小脚本的
    EthanZC
        25
    EthanZC  
       11 天前
    Scala YYDS
    JsonNode
        26
    JsonNode  
       11 天前
    里嗦,不如 groovy
    Ayanokouji
        27
    Ayanokouji  
       11 天前
    直接上 kt 吧,语法比 python 优雅,还能完美使用 java 生态
    cookii
        28
    cookii  
       11 天前 via Android
    java 的问题是运行时太重。。。
    spritecn
        29
    spritecn  
       11 天前
    @JsonNode java8 尤其 11 后,groovy 的使命就结束了
    spritecn
        30
    spritecn  
       11 天前
    @JsonNode groovy 发了 5.0,甚至连个像样的资讯都没有
    JsonNode
        31
    JsonNode  
       11 天前
    @spritecn #29 Java 的裹脚布时代不结束,groovy 的使命就不会结束
    JsonNode
        32
    JsonNode  
       11 天前
    @spritecn #30 一个 String Templates 都能难产好几年,不知道有什么技术难题没解决
    guyeu
        33
    guyeu  
       11 天前   1
    您是否在找:JBang
    wuyiccc
        34
    wuyiccc  
       11 天前
    那我为什么不用 python ?
    Cooky
        35
    Cooky  
       11 天前
    非要折腾干脆 clojure
    moverinfo
        36
    moverinfo  
       11 天前 via iPhone
    https://github.com/tinystruct/tinystruct 我也是在做一件简化 Java 开发的工作
    realpg
        37
    realpg  
    PRO
       10 天前
    @CodeCodeStudy #5
    没给你来个 HelloWorldProvider 就不错了
    moefishtang
        38
    moefishtang  
       10 天前 via Android
    > CompactSB.java

    这命名多少带点对 Java 的怨念了
    chenzw2
        39
    chenzw2  
       10 天前
    java25 jvm 内存占用多大?和 python 比呢?
    fbu11
        40
    fbu11  
       10 天前
    不如直接上 kotlin 得了
    var
        41
    var  
       10 天前
    这一点来说 C# 已经完成学习模仿再超越了。
    sky3hao9
        42
    sky3hao9  
       10 天前
    别再整语法糖了, 累了
    ysy950803
        43
    ysy950803  
       10 天前   1
    Pava ?哈哈哈!
    Rennen
        44
    Rennen  
       10 天前
    @spritecn #16 graalvm 嘞
    daiisdai
        45
    daiisdai  
       9 天前 via Android
    我用 Kotlin
    fishman231
        46
    fishman231  
       9 天前
    紧凑语法仅仅是为了对初学者友好,避免提前接触过多概念。并不意味着正常的 java 项目写起来也能这么紧凑。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1100 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 23:19 PVG 07:19 LAX 16:19 JFK 19:19
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86