在 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,而传统的编译型语言也为语言加上了能够解释执行的“快捷方式”。
var
,Java 就变成动态语言了var
是一个方便使用的语法糖,编译器帮忙推导出了静态类型,不会导致 Java 变成动态语言。
值得关注的是,类型推导已经是现代编程语言的共同特性,很多静态类型的编程语言都已经装备了这个特性。
为了兼容已有的代码,Java 实现了编译时泛型以及少量的运行时的泛型信息,或者说称之为擦除泛型。
Java 的泛型提高了程序的健壮性,但由于缺少一些特性也为人诟病,但称之为“假的泛型”是一种误解。事实上,越来越多的动态语言正在尝试增加“可擦除的类型系统”、类型注释( Type Hint ),用于提高程序的健壮性。
而 Java 的类型(泛型)系统已经被证明是不健全的( Unsound ),但由于 JVM 没有实现泛型,所以并没有因此影响 JVM 的可靠性。
这并不是 Java 应用分发的唯一方式,无论是古老的 GCJ ( 1998 ),还是近几年流行的 GraalVM Native Image,都可以将 Java 代码编译成一个原生系统支持的二进制程序,这能显著提高程序的启动速度和分发效率。
另一个选择是 JEP392 ( Java16 )带来的 jpackage tool,它能够帮助生成对应操作系统的安装包,解决应用程序分发的最后一公里问题。
com.sun.*
包里面的类了大多数com.sun.*
的包都是供 JDK 内部使用的,这些包在 JEP403 ( Java17 )后将无法再被外部的类使用,但仍然存在少部分模块的公共类是在包com.sun.*
下,且可以被外部的类导入使用,只不过对它们的反射行为被禁止了。
Java 和 JavaScript 名字很像,在历史和设计上也有一定的关系,两者使用了类似的语法,JavaScript 借鉴了 Java 少量 API 和编码风格,同时 JavaScript 在设计之初特意避开了设计class
以免和 Java 相像。
Java 和 JavaScript 的商标都在甲骨文( Oracle )手中,所以如果使用 JavaScript 做宣传也可能被甲骨文法务找上门。
但除此之外,两者是两门相差很大的编程语言,它们有各自的工具链、应用领域、社区和演进路径。
JDK 从 1.6 开始提供 HTTP 模块com.sun.net.httpserver.HttpServer
,使用起来也同其他编程语言类似。
在 JEP408 中,将提供一个简易的命令行”Simple Web Server“,可以像 Python 那样python -m http.server
一键启用一个 Web 服务器。
低暂停时间和无暂停时间的的垃圾回收器已经被发明,如 OpenJDK 目前可以启用 ZGC 以降低 GC 的 STW 对应用的影响。
曾经是的,但是当前的 Java 社区倾向于使用 Java 语言或者 JVM 上的方言来书写配置,以取代过去的 XML 配置。
事实上,Android 平台并没有实现 Java 平台必要的设施,而是通过特殊的手段编译了 Java 的字节码,所以并不符合 Java 程序“一次编写,到处运行”的口号,也不能使用 Powered by Java 作宣传。
1
liuxu 2021-08-28 14:32:51 +08:00
SEO 大佬
|
2
AEDaydreamer 2021-08-28 17:04:54 +08:00
关于 JS 和 JAVA 的关系,《 JavaScript 二十年》第一章讲的很清楚,感兴趣的都可以看看
|
3
Cbdy OP @AEDaydreamer 是的,上面说的有个地方不太对,不设计类是避免和 Java 竞争,那个时代正是面向对象风靡的时代,类被认为是一个强大而时髦的功能
|
4
Oktfolio 2021-08-28 18:55:50 +08:00
11. Java 开发 Web 、Web API 开发效率低
|
5
lysS 2021-08-28 19:55:49 +08:00
一般的说法是将编译语言是编译为机器码
|
6
sxfscool 2021-08-28 23:43:29 +08:00
无暂停时间的 gc 是指 erlang 的么
|
7
Cbdy OP |