JavaLearning
JDK 11 安装目录结构
^c7cb79
- bin: 该路径下存放了 JDK 的各种工具命令, 常用的
javac/java等命令就放在该路径下. - conf: 该路径下存放了 JDK 的相关配置文件.
- include: 存放一些平台特定的头文件.
- jmods: 该目录下存放了 JDK 的各种模块. JDK 9 之后新增.
- legal: 该目录下包含了 JDK 各模块的授权文档.
- lib: 该路径下存放的是 JDK 工具的一些补充 JAR 包. 比如
src.zip文件中保存了 Java 的源代码. - README 和 COPYRIGHT 等说明性文档.
环境变量配置
Path: 定义 JDK 安装位置CLASSPATH: 定义.class文件存放位置, 用于加载类库- 对于 1.4 及以前 JDK 版本, 需要手动指定为
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar - 对于 1.5 及以后 JDK 版本, 隐式设置为
.. 显示设置时隐式设置失效, 需要手动设置当前目录 - 对于 9 及以后 JDK 版本, 随
jmods变化已移除%JAVA_HOME%\lib\dt.jar和%JAVA_HOME%\lib\tools.jar - 可在启动时通过启动参数
-classpath或-cp进行指定, 会覆盖环境变量配置
- 对于 1.4 及以前 JDK 版本, 需要手动指定为
JDK 9 增加 REPL 工具 jshell
- 可以直接在终端中使用 jshell 来打开此工具
JDK 11 GC
- 2011 年 7 月发布的 Java 7 提供了 G1 垃圾回收器来代替原有的并行标记/清除垃圾回收器(简称 CMS). 并宣布在未来的日子里, G1 垃圾回收器将会逐渐取代原有的 CMS 垃圾回收器.
- 2014 年 3 月发布的 Java 8 删除了 HotSpot JVM 中的永生代内存(PermGen, 永生代内存主要用于存储一些需要常驻内存, 通常不会被回收的信息), 而是改为使用本地内存来存储类的元数据信息, 并将之称为: 元空间(Metaspace), 这意味着以后不会再遇到
java.lang.OutOfMemoryError: PermGen错误. - 2017 年 9 月发布的 Java 9 彻底删除了传统的 CMS 垃圾回收器, 因此运行 JVM 的
DefNew+CMS/ParNew+SerialOld/Incremental CMS等组合全部失效. Java 命令(该命令负责启用 JVM 运行 Java 程序)以前支持的以下 GC 相关选项全部被删除.-Xincgc-XX:+CMSIncrementalMode-XX:+UseCMSCompactAtFullCollection-XX:+CMSFullGCsBeforeCompaction-XX:+UseCMSCollectionPassing- 此外,
-XX:+UseParNewGC选项也被标记为过时, 将来也会被删除.
- Java 9 默认采用低暂停(low-pause)的 G1 垃圾回收器, 并为 G1 垃圾回收器自动确定了几个重要的参数设置, 从而保证 G1 垃圾回收器的可用性、确定性和性能. 如果部署项目时为 java 命令指定了
-XX:+UseConcMarkSweepGC选项希望启用 CMS 垃圾回收器, 系统会显示警告信息. - Java 11 则再次引入了新的、实验性的 Z 垃圾回收器(简称 ZGC), 这个垃圾回收器具有以下几个优点.
- 垃圾回收时暂停时间不会超过 10ms
- 暂停时间不会随着堆或实时集合的大小而增加
- 可处理几百 MB 到几 TB 的堆内存
- 由于 ZGC 的核心是并发垃圾回收器, 这意味它可在 Java 线程继续执行时, 完成所有的繁重工作(如标记、压缩、引用处理、表清理等), 从而大大降低了该垃圾回收器对程序响应速度的影响
- 由于 ZGC 在 Java 11 中还处于实验性阶段(在未来可能取代 G1 垃圾回收器), 因此 Java 默认并未启用 ZGC 垃圾回收器. 如果希望运行 Java 程序时启用 ZGC 垃圾回收器, 则可在运行 java 命令时使用如下选项.
-XX:+UnlockExperimentalVMOptions-XX:+UseZGC- 11 中 ZGC 垃圾回收器只能在 64 位的 Linux 平台上使用.
- 此外, Java 11 还引入了实验性的 Epsilon 垃圾回收器. 严格来说, Epsilon 并不算真正的垃圾回收器, 它只负责内存分配, 并不负责内存回收. 因此, 这个垃圾回收器主要在性能测试中比较有用, 用于与其他垃圾回收器的开销/收益比进行对比.
JavaDoc
常用注解
@author: 指定 Java 程序的作者@version: 指定源文件的版本@deprecated: 不推荐使用的方法@param: 方法的参数说明信息@return: 方法的返回值说明信息@see: "参见", 用于指定交叉参考的内容@exception: 抛出异常的类型@throws: 抛出的异常,和@exception同义
创建 package 说明文件
- 在包中包含
package.html文件
- 在包中包含
创建 javadoc 文档
shelljavadoc [--options] file | package
浮点数
特殊的浮点数
java// NaN System.out.println(Double.NaN); System.out.println(0/0.0); // Infinity System.out.println(Double.POSITIVE_INFINITY); System.out.println(1/0.0); // -Infinity System.out.println(Double.NEGATIVE_INFINITY); System.out.println(-1/0.0); // Exception in thread "main" java.lang.ArithmeticException: / by zero System.out.println(1/0);
变量声明
- Java 10 开始支持使用
var定义局部变量
switch
- switch 语句的表达式只能是
byte/short/int/char/string(Java7+) /Enum几种类型