JAVA概念复习
####JAVA概念介绍
0. 面试:
1. 谈谈你对 Java 平台的理解
1. 对于“Java 是解释执行”这句话,这个说法不太准确。
* 我们开发的 Java 的源代码,首先通过Javac 编译成为字节码(bytecode),然后,在运行时,通过 Java 虚拟机(JVM)内嵌的解释器将字节码转换成为最终的机器码。
* 但是常见的 JVM,比如我们大多数情况使用的 Oracle JDK提供的 Hotspot JVM,都提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行了。
2. “Java 是解释执行”,这句话正确吗?
* 对于“Java 是解释执行”这句话,这个说法不太准确。我们开发的 Java 的源代码,首先通过 Javac 编译成为字节码(bytecode),然后,在运行时,通过 Java 虚拟机(JVM)内嵌的解释 器将字节码转换成为最终的机器码。
* 但是常见的 JVM,比如我们大多数情况使用的 Oracle JDK 提供的 Hotspot JVM,都提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器, JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是 解释执行了。
* JIT和动态编译的理解
* JIT是JVM虚拟机中多种编译器的一种,JVM还有解释性编译器等。JIT可用于即时动态编译
* 正常情况下,将程序编写完毕之后再统一将其编译为字节码文件,再将字节码编译为机器码,随着代码的增多,这样集中处理太慢了
* 动态编译----一般在我们编写代码的时候编写一行就编译一行并直接编译到机器码的程度
* 具体理解可以参考debug时,每次点击下一步,直接就会出现运行之后的结果,而不是该行程序的字节码。
* 在这种情况下,属于从编译直接变为机器码执行,而不再是传统的解释执行。
* 比如服务器上就不能即时编译,必须直接运行编译好的class字节码文件
* 因而 java不完全是解释执行,在也存在编译执行
1. JDK,JRE,JVM三者之间的关系,以及JDK、JRE包含的主要结构有哪些
* JDK = JRE + Java的开发工具(javac.exe,java.exe,javadoc.exe)
*
* JRD = JVM + Java核心类库
2. jdk的bin目录下,javac.exe和java.exe的区别
1. 都是应用程序
3. dos命令:MS-DOS(Microsoft Disk Operating System)
1. 常用dos命令
* dir 展示当前目录下的文件
* cd 目录 进入指定目录,不能跨盘符
* 盘符: 进入对应的盘符 例如 D: 可以进入d盘根路径
* md 目录名 即mkdir,创建目录/文件夹
* rd [/S] [/Q]目录名 删除目录
* /S表示删除目录树,除目录本身外,还删除指定目录下的所有子目录
* /Q安静模式,带/S删除目录树时不需要确认
* del 文件名 删除文件
* cd.. 进入上一级目录
* cd/ 或cd \ 进入当前目录所在的盘根目录
* cls 清屏
2. 注意:
1. dos中的删除是不可逆的,回收站里也没有
4. 环境变量
1. 原理解释
1. 在当前位置找不到内容时,就会去path(系统变量,是环境变量的一种)中定义的路径中查找,将一个路径配置到path中,该路径就可以在任意位置被访问到了
2. 一个环境变量的多个值中,越前面定义的越先被找到
2. 配置步骤
1. 找到环境变量的位置 “我的电脑”的“属性”--高级系统设--环境变量--下方的系统变量
2. 修改或者新建以下三个变量
1. JAVA_HOME jdk安装路径(bin目录的上一级路径)
2. CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
3. PATH(在原有基础上追加) %JAVA_HOME%\bin %JAVA_HOME%\jre\bin
5. Java应用程序运行机制
* 计算机高级语言类型分为编译型和解释性。Java是两种类型的结合
* 运行流程
* 利用文本编辑器编写Java源程序为.java源文件
* 再利用编译器(javac)将源程序译为.class字节码文件
* 最后利用虚拟机(解释器,java )解释执行 JRE(—>类加载器——>字节码校验器——>解释器—>)
6. javac.exe和java.exe的区别
1. javac.exe用于编译java 文件,java.exe用于运行class文件
2. class文件不一定都是由java文件编译而来的,也可能是scala等语言的编译结果