没有合适的资源?快使用搜索试试~ 我知道了~
Java基础面试题.docx
资源推荐
资源详情
资源评论
1.JVM
1.1.JVM
Java 虚拟机是运行字节码的虚拟机。JVM 有针对不同系统的特定实现
(Windows,Linux,macOS),目的是使用相同的字节码,给出相同的结果。
1.2.什么是字节码?采用字节码有什么好处?
在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向
任何特定的处理器,只面向虚拟机。
Java 语言通用的字节码方式,在一定程度上解决了传统解释型语言执行效率低的问题,同
时又保留了解释性语言可移植的特点。
所以 Java 程序运行比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程
序无需重新编译便可在多种操作系统的计算机上运行。
1.3.Java 程序从源代码到运行一般有下面 3 步。
.java 文件(源文件) --》 .class 文件(JVM 可理解的字节码文件)--》 机器可执行的二
进制机器码
源文件经过 jdk 中的 javac 编译为字节码文件,再经过虚拟机,变为可执行的二进制机器码
我们需要注意的是 .class-> 机器码这一步。
这一步 JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执
行速度相对比较慢。
而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进
了 JIT 编译器,而 JIT 编译器属于运行时编译。
当 JIT 编译器完成第一次编译后,会将字节码对应的机器码保存下来,下次可以直接使用。
而我们知道,机器码的运行效率是高于 Java 解释器的。
这也解释了我们为什么说 Java 是编译和解释共存的语言。
HotSpot 采用了惰性评估(Lazy Evaluation)的做法,根据二八定律,
消耗大部分系统资源的只有那一小部分的代码(热点代码),而这
也就是 JIT 所需要编译的部分。JVM 会根据代码每次被执行的情况
收集信息并相应地做出一些优化,因此执行的次数越多,它的速度
就越快。JDK 9 引入了一种新的编译模式 AOT(Ahead of Time
Compilation),它是直接将字节码编译成机器码,这样就避免了
JIT 预热等各方面的开销。JDK 支持分层编译和 AOT 协作使用。但
是 ,AOT 编译器的编译质量是肯定比不上 JIT 编译器的。
总结:
Java 虚拟机是运行 Java 字节码的虚拟机。
JVM 有针对不同系统的特定实现,目的是使用相同的字节码,都会给出相同的结果。
字节码和不同系统的 JVM 是实现 Java 语言“一次编译,随处运行”的关键。
2.JDK 和 JRE
JDK 的全称是 Java Development Kit,它是功能齐全的 Java SDK。它拥有 JRE 拥有的一
切,还有编译器(javac)和工具(如 javadoc 和 jdb)。
它能创建和编译程序。
JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java
虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。
但是,它不能用于创建新程序。
3.Java 和 C++的区别?
� 都是面向对象的语言,都支持封装、继承和多态
� Java 不提供指针来直接访问内存,程序内存更加安全
� Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是
接口可以多继承。
� Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存
� 在 C 语言中,字符串或字符数组最后都会有一个额外的字符'\0'来表示结束。但
是,Java 语言中没有结束符这一概念。 这是一个值得深度思考的问题,具体原因推荐看这
篇文章: https://blog.csdn.net/sszgg2006/article/details/49148189
4.import java 和 javax 有什么区别?
刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展 API 包来使用。
然而随着时间的推移,javax 逐渐地扩展成为 Java API 的组成部分。
但是,将扩展从 javax 包移动到 java 包确实太麻烦了,最终会破坏一堆现有的代码。
因此,最终决定 javax 包将成为标准 API 的一部分。
所以,实际上 java 和 javax 没有区别。这都是一个名字。
5.为什么说 Java 语言“编译与解释并存”?
高级编程语言按照程序的执行方式分为编译型和解释型两种。
简单来说,编译型语言是指编译器针对特定的操作系统将源代码一次性翻译成可被该平台执
行的机器码;
解释型语言是指解释器对源程序逐行解释成特定平台的机器码并立即执行。
Java 语言既具有编译型语言的特征,也具有解释型语言的特征,
因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,
生成字节码(*.class 文件),
这种字节码必须由 Java 解释器来解释执行。因此,我们可以认为 Java 语言编译与解释并
存。
6.字符型常量和字符串常量的区别?
� 形式上: 字符常量是单引号引起的一个字符; 字符串常量是双引号引起的 0 个或若
干个字符
� 含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量
代表一个地址值(该字符串在内存中存放位置)
� 占内存大小 字符常量只占 2 个字节; 字符串常量占若干个字节 (注意: char 在
Java 中占两个字节),
7.标识符和关键字的区别是什么?
标识符就是一个名字,在我们编写程序的时候,需要大量地为程序、类、变量、方法等取名
字,于是就有了标识符;
但是有一些标识符,Java 语言已经赋予了其特殊的含义,只能用于特定的地方,这种特殊
的标识符就是关键字。
8. Java 中有哪些常见的关键字?
访问
控制
private
protected
public
类,
方法
和变
量修
饰符
abstract
class
extends
final
implements
interface
native
new
static
strictfp
synchronized
transient
volatile
程序
控制
break
continue
return
do
while
if
else
剩余12页未读,继续阅读
资源评论
红红火火a
- 粉丝: 17
- 资源: 1816
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功