# Java核心编程技能实战指南
## 一、Java核心技能精要
### 1. 面向对象编程(OOP)的深度解析
- 类与对象:通过Student类实现封装
```java
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// getters/setters & toString()省略
}
```
- 继承与多态:创建Teacher类继承Person,实现run()方法
```java
abstract class Person {
abstract void run();
}
class Teacher extends Person {
@Override
void run() {
System.out.println(教师在跑步);
}
}
```
### 2. 集合框架高效应用
- List场景:使用ArrayList实现动态学生列表
```java
List students = new ArrayList<>();
students.add(new Student(张三, 20));
students.sort(Comparator.comparingInt(s -> s.getAge()));
```
- Map高级技巧:时间戳排序的LRU缓存实现
```java
Map lruCache = new LinkedHashMap<>(16, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > 100;
}
};
```
### 3. 进阶IO技术
- NIO非阻塞模型:实现简单的聊天服务器
```java
ServerSocketChannel server = ServerSocketChannel.open();
server.configureBlocking(false);
selector = Selector.open();
server.register(selector, SelectionKey.OP_ACCEPT);
```
### 4. 多线程核心技术
- 线程池精简配置:
```java
ExecutorService pool = new ThreadPoolExecutor(
5, 10, 60L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100),
new NamedThreadFactory(my-pool)
);
```
- 线程安全工具:使用AtomicInteger实现计数功能
```java
AtomicInteger counter = new AtomicInteger(0);
pool.submit(() -> {
while(counter.get() < 1000) {
System.out.println(counter.incrementAndGet());
}
});
```
- 线程通信实例:生产者-消费者模式
```java
BlockingQueue queue = new ArrayBlockingQueue<>(100);
// 生产者线程
queue.put(request);
// 消费者线程
Request req = queue.take();
```
### 5. 异常与调试体系
- 自定义异常:
```java
public class ConfigNotFoundException extends RuntimeException {
public ConfigNotFoundException(String message) {
super(message);
}
}
try {
loadConfig(invalid.conf);
} catch(ConfigNotFoundException e) {
handleConfigError(e);
}
```
- 调试技巧:使用@Cleanup简化资源管理
```java
@Cleanup
FileInputStream in = new FileInputStream(data.txt);
```
---
## 二、实战项目:学生信息管理系统
### 系统架构
```
+----------------+ +-----------------+
| 控制台界面 | <----> | 服务类 |
| (MenuUtil) | | (StudentService)|
+----------------+ +---------+-------+
|
v
+---------------------------------------------+
| 数据持久层 |
| (StudentRepository - 使用文件持久化) |
+---------------------------------------------+
```
### 核心代码实现
#### 1. 学生实体类 (domain layer)
```java
@Data
public class Student {
private String id;
private String name;
private String gender;
private String course;
public Student(String id, String name) {
this.id = id;
this.name = name;
}
}
```
#### 2. 文件存储实现
```java
public class FileRepository implements StudentRepository {
private static final File DATA_FILE = new File(students.dat);
@Override
public void save(List students) {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(DATA_FILE))) {
oos.writeObject(students);
} catch (IOException e) {
throw new StorageException(存储失败, e);
}
}
@Override
@SuppressWarnings(unchecked)
public List load() {
if (!DATA_FILE.exists()) return new ArrayList<>();
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(DATA_FILE))) {
return (List) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
throw new LoadException(加载失败, e);
}
}
}
```
#### 3. 关键业务逻辑
```java
public class StudentService {
private final StudentRepository repo;
public StudentService(StudentRepository repo) {
this.repo = repo;
}
// 分页查询
public List findStudents(int page, int pageSize) {
List all = repo.load();
int fromIndex = page pageSize;
return fromIndex < all.size()
? all.subList(fromIndex, Math.min(fromIndex + pageSize, all.size()))
: Collections.emptyList();
}
// 并发安全添加
public boolean addStudent(Student student) {
List all = repo.load();
synchronized (all) {
all.add(student);
repo.save(all);
return true;
}
}
// 课程分组统计
public Map> groupByCourse() {
return repo.load().stream()
.collect(Collectors.groupingBy(Student::getCourse));
}
}
```
#### 4. 启动逻辑
```java
public class RunApp {
public static void main(String[] args) {
StudentService service = new StudentService(new FileRepository());
MenuUtil.displayMenu(service);
}
}
```
---
## 三、关键实现机制解析
### 1. 资源管理优化
```java
// 使用try-with-resources替代显式close()
try(FileInputStream in = new FileInputStream(input.txt)) {
// 自动关闭资源
}
```
### 2. 线程安全实现
```java
// 双重校验锁实现单例
private volatile static Logger logger;
public static Logger getInstance() {
if (logger == null) {
synchronized (Logger.class) {
if (logger == null) {
logger = new Logger();
}
}
}
return logger;
}
```
### 3. 异常处理模式
```java
// 事务回滚处理
Connection conn = null;
try {
conn.setAutoCommit(false);
doDatabaseOperations(conn);
conn.commit();
} catch (SQLException e) {
if (conn != null) conn.rollback();
throw new DaoException(事务失败, e);
} finally {
closeQuietly(conn);
}
```
---
> 本文通过理论解析与实战项目的结合,完整覆盖了Java开发的核心技术栈。重点展示了集合框架优化、线程池使用、NIO区别、资源管理等关键点,通过学生管理系统将理论概念转化为可运行的代码实践。建议读者尝试扩展该案例:增加数据库交互层、实现RESTful API接口、添加单元测试等进阶功能,使理解和应用更加深入。

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



