关于 Java 可能存在的 10 个误解(2021 版) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Cbdy
V2EX    Java

关于 Java 可能存在的 10 个误解(2021 版)

  •  1
     
  •   Cbdy Aug 28, 2021 3907 views
    This topic created in 1711 days ago, the information mentioned may be changed or developed.

    关于 Java 可能存在的 10 个误解( 2021 版)

    1. Java 是编译型语言而不是解释型语言

    在 JEP222 ( JShell,Java9 )和 JEP330 ( Java11 )实装后,Java 可以很方便地用 REPL 解释执行,也可以使用带 Shebang 的小脚本,如

    #!/usr/bin/env java --source 11 public class Main { public static void main(String[] args) { System.out.println("Hello World!"); } } 

    而对于现代的编程语言,关于编译执行和解释执行的分类已经变得越来越模糊了,大多数的编程语言都加上了 JIT,而传统的编译型语言也为语言加上了能够解释执行的“快捷方式”。


    2. 如果在 Java 代码中使用var,Java 就变成动态语言了

    var是一个方便使用的语法糖,编译器帮忙推导出了静态类型,不会导致 Java 变成动态语言。

    值得关注的是,类型推导已经是现代编程语言的共同特性,很多静态类型的编程语言都已经装备了这个特性。


    3. Java 的泛型是假泛型

    为了兼容已有的代码,Java 实现了编译时泛型以及少量的运行时的泛型信息,或者说称之为擦除泛型。

    Java 的泛型提高了程序的健壮性,但由于缺少一些特性也为人诟病,但称之为“假的泛型”是一种误解。事实上,越来越多的动态语言正在尝试增加“可擦除的类型系统”、类型注释( Type Hint ),用于提高程序的健壮性。

    而 Java 的类型(泛型)系统已经被证明是不健全的( Unsound ),但由于 JVM 没有实现泛型,所以并没有因此影响 JVM 的可靠性。


    4. Java 应用程序分发时必须携带 JVM,不能编译成原生系统支持的二进制程序

    这并不是 Java 应用分发的唯一方式,无论是古老的 GCJ ( 1998 ),还是近几年流行的 GraalVM Native Image,都可以将 Java 代码编译成一个原生系统支持的二进制程序,这能显著提高程序的启动速度和分发效率。

    另一个选择是 JEP392 ( Java16 )带来的 jpackage tool,它能够帮助生成对应操作系统的安装包,解决应用程序分发的最后一公里问题。


    5. Java17 之后,就不能使用com.sun.*包里面的类了

    大多数com.sun.*的包都是供 JDK 内部使用的,这些包在 JEP403 ( Java17 )后将无法再被外部的类使用,但仍然存在少部分模块的公共类是在包com.sun.*下,且可以被外部的类导入使用,只不过对它们的反射行为被禁止了。


    6. Java 和 Javascript 之间完全没关系

    Java 和 Javascript 名字很像,在历史和设计上也有一定的关系,两者使用了类似的语法,Javascript 借鉴了 Java 少量 API 和编码风格,同时 Javascript 在设计之初特意避开了设计class以免和 Java 相像。

    Java 和 Javascript 的商标都在甲骨文( Oracle )手中,所以如果使用 Javascript 做宣传也可能被甲骨文法务找上门。

    但除此之外,两者是两门相差很大的编程语言,它们有各自的工具链、应用领域、社区和演进路径。


    7. 使用 Java 写网站要依赖 Tomcat 等 HTTP 库

    JDK 从 1.6 开始提供 HTTP 模块com.sun.net.httpserver.HttpServer,使用起来也同其他编程语言类似。

    在 JEP408 中,将提供一个简易的命令行”Simple Web Server“,可以像 Python 那样python -m http.server一键启用一个 Web 服务器。

    8. Java 垃圾回收时,会产生糟糕的 STW,影响应用的运行

    低暂停时间和无暂停时间的的垃圾回收器已经被发明,如 OpenJDK 目前可以启用 ZGC 以降低 GC 的 STW 对应用的影响。


    9. 编写 Java 程序往往需要编写大量的 XML

    曾经是的,但是当前的 Java 社区倾向于使用 Java 语言或者 JVM 上的方言来书写配置,以取代过去的 XML 配置。


    10. Android 平台实现了 Java 平台

    事实上,Android 平台并没有实现 Java 平台必要的设施,而是通过特殊的手段编译了 Java 的字节码,所以并不符合 Java 程序“一次编写,到处运行”的口号,也不能使用 Powered by Java 作宣传。

    7 replies    2021-08-29 10:41:11 +08:00
    liuxu
        1
    liuxu  
       Aug 28, 2021
    SEO 大佬
    AEDaydreamer
        2
    AEDaydreamer  
       Aug 28, 2021
    关于 JS 和 JAVA 的关系,《 Javascript 二十年》第一章讲的很清楚,感兴趣的都可以看看
    Cbdy
        3
    Cbdy  
    OP
       Aug 28, 2021 via Android
    @AEDaydreamer 是的,上面说的有个地方不太对,不设计类是避免和 Java 竞争,那个时代正是面向对象风靡的时代,类被认为是一个强大而时髦的功能
    Oktfolio
        4
    Oktfolio  
       Aug 28, 2021
    11. Java 开发 Web 、Web API 开发效率低
    lysS
        5
    lysS  
       Aug 28, 2021
    一般的说法是将编译语言是编译为机器码
    sxfscool
        6
    sxfscool  
       Aug 28, 2021
    无暂停时间的 gc 是指 erlang 的么
    About     Help     Advertise     Blog     API     FAQ     Solana     4037 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 63ms UTC 04:17 PVG 12:17 LAX 21:17 JFK 00:17
    Do have faith in what you're doing.
    ubao msn 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