Java 基础语法
约 1247 字大约 4 分钟
2026-05-18
提示
这里的一切,基于 Java 1.8 只讲基础语法,版本特性不在此,请看左侧菜单栏内容。
数据类型
Q: 有几种基本数据类型?
8 种。 整型 4 种:byte、short、int、long 浮点型 2 种:float、double 布尔型 1 种:boolean 字符型 1 种:char
Q: 基础数据类型和包装类型的区别?
| 基础数据类型 | 包装数据类型 | |
|---|---|---|
| 存储位置 | 栈/堆,直接存值 | 堆 |
| 默认值 | 有 | null |
| 是否可为 null | 否 | 是 |
| 对泛型的支持 | 不支持 | 支持 |
| 功能区别 | 无 | 有丰富的方法 |
| 性能 | 高 | 低 |
| 内存占用 | 低 | 高 |
| 缓存 | 无 | 小范围值缓存 |
| 比较方法 | == 比较值 | == 比较地址,equals()比较值 |
Q: 包装数据类型缓存的作用?
在自动装箱或者 valueOf() 时,先用缓存数据,节省内存。
Q: 浮点数运算精度丢失原理及解决办法?
计算机存储浮点数是二进制的,二进制存储某些小数会导致无限循环,浮点数只能存储有限位数,多余的会被截断,这造成了误差。
解决办法:用 BigDecima。
面向对象
Q: Java 语言特性
封装、继承、多态
Q: 多态是什么?
多态是:同一个方法作用在不同的对象上,产生不同的行为,本质:「父类引用指向子类的对象」,例如:Animal a = new Dog(); a.eat(); 实际调用的是 Dog 类的 eat()。
接口和继承都能满足,但推荐接口,扩展性更好。
Q: 接口和抽象类的区别
| 抽象类 | 接口 | |
|---|---|---|
| 关键字 | abstract class | interface |
| 实例化 | 不能 | 不能 |
| 构造方法 | 有(子类调用) | 无 |
| 成员变量 | 和普通类无异 | 只能定义 public static final 常量 |
| 方法 | 和普通类无异 | Java 8+: 抽象、default方法、static方法Java 9: private方法、private static |
| 调用 | 单继承 | 多实现 |
| 设计目的 | 代码复用、模板化,表达:「是什么」 | 行为契约,解耦,表达:「做什么」 |
| 演进代价 | 新增方法无影响 | 需要小心 default 冲突,有冲突则强制重写。 |
提示
这个问题还会衍生出许多的问题,重点需要理解上述表格,理解他们设计的意义。
接口列,演进代价行:这里也叫重写,一个类实现接口的方法时,Java语言规范也称之为重写。
基础语法
Q: 数组定义方式有哪些?
// 直接列出元素
int[] arr = {1, 2, 3, 4, 5};
// 不指定元素
int[] arr = new int[5];
// 使用 new 并指定元素
int[] arr = new int[]{1, 2, 3, 4, 5};Q: == 和 equals 的区别
基本数据类型:== 比较值
引用对象:== 比较地址,equals 比较值
Q: String、StringBuffer、StringBuilder 区别
| String | StringBuffer | StringBuilder | |
|---|---|---|---|
| 可变性 | 不可变 | 可变 | 可变 |
| 线程安全 | 安全 (不可变) | 安全 (synchronized) | 不安全 |
| 性能 | 低 | 中(有同步开销) | 高 |
| 适用场景 | 少量拼接和固定字符串 | 多线程频繁修改 | 单线程频繁修改 |
| 默认容量 | 无 | 16 字符 | 16 字符 |
| 常用方法 | trim()、subString() | append()、insert、delete() | append()、insert、delete() |
Q: 说一下异常体系
所有异常有一个共同祖先 Throwable 类,它分为 Exception 和 Error。
Exception 分为 Checked Exception 和 Unchecked Exception。
Exception 是程序自身可以处理的异常,Error 是程序自身无法处理的异常。
案例
Checked Exception:IOException、SQLException
Unchecked Exception:NullPointerException、ArrayIndexOutOfBoundsException
Error:OutOfMemoryError、StackOverflowError
Q: 泛型作用和用法是什么?
作用:提升代码的可读性和稳定性,编译器可通过泛型参数检验传入的对象类型。
用法:泛型类、泛型接口、泛型方法
public class Cat<T> {
private T catColor;
public Cat<T catColor> {}
public T getColor() {return T}
}public interface Cat<T> {
public T method();
}public static <T> T Cat(T color) {
return color;
}Q: 反射的优缺点
反射是在程序运行时,动态的获取类信息并且操作类或者对象。
优点:
- 灵活性高:允许动态的创建类,创建对象、调用方法等。
- 解耦:可以编写灵活度更高的代码,降低模块之间的依赖。
缺点:
- 性能开销高
- 安全性降低(破坏了封装性)
- 代码的可读和可维护性降低。
Q: 序列化是什么?
将数据结构、对象转换为可存储的格式,例如 JSON 就是序列化。反过来就是反序列化。
实现 serializable 接口,定义设置 serialVersionUID
Q: IO 流有哪几种?
4 种
字节流:InputStream、OutPutStream
字符流:Reader、Writer
Q: IO 模型有哪些?
3 种:
- BIO (Blocking IO) 阻塞 IO
- NIO (Non-blocking IO) 非阻塞 IO
- 并非单纯的,同步非阻塞 IO,而是「 IO 多路复用 」,问内核是否准备好了数据。
- 同步非阻塞是反复调用 read 拿内核数据。
- AIO (Asynchronous IO) 异步 IO
- 和 NIO 类似,只不过是用通知回调用,内核来告诉程序完成了。
版权所有
版权归属:FelixJY
