作者:董李阳
分类:Java基础 | 面试总结 | 学习笔记
1️⃣ Java语言有哪些特点?
Java自1995年诞生以来,凭借其稳定性和跨平台能力成为企业级开发的主流语言之一。以下是Java的五大核心特性:
-
简单易学,类库丰富
语法接近C/C++,但去除了指针、多重继承等复杂概念;提供庞大的标准库(如java.util、java.io、java.net),提升开发效率。 -
面向对象(OOP)
支持封装、继承、多态三大特性,强调“万物皆对象”,有助于构建模块化、高内聚低耦合的系统。这是Java最重要的设计思想。 -
平台无关性(Write Once, Run Anywhere)
通过JVM(Java虚拟机)实现跨平台运行。Java源码编译为.class字节码,在任意安装了JVM的平台上均可执行。 -
可靠与安全
强类型检查、自动内存管理(GC)、异常处理机制保障程序稳定性;JVM提供沙箱环境、类加载机制防止恶意代码入侵。 -
支持多线程
内置对多线程的支持(Thread类和Runnable接口),能有效利用CPU资源,适用于高并发场景(如Web服务、后台任务)。
📌 小贴士:Java的“一次编写,到处运行”得益于JVM抽象层,不同操作系统上的JVM会将字节码翻译成本地机器指令。
2️⃣ 面向对象 vs 面向过程的区别?
| 对比维度 | 面向过程(Procedure-Oriented) | 面向对象(Object-Oriented) |
|---|---|---|
| 核心思想 | 分析问题的解决步骤,用函数一步步实现流程 | 将问题分解为多个“对象”,描述对象在解决问题中的行为 |
| 典型代表语言 | C、Pascal | Java、C++、Python |
| 性能表现 | ⭐⭐⭐⭐⭐ 更贴近硬件,执行效率高 | ⭐⭐⭐☆ 性能略低(因有对象开销、动态绑定等) |
| 适用场景 | 单片机、嵌入式系统、资源受限环境 | 大型软件、Web应用、GUI程序、团队协作项目 |
| 维护性 | 修改困难,容易牵一发而动全身 | 易于扩展、复用、维护(封装+继承+多态) |
| 耦合度 | 高(函数间依赖强) | 低(通过接口通信,松耦合) |
🎯 举个例子:
- 面向过程:做菜 = 买菜 → 洗菜 → 切菜 → 炒菜 → 上桌(按步骤调用函数)
- 面向对象:厨师、食材、锅具都是对象,“炒菜”是厨师的一个行为,食材有自己的属性和状态。
✅ 总结:面向对象更适合复杂系统的建模,虽然性能稍逊,但在可维护性和扩展性上优势明显。
3️⃣ 八种基本数据类型的大小及封装类
Java有8种基本数据类型,它们不依赖于具体平台(与C不同),具有固定的大小和默认值。
| 基本类型 | 大小(字节) | 默认值 | 封装类 |
|---|---|---|---|
| byte | 1 | (byte)0 | Byte |
| short | 2 | (short)0 | Short |
| int | 4 | 0 | Integer |
| long | 8 | 0L | Long |
| float | 4 | 0.0f | Float |
| double | 8 | 0.0d | Double |
| boolean | - | false | Boolean |
| char | 2 | \u0000 | Character |
⚠️ 注:boolean在JVM中没有专用指令,通常用int表示(占4字节),数组中以byte存储(1字节)。
🔍 关键区别:基本类型 vs 引用类型
| 区别点 | 基本类型(如int) | 封装类(如Integer) |
|---|---|---|
| 存储位置 | 栈内存 | 堆内存(引用在栈,对象在堆) |
| 默认值 | 0, false, \u0000 | null |
| 是否可为null | 不可以 | 可以为null(便于区分未赋值) |
| 使用场景 | 高频计算、性能敏感 | 集合(如List)、泛型、判空逻辑 |
示例代码:
Integer a = null;
int b = a; // ❌ 报错!NullPointerException(自动拆箱失败)
📌 自动装箱/拆箱:JDK 5引入,允许int <-> Integer自动转换,但要注意空指针风险。
4️⃣ 标识符的命名规则与规范
✅ 含义
标识符是指程序员自定义的名称,用于命名:
- 类名(Student)
- 方法名(getName())
- 变量名(age, score)
- 接口名(Runnable)
- 包名(com.example.demo)
✅ 命名规则(硬性要求)
- 只能包含:英文字母(a-z, A-Z)、数字(0-9)、下划线_、美元符号$
- 不能以数字开头 → 如2student是非法的
- 不能是Java关键字或保留字 → 如class、int、goto
- 区分大小写 → myVar ≠ MyVar
🚫 典型错误示例:2b(既不道德也不合法 😂)
✅ 命名规范(推荐做法)
| 类型 | 规范 | 示例 |
|---|---|---|
| 类名、接口名 | 大驼峰法(UpperCamelCase) | Student, UserService |
| 方法名、变量名 | 小驼峰法(lowerCamelCase) | getAge(), userName |
| 常量名 | 全大写 + 下划线分隔 | MAX_SIZE, PI_VALUE |
| 包名 | 全小写,反域名命名 | com.company.project |
💡 文件名应与公共类名一致(一个.java文件最多一个public class)
5️⃣ instanceof 关键字详解
📌 基本介绍
instanceof是Java中的一个双目运算符,也叫类型比较运算符,用于判断某个对象是否属于指定类、子类或接口的实例。
语法:
boolean result = obj instanceof Class;
参数说明:
- obj:一个对象引用(可以是变量、表达式)
- Class:类名、抽象类名或接口名
- 返回值:true 或 false
✅ 返回 true 的三种情况
- obj 是 Class 的直接实例
- obj 是 Class 的子类实例(包括间接继承)
- obj 实现了 Class 所表示的接口
✅ 使用示例
Object str = “Hello”;
System.out.println(str instanceof String); // true
System.out.println(str instanceof Object); // true
System.out.println(str instanceof Integer); // false
// 继承关系
Animal a = new Dog();
System.out.println(a instanceof Animal); // true
System.out.println(a instanceof Dog); // true
// 接口实现
Bird bird = new Bird();
System.out.println(bird instanceof Flyable); // true
⚠️ 注意事项
- null instanceof X → 永远返回 false(即使X是Object)
- 编译期检查类型兼容性:若两个类型无继承关系(如String和Integer),编译报错
- 仅适用于引用类型,不能用于基本数据类型(如42 instanceof int 是语法错误)
- 泛型擦除限制:无法判断泛型真实类型
❌ list instanceof List // 非法
✅ list instanceof List // 合法
💡 实际应用场景
-
安全向下转型(Downcasting)
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.bark();
} -
处理混合类型集合
for (Object item : list) {
if (item instanceof String) {
String s = (String) item;
System.out.println("字符串: " + s);
} else if (item instanceof Number) {
System.out.println("数字: " + ((Number)item).doubleValue());
}
} -
设计模式中的类型判断(策略、工厂)
🆕 Java 14+ 新特性:模式匹配(Pattern Matching for instanceof)
简化代码,避免重复强转:
// 旧写法
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}
// 新写法(Java 14+)
if (obj instanceof String s) {
System.out.println(s.length()); // 直接使用变量s
}
✅ 优势:更简洁、安全、减少冗余代码。
✅ 总结
| 主题 | 核心要点 |
|---|---|
| Java 特点 | 简单、OOP、跨平台、安全、多线程 |
| OOP vs 过程 | OOP 易维护,过程高性能 |
| 数据类型 | 8种基本类型 + 封装类,注意null与自动装箱 |
| 标识符 | 规则要遵守,规范要养成习惯 |
| instanceof | 类型安全卫士,配合模式匹配更强大 |
推荐阅读:
- 《Java核心技术卷I》第3章:Java的基本程序结构
- Oracle官方文档:Primitive Data Types https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
如果觉得这篇总结对你有帮助,欢迎点赞、收藏、转发!也欢迎在评论区交流更多Java学习心得!
1345

被折叠的 条评论
为什么被折叠?



