1. Java 语言有哪些特点?

1
2
3
4
5
6
7
8
9
简单易学;
面向对象:(封装,继承,多态);
平台无关性( Java 虚拟机实现平台无关性);
支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);
可靠性(具备异常处理和自动内存管理机制);
安全性(Java 语言本身的设计就提供了多重安全防护机制如访问权限修饰符、限制程序直接访问操作系统资源);
高效性(通过 Just In Time 编译器等技术的优化,Java 语言的运行效率还是非常不错的);
支持网络编程并且很方便;
编译与解释并存;

2. 为什么说 Java 语言“编译与解释并存”?

1
这是因为 Java 语言既具有编译型语言的特征,也具有解释型语言的特征。因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行。

3. Java 和 C++ 的区别?

1
2
3
4
5
6
7
8
我知道很多人没学过 C++,但是面试官就是没事喜欢拿咱们 Java 和 C++ 比呀!没办法!!!就算没学过 C++,也要记下来。

虽然,Java 和 C++ 都是面向对象的语言,都支持封装、继承和多态,但是,它们还是有挺多不相同的地方:

Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。
C ++同时支持方法重载和操作符重载,但是 Java 只支持方法重载(操作符重载增加了复杂性,这与 Java 最初的设计思想不符)。

4 .注释有哪几种形式?

1
2
3
4
5
6
7
单行注释:通常用于解释方法内某单行代码的作用。

多行注释:通常用于解释一段代码的作用。

文档注释:通常用于生成 Java 开发文档。

用的比较多的还是单行注释和文档注释,多行注释在实际开发中使用的相对较少。

5.标识符和关键字的区别是什么?

1
2
3
在我们编写程序的时候,需要大量地为程序、类、变量、方法等取名字,于是就有了 标识符 。简单来说, 标识符就是一个名字 。

有一些标识符,Java 语言已经赋予了其特殊的含义,只能用于特定的地方,这些特殊的标识符就是 关键字 。简单来说,关键字是被赋予特殊含义的标识符 。比如,在我们的日常生活中,如果我们想要开一家店,则要给这个店起一个名字,起的这个“名字”就叫标识符。但是我们店的名字不能叫“警察局”,因为“警察局”这个名字已经被赋予了特殊的含义,而“警察局”就是我们日常生活中的关键字。

6 .continue、break 和 return 的区别是什么?

1
2
3
4
5
6
7
8
在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是,有时候可能需要在循环的过程中,当发生了某种条件之后 ,提前终止循环,这就需要用到下面几个关键词:

continue:指跳出当前的这一次循环,继续下一次循环。
break:指跳出整个循环体,继续执行循环下面的语句。
return 用于跳出所在方法,结束该方法的运行。return 一般有两种用法:

return;:直接使用 return 结束方法执行,用于没有返回值函数的方法
return value;:return 一个特定值,用于有返回值函数的方法

7. Java 中的几种基本数据类型了解么?

1
2
3
4
5
6
7
Java 中有 8 种基本数据类型,分别为:

6 种数字类型:
4 种整数型:byteshortintlong
2 种浮点型:floatdouble
1 种字符类型:char
1 种布尔型:boolean

8 .基本类型和包装类型的区别?

1
2
3
4
5
6
7
8
基本类型和包装类型的区别?
基本类型 vs 包装类型

用途:除了定义一些常量和局部变量之外,我们在其他地方比如方法参数、对象属性中很少会使用基本类型来定义变量。并且,包装类型可用于泛型,而基本类型不可以。
存储方式:基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被 static 修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。
占用空间:相比于包装类型(对象类型), 基本数据类型占用的空间往往非常小。
默认值:成员变量包装类型不赋值就是 null ,而基本类型有默认值且不是 null
比较方式:对于基本数据类型来说,== 比较的是值。对于包装数据类型来说,== 比较的是对象的内存地址。所有整型包装类对象之间值的比较,全部使用 equals() 方法。

9 . 什么是自动拆装箱?

1
2
装箱:将基本类型用它们对应的引用类型包装起来;
拆箱:将包装类型转换为基本数据类型;

10.为什么浮点数运算的时候会有精度丢失的风险?

1
2
3
这个和计算机保存浮点数的机制有很大关系。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么浮点数没有办法用二进制精确表示。

就比如说十进制下的 0.2 就没办法精确转换成二进制小数:

11.如何解决浮点数运算的精度丢失问题?

1
BigDecimal 可以实现对浮点数的运算,不会造成精度丢失。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 BigDecimal 来做的。

1 2.静态变量有什么作用?

1
静态变量也就是被 static 关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存。

13.字符型常量和字符串常量的区别?

1
2
3
4
形式 : 字符常量是单引号引起的一个字符,字符串常量是双引号引起的 0 个或若干个字符。
含义 : 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)。
占内存大小:字符常量只占 2 个字节; 字符串常量占若干个字节。
⚠️ 注意 char 在 Java 中占两个字节

14 . 面向对象当中的三大特征?

1
封装  继承  多态

15 . 里面的封装是什么意思? 有什么作用?

1
2
3
4
5
6
7
8
9
1.提高代码的安全性

2.提高代码的复用性

3.“高内聚”:封装细节,便于修改内部代码,提高可维护性

4.“低耦合”:简化外部调用,便于调用者使用,便于扩展和写作。

Java中4种“访问控制符”。分别为:privatedefaultprotectedpublic,他们说明了面相对象的封装性。

16.面向对象和面向过程的区别?

1
2
面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。
面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。

17.创建一个对象用什么运算符?对象实体与对象引用有何不同?

1
2
3
4
new 运算符,new 创建对象实例(对象实例在 内存中),对象引用指向对象实例(对象引用存放在栈内存中)。

一个对象引用可以指向 0 个或 1 个对象(一根绳子可以不系气球,也可以系一个气球);
一个对象可以有 n 个引用指向它(可以用 n 条绳子系住一个气球)。