理解什么是Java | JVM、JRE、JDK | Java的语言特性 | Java的类加载机制 | Java和C++的区别

理解什么是Java | JVM、JRE、JDK | Java的语言特性 | Java的类加载机制 | Java和C++的区别,第1张

理解什么是Java | JVM、JRE、JDK | Java的语言特性 | Java的类加载机制 | Java和C++的区别

目录
    • 1.Java的语言特性:
    • 2.JVM、JRE和JDK的关系
    • 3.什么是跨平台?
    • 4.字节码文件
    • 5.Java中的类加载
    • 6.Java和C++的区别

1.Java的语言特性:
  1. 简单性:Java语言底层是采用C++语言实现的,相对于C++语言来说,java是简单的,在java语言中程序不需要复杂的指针,继承方面也只有单继承,

  2. 面向对象:java语言和C++都是面向对象编程的语言,java中提供了封装、继承、多态等面向对象的机制

  3. 健壮性:在C++中无用的数据需要程序员手动释放,在Java中Java语言引入了自动垃圾回收机制(GC机制),Java程序启动了一个单独的打击回收线程,时刻检测内存的使用情况,在特定时机会回收/释放垃圾数据,这样会让内存时刻处于最好的状态。

  4. 多线程:java语言支持多个线程同时并发执行,同时也可以提供线程环境下的安全机制

  5. 可移植性/跨平台性:表示java程序只要编译一次就可以在各个 *** 作平台上就行运行。Java 代码既可以运行在 windows 的环境下,又可以运行在 Linux 的环境下,而不需要修改 Java 源程序。这是因为Java虚拟机(JVM,Java Virtual Machine)这种机制,实际上java运行的时候并不是直接运行在 *** 作系统上面的,而是在 *** 作系统上先安装一个JVM,把Java程序放到JVM当中运行,JVM屏蔽了各种 *** 作系统之间的差异,这样就完成了跨平台。但是JVM虽然搞定了跨平台,但是同时也带了一些问题,没有JVM,Java程序试运行不了的。

2.JVM、JRE和JDK的关系
  • JVM - Java Virtual Environment 是Java虚拟机,Java程序是需要在虚拟机上运行的,不同的平台有自己的虚拟机,因此Java可以实现跨平台
  • JRE - Java Runtime Environment 是Java程序所必须的环境的集合,包括Java虚拟机和Java程序所需要的核心类库等。核心类库有java.lang包:包含了Java程序必不可少的系统类
  • JDK - Java Development Kit 提供给Java开发人员使用,其中包含了Java开发工具,也包括了JRE。如果这台机只运行Java程序,则不需要安装JDK只需要安装JRE即可

3.什么是跨平台?

平台指的是不同的 *** 作系统

跨平台是指Java源代码一次编译后,可以在不同的 *** 作系统中运行比如(window、liunx)

实现原理:只要该系统可以安装相应的虚拟机,那么该系统就可以运行Java程序

4.字节码文件

Java编译后生成的.class文件就是字节码文件,他不面向任何特定的处理器,只面向虚拟机

采用字节码的好处:Java语言通过字节码的方式,从一定程度上解决了传统语言效率低的问题,同时又保留了解释型语言可移植的特点,而且字节码并不专对一种特定的机器,因此Java程序无需重新编译就可以在不同的计算机上运行。

5.Java中的类加载

使用“Java”命令运行已编译的Java程序,假设编译之后的字节码文件是A.class,则在dos命令窗口中执行java A 命令,这个时候Java虚拟机就启动了。java虚拟机通过==“类加载器ClassLoader”==从硬盘中找到A.class文件并装载,字节码文件被装载到Java虚拟机之后,Java虚拟机解释器对字节码进行解释,最后解释为二进制码,然后 *** 作系统通过执行二进制指令来和硬件平台完成交互。

  1. Java 程序从开发到运行包括编译和运行两个阶段,这两个阶段可以在不同的 *** 作系统 中完成,例如在 windows 环境下进行编译,在 Linux 环境下运行,这是因为有 JVM 机制的存在,做到了一次编译到处运行(跨平台/可移植)。
  2. 编译阶段需要使用 javac.exe(安装 JDK 之后该命令就存在了)命令,运行阶段需要使 用 java.exe(安装 JRE 之后该命令就存在了)命令。
  3. 一个 Java 源文件可能会编译生成多个 class 文件。
  4. Java 源文件中的源代码如果不符合 Java 的语法机制则编译时编译器会提示错误信息, 并且无法生成 class 文件。而 class 文件才是最终要执行的程序,此时将 Java 源文件删除是不会影响 Java 程序运行的(当然,我们也不必删除 java 源文件,因为在 运行 class 文件之后,如果没有达到预期的运行效果,这个时候还需要将 Java 源代码修改,重新编译,以达到最终的运行效果)。
  5. 若生成的字节码文件名为 A.class,那么我们称 A为一个类的名字
  6. 当编译阶段完成之后,我们可以使用 JRE 中的 java.exe 命令运行程序,例如执行命令 “java A”,该命令执行后会启动类加载器,类加载器去硬盘上搜索 A.class 文件,找到该字节 码文件之后,将其加载到 JVM 当中,JVM 中的解释器会将 A.class 字节码文件解释为 *** 作系统可以执行的二进制码,然后 *** 作系统通过执行二进制码和硬件平台交互。
  7. 运行 Java 程序的前提是当前 *** 作系统上已经安装了对应版本的 JVM(JVM 不是单独安装的,安装 JRE 即可,不同的 *** 作系统需要安装不同版本的 JRE,不同版本的 JRE 对应不同版本的 JVM)。
6.Java和C++的区别
  • 都是面向对象的语言,都可以进行封装和继承
  • Java不提供多继承,C++支持多继承,但是Java中的接口可以支持多继承
  • Java有自动内存管理机制(GC),无需程序员手动释放无用内存
  • Java不提供指针来访问内存,内存更加安全

a有自动内存管理机制(GC),无需程序员手动释放无用内存

  • Java不提供指针来访问内存,内存更加安全

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5522759.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存