Java基础面试题上
大约 5 分钟
Java基础面试题上
Java 语言基础面试题
1. Java 语言有哪些特点?
- 简洁性:Java 语言的语法比 C++ 简单,去掉了一些复杂的功能(如指针、头文件)。
- 面向对象:Java 是一种面向对象的语言,所有代码都围绕对象进行设计。
- 跨平台性:Java 程序可以在任何支持 Java 的设备上运行,这得益于 Java 的字节码技术。
- 内存管理:Java 自动管理内存,通过垃圾回收机制(GC)来清理不再使用的对象。
- 安全性:Java 提供了一些安全机制,如 Java 沙箱模型,防止恶意代码访问系统资源。
2. Java SE vs Java EE
- Java SE(标准版):是 Java 的基本版本,提供了核心功能,如基本语法、数据类型、集合框架、文件 I/O 等。
- Java EE(企业版):是在 Java SE 基础上扩展的,主要用于开发企业级应用,提供了如 Servlet、JSP、EJB、JPA 等技术。
3. JVM vs JDK vs JRE
- JVM(Java 虚拟机):是一种执行 Java 字节码的虚拟机器,它使得 Java 可以跨平台。
- JDK(Java 开发工具包):是 Java 开发的完整工具包,包含了编译器(javac)、调试器(jdb)、JRE 等开发工具。
- JRE(Java 运行时环境):提供了运行 Java 程序所需的环境,包含了 JVM 和一些标准类库,但不包含开发工具。
4. 什么是字节码?采用字节码的好处是什么?
- 字节码:是 Java 编译器生成的中间代码,不同于传统的机器码,它是平台无关的,可以在任何平台的 JVM 上运行。
- 好处:平台无关性(一次编译,到处运行),提高了跨平台能力。
5. 为什么说 Java 语言“编译与解释并存”?
- Java 程序在编译阶段会被编译成字节码,而字节码在运行时由 JVM 解释执行。这样就能在不同的平台上运行相同的 Java 程序。
6. AOT 有什么优点?为什么不全部使用 AOT 呢?
- AOT(Ahead-of-Time 编译):指的是在程序运行之前将代码编译成机器码。
- 优点:运行时不需要解释和编译,启动速度快,性能更好。
- 缺点:编译时间长,代码的跨平台性可能受到限制,因此不适合所有场景。
7. Oracle JDK vs OpenJDK
- Oracle JDK 是由 Oracle 提供的 JDK,包含更多的商业支持。
- OpenJDK 是一个开源的 JDK 版本,遵循 GPL 协议,由社区维护。
8. Java 和 C++ 的区别?
- 内存管理:Java 自动管理内存(垃圾回收),而 C++ 需要手动管理内存。
- 平台无关性:Java 是跨平台的,而 C++ 编译后的程序只能在特定平台上运行。
- 指针:C++ 使用指针,Java 则没有指针,减少了内存管理的复杂性。
9. 基本语法
- 注释有哪几种形式:Java 支持单行注释(
//)、多行注释(/* ... */)和文档注释(/** ... */)。 - 标识符和关键字的区别:标识符是程序中用来标识变量、函数、类等的名字,关键字是 Java 中有特殊意义的词,如
class,if,while等。 - Java 语言关键字:
public,private,class,static,if,else,for等。
10. 自增自减运算符与移位运算符
- 自增自减:
++和--用于增加或减少变量的值。 - 移位运算符:
<<,>>,>>>用于对二进制位进行移动操作。
11. continue、break 和 return 的区别是什么?
- continue:跳过当前循环的本次迭代,继续执行下次循环。
- break:退出当前循环或 switch 语句。
- return:结束方法并返回指定的值。
12. 基本数据类型
- Java 中的几种基本数据类型:
int(整数)、double(浮点数)、char(字符)、boolean(布尔值)等。 - 基本类型和包装类型的区别:基本类型是值类型,而包装类型(如
Integer,Double)是对象类型。 - 包装类型的缓存机制:为了提高性能,Java 对一些常用的包装类型(如
Integer范围 -128 到 127)进行了缓存。 - 自动装箱与拆箱:自动装箱是将基本类型转换成对应的包装类型;拆箱是将包装类型转换为基本类型。
13. 浮点数运算中的精度丢失问题
- 精度丢失:浮点数在计算机中不能精确表示所有的十进制小数,因此会有精度丢失。
- 解决方法:可以使用
BigDecimal类来进行高精度计算,或者避免使用浮点数进行货币等精确计算。
14. 超过 long 整型的数据应该如何表示?
- 对于超过
long范围的数据,可以使用BigInteger类,它能处理任意大小的整数。
15. 变量、成员变量与局部变量的区别?
- 局部变量:在方法或块内部声明的变量,只在该方法或块内有效。
- 成员变量:类中的变量,可以是实例变量或静态变量。
16. 静态变量有什么作用?
- 静态变量:属于类而不是实例,所有对象共享同一份数据。
17. 字符型常量和字符串常量的区别?
- 字符型常量:用单引号括起来,如
'A'。 - 字符串常量:用双引号括起来,如
"Hello"。
18. 方法
- 什么是方法的返回值? 方法的返回值是指该方法在执行完毕后返回的结果。没有返回值的方法使用
void。 - 方法有哪几种类型? 方法可以是实例方法(依赖于对象)或者静态方法(依赖于类)。
- 静态方法不能调用非静态成员:因为静态方法没有实例对象,它无法访问实例的成员。
- 静态方法和实例方法有何不同? 静态方法属于类,实例方法属于对象。
- 重载和重写有什么区别?
- 重载:方法名相同,但参数不同。
- 重写:子类重新定义父类的方法。
- 可变长参数:方法参数的个数不确定,可以使用
...来定义。
