1、java既有解释型语言的特点,又有编译型需要的特征。java程序需要先编译后解释。
编译生成与平台无关的.class文件,这个文件可以跨平台,解释是通过不同平台的java虚拟机解释成特定平台的对应机器码。
引用李刚老师的比喻,拿手机充电器来比喻,jvm(java虚拟机)其实就是对应的数据线,电流就是.class文件,经过数据线后就会被jvm解释成对应平台的机器码运行。
不同的数据线的大的USB接口都是一样的,而小的一头则适应不同的平台。这也就是java跨平台的办法。编译的.class文件或者源代码进行跨平台,由jvm解决机器码的问题。从而实现跨平台。
javac编译的.class文件,不受平台影响,都一样,而jvm解释的机器码根据机器不同而不同。
2、JDK、JRE和JVM的关系
JDK包含JRE,JRE包含JVM。
可以把它们分别比喻成,
JDK(java标准版开发包)是地球,包含生物和生物生存需要的生存环境。
JRE(Java运行时环境)是自然环境,有水,空气,阳光。
JVM(java虚拟机)是生物。
3、模块化系统,其实就是一个包含包的包,将常用的包都放在一个包内。对不同类别的包分门别类。
4、编译java程序的命令
javac -d destdir srcFile
5、运行java程序的命令
java java类名
6、补充一个一次完成编译和运行的命令
java 类名.java
2021-11-26试了一下,会报错,之前都不会,奇怪,报错信息如下
5中的类名不包括.java文件后缀。
7、JDK1.5以后不需要设置classpath,因为默认是当前路径,如果一定要设置classpath也需要记得加上.代表当前路径。
8、不论什么平台java命令是严格区分大小写的。
9、路径中绝对不行出现空格。
10、jshell可以快速测试新特性,无需写类,无需编译解释。
11、java的垃圾回收器,java11版本抛弃了CMS垃圾回收器,使用G1垃圾回收器,引入了实验性的ZGC,但是只能用于linux64位平台,而且需要显式启动。
垃圾回收器负责回收垃圾,还有整理碎片化内存空间。
12、绝对不要用IDE。