1.总结

  1. Java语言是跨平台的
  2. 怎么理解跨平台?  一次编译,到处运行。Java代码只需要编写一次,可以在不同的操作系统当中。
  3. 怎么实现的?在操作系统上安装一个Java虚拟机(JVM)不同的操作系统安装的JVM是不同版本的。
  4. 怎么安装不同版本的JVM?下载不同版本的JDK即可。
  5. 我们Java程序员编写程序的时候,是在Xxxx.java文件中编写,这个文件叫做源文件。(源码)Xxxx.java源文件需要经过一个编译的过程,变成Xxxx.class文件。JVM将字节码解释成机器码,操作系统执行机器码和硬件平台交互。
  6. Java的加载与执行原理
  7. Java程序包括两大阶段:编译阶段:依靠javac.exe命令;运行阶段:依靠java.exe命令。编译和运行可以在不同的OS上运行。
  8. 描述整个过程:
  9. 程序员新建一个.java结尾的文件,该文件称为源文件,在该文件中编写Java源码
  10. 使用javac.exe命令对Xxx.java文件进行编译              语法:javac  java源文件的路径  注意:java源文件可以是绝对路径,也可以是相对路径
  11. 当java源文件语法合法,经过javac进行编译,会生成class文件。
  12. xxxx.class文件称为字节码文件,字节码文件不是机器码,操作系统无法执行。
  13. 使用java命令来运行Java程序:语法:java 类名
  14. 描述  java T 这个命令执行之后发生了什么?

        首先java命令会启动JVM。

        JVM会启动classLoader(类加载器)

        classloader通过一个环境变量classpath找“T.class”文件

15.找不到责报错,找到则执行,怎么执行?

执行T.class中的入口方法:main方法。

16.JVM会将class字节码文件解释成机器码二进制,操作系统执行机器码和底层硬件进行交互。

  1. Path环境变量
  2. path环境变量和java无关,是OS级别的一个环境变量。
  3. Windows操作系统找命令的时候从那里开始找?
  4. 默认情况下是从当前路径下找命令,如果找不到,再去path环境变量中查找。
  5. 如果找到则执行,找不到就会报错,错误信息如下:'jslkjg' 不是内部或外部命令,也不是可运行的程序或批处理文件。
  6. classpath
  7. 这个环境变量是隶属于java的,和操作系统无关。
  8. 这个环境变量是给谁指路的? 是给类加载器指路的。
  9. 类加载:classloader
  10. classloader会从classpath环境变量指定的路径中搜索“字节码文件”,找到字节码则执行,找不到字节码报错、
  11. 当classpath没有配置的情况下,classloader默认去“当前路径”下找。

2.面试题

2.1你认为Java是解释型语言还是编译型语言?

Java既不是纯解释型语言,也不是纯编译型语言,而是一种混合型语言。Java源代码首先会被编译成字节码文件,字节码文件不是针对特定的硬件和操作系统而编译的,而是针对Java虚拟机(JVM)而编译的。字节码文件在运行时由JVM解释执行,JVM会将字节码文件转换为机器码并执行,这样就可以实现跨平台性,使得Java程序可以在任何安装了JVM的计算机上运行。因此,Java是一种混合型语言,它既具备编译型语言的高效性,又具备解释型语言的跨平台性。

2.2Java是如何做到跨平台的?

Java是一种基于虚拟机的编程语言,它的跨平台性是通过Java虚拟机(JVM)实现的。Java程序在编译时会被编译成字节码,而不是直接编译成机器语言。这些字节码可以在任何支持Java虚拟机的平台上运行,包括Windows、Mac、Linux等操作系统。
Java虚拟机是一个抽象的计算机,它提供了一个独立于硬件平台的运行环境。当Java程序在不同的操作系统上运行时,JVM会将字节码解释成机器码,从而实现跨平台运行。这种机制保证了Java程序在不同平台上的一致性和可移植性。
总的来说,Java的跨平台性是通过将程序编译成字节码,再由Java虚拟机解释执行实现的。这种机制使得Java程序可以在不同平台上运行,无需重新编译。

2.3解释一下Java中的类路径是什么?

Java中的类路径(Classpath)是指JVM在搜索类文件(.class文件)时所使用的路径。在Java中,当需要加载一个类时,JVM会按照一定的顺序在类路径中查找该类的字节码文件。如果找到了该文件,则会加载该类并创建相应的对象。

类路径可以由多个路径组成,路径之间用分号(Windows系统)或者冒号(Unix/Linux系统)分隔。在Java中,类路径可以分为系统类路径和用户类路径。

系统类路径是JVM默认的类路径,它包含了Java运行环境中的核心类库和扩展类库。系统类路径可以通过系统属性"java.class.path"来获得。

用户类路径是用户自定义的类路径,它包含了用户自己编写的类文件和第三方库文件。用户类路径可以通过"-classpath"或"-cp"选项指定,也可以通过设置系统环境变量CLASSPATH来指定。

通常情况下,Java程序的类文件都位于用户类路径中,而核心类库和扩展类库位于系统类路径中。在编写Java程序时,需要根据实际情况配置类路径,以确保程序能够正常运行。

4.4. Java字节码是机器码吗?

Java字节码不是机器码。Java源代码在编译时会被编译成Java字节码(.class文件),而不是直接编译成机器码。Java字节码是一种中间代码,它是一种平台无关的二进制代码,可以在任何支持Java虚拟机(JVM)的平台上运行。
Java字节码是由Java编译器生成的一种二进制文件,它包含了Java源代码编译后的中间代码,而不是机器码。Java字节码可以被JVM解释执行,JVM会将字节码解释成机器码,从而实现跨平台运行。
Java字节码的优点是可以在不同平台上运行,而不需要重新编译。这种机制使得Java程序具有很强的可移植性和跨平台性。但是,由于Java字节码需要被JVM解释执行,因此Java程序的执行速度相对较慢。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐