当然可以!下面是适合“【Java 基础问题 第二篇】”的内容结构和详细讲解,定位为 新手进阶篇,建议延续第一篇基础语法之后,从面向对象、内存机制与常用类库展开。
【Java 基础问题 第二篇】
面向对象、内存模型与常用类进阶解析
📚 目录
- 什么是构造方法?构造方法和普通方法的区别?
- Java 中对象的创建与销毁过程是怎样的?
- 什么是方法重载(Overloading)与重写(Overriding)?
- Java 中的 this 和 super 有什么区别?
- Java 的类加载机制是怎样的?
- Java 的内存模型(JVM内存划分)
- Java 中的包装类(Wrapper Class)与自动拆装箱
- 字符串常量池与
==
与.equals()
的区别 - Java 中的 final、static、transient、volatile 各是什么?
- Java 中常见异常及其继承关系图
1. 什么是构造方法?构造方法和普通方法的区别?
构造方法(Constructor) 用于在创建对象时初始化对象状态,名称与类名相同,无返回值。
class Person {
String name;
Person(String n) {
name = n;
}
}
特性 | 构造方法 | 普通方法 |
---|---|---|
名称 | 与类名相同 | 任意合法名称 |
返回类型 | 无(不能写 void) | 有返回类型 |
调用时机 | 创建对象时自动调用 | 显式调用 |
2. Java 中对象的创建与销毁过程是怎样的?
创建过程:
- 类加载 → 分配内存 → 零值初始化
- 执行构造器代码
- 返回对象引用
销毁过程:
Java 使用 垃圾回收机制(GC) 自动管理内存:
- 当对象无引用指向时,就可能被 GC。
- 不推荐重写
finalize()
,已在 Java 9 弃用。
3. 方法重载 vs 重写
比较点 | 重载(Overload) | 重写(Override) |
---|---|---|
定义位置 | 同一个类 | 子类与父类之间 |
参数列表 | 必须不同 | 必须相同 |
返回类型 | 可以不同 | 必须相同或子类 |
访问权限 | 无要求 | 子类不能降低访问级别 |
关键字 | 无 | 可选 @Override 注解 |
4. this 与 super 的区别?
关键字 | 作用 |
---|---|
this | 指当前类的对象、成员 |
super | 指父类的对象、成员 |
class Parent { void hello() { System.out.println("Parent"); } }
class Child extends Parent {
void hello() {
super.hello(); // 调用父类方法
System.out.println("Child");
}
}
5. 类加载机制:加载 -> 验证 -> 准备 -> 解析 -> 初始化
Java 的类加载器体系包括:
- Bootstrap ClassLoader:加载 JDK 核心类
- Extension ClassLoader:加载扩展类库
- Application ClassLoader:加载用户代码
可通过 Class.forName()
动态加载类。
6. JVM 内存结构
区域 | 作用 |
---|---|
程序计数器 | 当前线程执行字节码的位置指针 |
Java 虚拟机栈 | 方法调用的局部变量表、栈帧 |
本地方法栈 | 调用 native 方法 |
堆(Heap) | 所有对象分配的主要区域 |
方法区 | 存储类信息、静态变量、常量池等 |
元空间(Java 8) | 替代方法区,使用本地内存 |
7. 包装类与自动拆装箱
Java 提供 8 种基本类型对应的包装类:
基本类型 | 包装类 |
---|---|
int | Integer |
boolean | Boolean |
char | Character |
… | … |
Integer a = 10; // 自动装箱
int b = a; // 自动拆箱
8. String:== vs equals 与常量池
String a = "hello";
String b = "hello";
String c = new String("hello");
a == b
:true(常量池复用)a == c
:false(新对象)a.equals(c)
:true(值相等)
结论:比较字符串内容请用 .equals()
!
9. final / static / transient / volatile
关键字 | 含义 |
---|---|
final | 表示常量/不可继承/不可重写/不可修改 |
static | 表示静态变量/方法,属于类不属于对象 |
transient | 用于序列化时,表示不需要被序列化的字段 |
volatile | 多线程中,禁止线程缓存变量,保证可见性 |
10. 常见异常类继承结构图
Throwable
├── Error(程序无法处理)
└── Exception
├── IOException
├── SQLException
└── RuntimeException
├── NullPointerException
├── IndexOutOfBoundsException
└── IllegalArgumentException
✅ 总结
本篇你掌握了 Java 面向对象核心概念、内存结构、字符串比较及常用类机制,为之后学习集合框架、多线程、异常处理打下坚实基础。
发表回复