Java平台简介
Java的特性:
-
跨平台能力:Java的标志性特点是“一次编写,到处运行”(Write once, run anywhere)。通过字节码和Java虚拟机(JVM),Java可以在不同的操作系统和硬件上运行,这种跨平台的抽象屏蔽了底层的细节,使得Java程序具备了很强的可移植性。
-
垃圾收集:Java通过垃圾收集器(Garbage Collector)管理内存,大部分情况下,程序员无需手动处理内存分配和回收。常见的垃圾收集器包括Serial GC、Parallel GC、CMS、G1等,每种收集器在不同的工作负载下表现最佳。
JVM、JRE、JDK的关系
**JVM(Java Virtual Machine)**是Java虚拟机,Java程序运行在虚拟机上。不同的平台有对应的JVM实现,这也是Java能够跨平台运行的基础。
**JRE(Java Runtime Environment)**包括Java虚拟机和Java程序所需的核心类库。核心类库主要是java.lang
包,其中包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程和异常处理类等。如果想运行一个开发好的Java程序,只需安装JRE。
**JDK(Java Development Kit)**是为Java开发人员提供的开发工具包,包含了JRE以及编译工具(如javac.exe
)、打包工具(如jar.exe
)等开发工具。因此,安装了JDK就不需要再单独安装JRE。
Java是解释执行的吗?
严格来说,这个说法不完全准确。Java源代码首先通过javac
编译成字节码(bytecode)。在运行时,Java虚拟机(JVM)内嵌的解释器将字节码转换为机器码。然而,常见的JVM(如Oracle JDK的HotSpot JVM)提供了即时编译器(JIT),能够在运行时将热点代码编译成机器码,从而实现部分代码的编译执行,而非解释执行。
字节码的好处
字节码是Java源代码通过虚拟机编译器编译后生成的文件(.class文件),它不针对任何特定的处理器,只针对虚拟机。
采用字节码的主要好处在于它使Java实现了编译期与运行时的分离。Java源代码通过javac
编译生成字节码,而不是直接生成机器码。这种方式通过JVM的跨平台抽象,屏蔽了操作系统和硬件的细节,实现了“一次编译,到处运行”的目标。
基础语法
JDK 1.8 之后的新特性
-
接口默认方法:Java 8允许在接口中添加非抽象的方法实现,只需使用
default
关键字。 -
Lambda表达式和函数式接口:Lambda表达式本质上是匿名内部类的一种简化形式,可以将代码块作为参数传递。使用Lambda表达式可以使代码更简洁,但需注意不要滥用以保持代码可读性。
-
Stream API:Stream API提供了一种函数式编程方式,可以对集合进行复杂操作。它允许指定对集合进行的操作,如查找、过滤和映射数据,并且支持并行执行。
-
方法引用:方法引用提供了一种简洁的语法,可以直接引用已有的Java类或对象的方法或构造器,与Lambda表达式结合使用时尤为强大。
-
新的日期时间API:Java 8引入了改进的日期时间API,以便更好地管理日期和时间。
-
Optional类:为了解决
NullPointerException
问题,Java 8引入了Optional
类。Optional
类旨在减少空指针异常的发生,并鼓励编写更干净的代码。 -
新工具:如Nashorn引擎(
jjs
)、类依赖分析器(jdeps
)等新编译工具。
构造器是否可以重写
构造器不能被重写(override),但可以被重载(overload)。因此,在一个类中可以看到多个构造函数。