Java 基础
作者: luote (luote) · 个人主页 luote996.cn
为什么用 Java 写后端
Java 生态成熟,Spring Boot 提供大量开箱即用的企业能力。create-luote 后端要求 JDK 17,使用现代语法(如 var、文本块、record 等),但读懂脚手架代码,掌握下列基础即可。
程序结构
一个 Java 源文件通常包含:
java
package cn.luote.controller;
import cn.luote.common.result.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public Result<String> hello() {
return Result.ok("hello luote");
}
}| 元素 | 说明 |
|---|---|
| package | 包名,对应目录结构 |
| import | 引入其他类的全限定名 |
| class | 类,面向对象的基本单元 |
| 方法 | 类中的函数,如 hello() |
注解 @Xxx | 给框架读的元数据,如 @RestController |
基本类型与引用类型
| 类型 | 示例 | 说明 |
|---|---|---|
| int / long | int age = 18 | 整数 |
| boolean | boolean ok = true | 布尔 |
| String | String name = "luote" | 字符串,不可变 |
| 包装类 | Integer, Long | 可为 null,集合中常用 |
引用类型变量存的是对象地址;null 表示未指向任何对象,调用其方法会 NullPointerException。
面向对象三要素
封装
用 private 字段 + public getter/setter 或 Lombok @Data 隐藏内部细节。脚手架实体类如 User.java 使用 Lombok 减少样板代码。
继承
子类 extends 父类,复用父类方法。Service 实现类 UserServiceImpl implements UserService 是 实现接口,比继承更常用。
多态
接口类型引用指向实现类对象,例如:
java
UserService userService; // 注入的是 UserServiceImpl
userService.getById(1L);Spring 依赖注入正是基于接口与实现分离。
集合框架
| 接口 | 实现类 | 场景 |
|---|---|---|
| List | ArrayList | 有序列表,按索引访问 |
| Set | HashSet | 去重集合 |
| Map | HashMap | 键值对,如 userId → User |
遍历列表示例:
java
List<UserVO> list = userService.listUsers();
for (UserVO vo : list) {
System.out.println(vo.getUsername());
}Stream API 常用于过滤、映射:
java
List<Long> ids = users.stream()
.map(User::getId)
.toList();异常处理
java
try {
doSomething();
} catch (BusinessException e) {
log.warn("业务异常: {}", e.getMessage());
throw e;
} catch (Exception e) {
log.error("系统异常", e);
throw new BusinessException("操作失败");
}脚手架用 BusinessException 表示可预期的业务错误,由 GlobalExceptionHandler 统一转成 Result 返回前端。
注解与 Lombok
常用 Lombok 注解:
| 注解 | 作用 |
|---|---|
| @Data | 生成 getter/setter/toString/equals/hashCode |
| @Slf4j | 生成日志对象 log |
| @RequiredArgsConstructor | 为 final 字段生成构造器,配合构造器注入 |
Spring 注解在下一章 Spring Boot 中展开。
读懂脚手架代码的最小清单
- 能看懂类、方法、字段、import。
- 知道
interface与implements的区别。 - 会使用 List、Map 和 for-each。
- 理解 null 与 Optional 的空值意识。
- 知道异常不要吞掉,要有日志。
与 luote 脚手架的关系
| 路径 | 建议阅读顺序 |
|---|---|
domain/po/User.java | 实体与表映射 |
domain/dto/LoginDTO.java | 接收前端 JSON |
domain/vo/UserVO.java | 返回给前端,可脱敏 |
service/impl/UserServiceImpl.java | 业务逻辑集中处 |
common/exception/BusinessException.java | 自定义业务异常 |
下一章:Maven 项目管理