Java语言有哪些特点
- 简单易用,十分灵活
- 面向对象性(继承,多态,封装)
- 可跨平台性(Java语言是编译与解释共存的语言,一次编译多处运行,运行与平台无关,仅仅和Java虚拟机有关)
- 支持多线程(c++语言没有内置多线程的机制,想要实现多线程需要借助操作系统的多线程机制;而Java则拥有内置的多线程机制)
- 安全性
- 严格遵守面向对象规范,封装数据细节,只提供接口给用户,这样保证了数据级安全
- 数据边界检查,这样就不会出现缓存溢出等安全漏洞
- 无指针运算,Java中除了基本数据类型,其他都是引用数据类型,引用数据类型不能被直接赋予内存地址,从而保证了内存级安全
- 强制类型转换,非相同数据类型之间不能进行强制转换,否则会抛出异常
JVM与JDK与JRE
1. JVM
JVM是Java虚拟机,用来运行Java程序编译后的字节码文件,Java针对不同的系统都设计有特定的虚拟机,目的是使用相同的字节码都会得出相同的结果,这也是Java跨平台特性的关键所在。
1.1 什么是字节码文件?
字节码文件可以理解为Java虚拟机能够运行的文件,它是以.class结尾,通过Java编译器编译生成,它不面向任何操作系统,只面向JVM
1.2 Java程序从源代码代运行过程
我们需要格外注意的是 .class->机器码 这一步。在这一步 JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进了 JIT 编译器,而 JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的语言。
2. JRE
JRE是Java运行环境,它是Java运行字节码文件所需的所有内容的集合,它包括JVM和Java运行所需要的库等,但是他不能用于创建新程序。
3. JDK
JDK(Java Development Kit)是Java开发工具和Java基础的类库是功能齐全的Java SDK,它包括了Java运行环境,一堆Java工具(javac/java/jdb等),拥有JRE所拥有的一切,能够编译和创建Java程序。
4. 三者之间的关系
4.1 三者间联系
JVM不能单独搞定.class的执行,解释.class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的JRE目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是JVM,lib中则是JVM工作所需要的类库,而JVM和lib和起来就称为JRE。 JVM+Lib=JRE
4.2 三者区别
1)JDK和JRE区别: 在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。
2)JRE和JVM区别: JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。
3)JVM和JRE区别: JVM定义执行规则,JRE按照规则执行。
5. 为什么说Java语言是编译与解释共存的语言
高级编程语言按照程序的执行方式分为编译型和解释型两种。简单来说,编译型语言是指编译器针对特定的操作系统将源代码一次性翻译成可被该平台执行的机器码;解释型语言是指解释器对源程序逐行解释成特定平台的机器码并立即执行。比如,你想阅读一本英文名著,你可以找一个英文翻译人员帮助你阅读, 有两种选择方式,你可以先等翻译人员将全本的英文名著(也就是源码)都翻译成汉语,再去阅读,也可以让翻译人员翻译一段,你在旁边阅读一段,慢慢把书读完。而Java语言是先编译后解释的,所以说是编译与解释共存的语言。