Java特性:
- 面向对象(封装,继承,多态)。Java是一门面向对象的语言,封装,继承,多态是面向对象编程的三大特性。
- 平台无关性(JVM运行.class文件)。由于JVM和字节码的存在,Java可以做到Write once,run anywhere(一次编写,到处运行)
- 语言(泛型,Lambda)
- 类库(集合,并发,网络,IO/NIO)
- JRE(Java运行环境,JVM,类库)
- JDK(Java开发工具,包括JRE,javac,诊断工具)
- 垃圾收集,通过垃圾收集器回收分配的内存
JDK与JRE
日常生活中接触到的JRE(Java Runtime Environment)指的是Java运行环境,JDK(Java Development Kit)指的Java开发环境,JDK比JRE提供更多的工具,比如编译器,各类诊断工具。
Java是解释执行还是编译执行?
开发者开发的JAVA源代码,通过JAVAC编译成字节码,再通过Java虚拟机(JVM)中内嵌的解释器转换成最终的机器码(此时属于解释执行)。但是在常见的Java虚拟机中(Oracle JDK提供的Hotspots JVM)自带了JIT(Just-InTime)编译器,也就是通常所说的动态编译器,JIT在运行时可将热点代码直接编译成机器码(此时是编译执行,而不是解释执行了)。在Java9中,提供的AOT编译器是在运行前直接将字节码转换成机器码。
众所周知,通常把Java分为编译期与运行时,编译期仅仅是把Java文件编译生成class文件(内部是字节码),Java就是通过字节码以及JVM这种抽象,以此当作一种中间层,忽略了硬件与操作系统,这也是Java实现Write once,run anywhere的基础。运行时是JVM通过类加载器加载字节码,解释或者编译执行。