Java作为一门面向对象的编程语言,其基础体系包含三大核心支柱:JVM(Java虚拟机)、面向对象特性和基础语法结构。理解这些概念对后续深入学习至关重要。
JVM是Java实现"一次编写,到处运行"的关键。它就像一位精通多国语言的翻译官,将Java字节码转换为特定平台能理解的机器指令。这种设计带来的直接好处是开发者无需针对不同操作系统重写代码,但同时也引入了少量性能开销——这是Java在早期常被诟病的问题,但随着JIT编译器等技术成熟,性能差距已大幅缩小。
面向对象特性体现在四个方面:
基础语法结构中,数据类型划分尤为关键。基本类型(primitive types)直接存储值,而引用类型(reference types)存储对象地址。这种区分直接影响内存分配方式——基本类型在栈上分配,引用类型在堆上分配对象实例。
关键细节:Java中所有参数传递都是值传递。对于引用类型,传递的是引用的拷贝而非对象本身。这个特性常导致初学者在方法调用时产生对象状态修改的误解。
Java数据类型体系采用严格的静态类型检查,编译时就会验证类型正确性。基本类型包括:
引用类型则包含:
类型转换规则需要特别注意:
三种基本控制结构构成了程序逻辑骨架:
循环控制语句:
实践技巧:在遍历集合时,for-each循环(增强for循环)比传统for循环更简洁且不易出错,但其底层仍是Iterator实现,注意并发修改异常问题。
类定义包含:
java复制[修饰符] class 类名 {
// 字段(成员变量)
[修饰符] 数据类型 字段名;
// 构造方法
[修饰符] 类名(参数列表) { ... }
// 方法
[修饰符] 返回类型 方法名(参数列表) { ... }
}
对象创建过程:
内存管理要点:
继承关系建立:
java复制class SubClass extends SuperClass {
// 可添加新字段/方法
// 可重写父类方法
}
方法重写规则:
多态实现机制:
设计建议:优先使用组合而非继承。继承会带来强耦合,而组合(通过成员变量引用其他对象)更灵活,符合"多用组合,少用继承"的设计原则。
Java异常继承树:
code复制Throwable
├── Error(系统错误,不应捕获)
└── Exception
├── RuntimeException(未检异常)
└── 其他Exception(已检异常)
异常处理方式对比:
| 方式 | 适用场景 | 特点 |
|---|---|---|
| try-catch | 需要恢复的异常情况 | 精确控制异常处理流程 |
| throws | 当前方法无法处理的异常 | 将异常传递给调用者 |
| try-with-resources | 资源自动关闭 | JDK7+,实现AutoCloseable |
创建自定义异常:
java复制class BusinessException extends Exception {
private String errorCode;
public BusinessException(String message, String errorCode) {
super(message);
this.errorCode = errorCode;
}
public String getErrorCode() {
return errorCode;
}
}
异常处理最佳实践:
集合框架主要接口:
code复制Collection
├── List(有序可重复)
│ ├── ArrayList
│ ├── LinkedList
│ └── Vector
├── Set(无序唯一)
│ ├── HashSet
│ └── TreeSet
└── Queue(队列)
└── Deque(双端队列)
Map(键值对)
├── HashMap
├── TreeMap
└── LinkedHashMap
集合类型选择考虑因素:
性能提示:ArrayList在随机访问时性能优异(数组实现),但中间插入/删除成本高;LinkedList在头部/尾部操作高效(链表实现),但随机访问性能差。根据实际场景选择合适实现。
Java IO流主要分类:
常用流类:
Java NIO(New IO)核心组件:
传统IO与NIO对比:
| 特性 | IO | NIO |
|---|---|---|
| 数据流方向 | 单向 | 双向(Channel) |
| 缓冲方式 | 流式 | 块式(Buffer) |
| 阻塞模式 | 阻塞 | 非阻塞/选择器 |
| 适用场景 | 连接数少 | 高并发连接 |
三种创建线程的方法:
java复制class MyThread extends Thread {
public void run() {
// 线程执行逻辑
}
}
// 启动
new MyThread().start();
java复制class MyRunnable implements Runnable {
public void run() {
// 线程执行逻辑
}
}
// 启动
new Thread(new MyRunnable()).start();
java复制class MyCallable implements Callable<String> {
public String call() throws Exception {
return "Result";
}
}
// 启动
FutureTask<String> task = new FutureTask<>(new MyCallable());
new Thread(task).start();
String result = task.get(); // 获取返回值
常见同步工具:
synchronized关键字:
Lock接口实现:
java复制Lock lock = new ReentrantLock();
lock.lock();
try {
// 临界区代码
} finally {
lock.unlock();
}
线程安全建议:优先使用并发工具类而非自己实现同步机制;减少锁粒度;避免嵌套锁;考虑使用不可变对象。