1.什么是Java?
答:Java是一种高级的、面向对象的编程语言,由Sun Microsystems于1995年发布。它的最大特点是“一次编写,到处运行”,通过Java虚拟机(JVM)实现跨平台能力。Java具有丰富的类库和强大的生态系统,广泛应用于企业级开发、移动开发(如Android)、大数据和云计算等领域。此外,Java还具备健壮性、安全性和多线程支持,适合构建高性能、高可靠性的应用程序。
2.Java语言有哪些特点?
答:
①⾯向对象(封装,继承,多态);
②平台⽆关性,平台⽆关性的具体表现在于,Java 是“⼀次编写,到处运⾏(Write Once,Run any Where)”的语⾔,因此采⽤ Java 语⾔编写的程序具有很好的可移植性,⽽保证这⼀点的正 是 Java 的虚拟机机制。在引⼊虚拟机之后,Java 语⾔在不同的平台上运⾏不需要重新编译。
③⽀持多线程。C++ 语⾔没有内置的多线程机制,因此必须调⽤操作系统的多线程功能来进⾏多线 程程序设计,⽽ Java 语⾔却提供了多线程⽀持;
④编译与解释并存;

3.JVM、JDK 和 JRE 有什么区别?
答:
JVM
:
Java Virtual Machine
,
Java
虚拟机,
Java
程序运⾏在
Java
虚拟机上。针对不同系统的实现 (Windows
,
Linux
,
macOS
)不同的
JVM
,因此
Java
语⾔可以实现跨平台。
JRE
:
Java
运⾏时环境。它是运⾏已编译
Java
程序所需的所有内容的集合,包括
Java
虚拟机
(
JVM
),
Java
类库,
Java
命令和其他的⼀些基础构件。但是,它不能⽤于创建新程序。
JDK
: Java Development Kit
,它是功能
⻬
全的
Java SDK
。它拥有
JRE
所拥有的⼀切,还有编译器 (javac
)和⼯具(如
javadoc
和
jdb
)。它能够创建和编译程序。
简单来说,
JDK
包含
JRE
,
JRE
包含
JVM
。

4.说说什么是跨平台性?原理是什么?
答:所谓跨平台性,是指 Java
语⾔编写的程序,⼀次编译后,可以在多个系统平台上运⾏。
实现原理:
Java
程序是通过
Java
虚拟机在系统平台上运⾏的,只要该系统可以安装相应的
Java
虚拟机,该系统就可以运⾏ java
程序。
5.什么是字节码?采⽤字节码的好处是什么?
答:
所谓的字节码,就是
Java
程序经过编译之类产⽣的
.class
⽂件,字节码能够被虚拟机识别,从⽽实现 Java 程序的跨平台性。
Java
程序从源代码到运⾏主要有三步:
编译
:将我们的代码(
.java
)编译成虚拟机可以识别理解的字节码
(.class)
解释
:虚拟机执⾏
Java
字节码,将字节码翻译成机器能识别的机器码
执⾏
:对应的机器执⾏⼆进制机器码。

6.解释 Java 的平台无关性是如何实现的?
答:Java 源码通过编译器生成字节码(.class 文件),由 JVM 解释或即时编译(JIT)为机器码执行。不同平台的 JVM 负责适配本地操作系统,实现“一次编写,到处运行”。
7.为什么说 Java 语⾔“编译与解释并存”?
答:
高级编程语言按照程序的执行方式分为
编译型和
解释型两种。
简单来讲,编译型语言就像是制作一部已经剪辑好的完整电影。编剧先把剧本(即源代码)交给剪辑师,剪辑师一次性将剧本制作成一部完整的、可以直接在电影院播放的影片(对应特定操作系统下可执行的机器码),观众直接观看就行。
而解释型语言则类似现场直播表演。演员拿着剧本(源程序),在舞台上一边由导演逐句指导(解释器逐行解释),演员一边按照导演的指导立刻表演出来(立即执行成特定平台的机器码),观众同步观看表演。
Java语言比较独特,它既具备编译型语言的特点,又有解释型语言的特性。这就好比一场大型的线上演出,Java程序要经历两个阶段。首先,编剧把剧本交给专业人员进行前期剪辑,生成一个类似半成品的视频素材(生成字节码,即*.class文件)。这个素材还不能直接在线上播放,必须再经过一个线上播放平台(JVM),将这些素材按照线上平台的规则,实时转化成观众设备能识别的视频格式(解释成操作系统能识别的机器码),最后由观众设备(操作系统)播放出来。所以,我们可以说Java语言编译与解释并存。
8.Java 中的 public static void main(String[] args) 方法有什么作用?
答:是 Java 程序的入口方法,JVM 从这里开始执行程序。
9.请分别介绍一下Java的数据类型
答:ava 的数据类型分为基本数据类型和引用数据类型

基本数据类型:
数值型
整数类型(byte
、
short
、
int
、
long
)
浮点类型(float
、
double
)
字符型(
char
)
布尔型(
boolean
)
引⽤数据类型:
类(
class
)
接⼜(
interface
)
数组
([])
10.什么是⾃动类型转换以及强制类型转换?
Java 所有的数值型变量可以相互转换,当把⼀个表数范围⼩的数值或变量直接赋给另⼀个表数范围⼤的变量时,可以进⾏⾃动类型转换;反之,需要强制转换。
拿个很简单的例子来说,⼩杯⾥的⽔倒进⼤杯没问题,但⼤杯的⽔倒进⼩杯就不⾏了,可能会溢出。
不正确。
3.4
是单精度数,将双精度型(
double
)赋值给浮点型(
float
)属于下转(
downcasting,也称为窄化)会造成精度损失,因此需要强制类型转换
float f =(float)3.4;
或者写成
float f
=3.4F
short s1 = 1; s1 = s1 + 1; 对吗?
short s1 = 1; s1 += 1; 对吗?
对于
short s1 = 1; s1 = s1 + 1;
编译出错,由于
1
是
int
类型,因此
s1+1
运算结果也是
int
型,需
要强制转换类型才能赋值给
short
型。
而 short s1 = 1; s1 += 1;
可以正确编译,因为
s1+= 1
相当于
s1 = (short(s1 + 1);
其中有隐含的强
制类型转换。
11.String、StringBuilder、StringBuffer 的区别是什么?
答:
String 不可变,线程安全;
StringBuilder 可变,非线程安全;
StringBuffer 可变,线程安全(方法加 synchronized)。
12.什么是自动装箱与拆箱?
答:
装箱:自动将基本类型转换为对应的包装类(如 int → Integer)
拆箱:将包装类型转换为基本数据类型

示例:
Integer i = 1688 ; / /装 箱
int n = i ; / /拆 箱
13.&和&&有什么区别?
答:
&运算符有两种⽤法: 短路与 、 逻辑与 。
& &运算符是短路与运算。逻辑与跟短路与的差别是⾮常巨⼤的,虽然⼆者都要求运算符左右两端的布 尔值都是 true 整个表达式的值才是 true。
& &之所以称为短路运算是因为,如果& &左边的表达式的值是 false,右边的表达式会被直接短路掉,
不会进⾏运算
。很多时候我们可能都需要⽤& &⽽不是&。
例如在验证⽤户登录时判定⽤户名不是 null ⽽且不是空字符串,应当写为 username != null
&&!username.equals("") ,⼆者的顺序不能交换,更不能⽤&运算符,因为第⼀个条件如果不成⽴, 根本不能进⾏字符串的 equals ⽐较,否则会产⽣ NullPointerException 异常。
注意:逻辑或运算符(|)和短路或运算符(| |)的差别也是如此。