本文适合Java新手开发者,全面介绍Spring自带工具类、IDEA高效插件、代码优化技巧、JDK8新特性以及Git使用,助你从小白快速成长为Java开发高手!
一、spring自带工具类
1.1Assert - 断言工具类
Assert工具类用于进行条件断言,不满足条件时抛出异常,是参数校验的好帮手。案例如下:
java
// 常用方法示例
Assert.notNull(obj, "对象不能为空");
Assert.hasText(str, "字符串必须有内容");
Assert.isTrue(age > 0, "年龄必须大于0");
Assert.notEmpty(list, "列表不能为空");
使用场景:方法参数校验、业务条件检查、单元测试断言等。
1.2 StringUtils - 字符串工具类
StringUtils提供了比原生String更丰富的字符串操作方法。案例如下:
java
// 判空操作
boolean isEmpty = StringUtils.isEmpty(str);
boolean hasText = StringUtils.hasText(str);
// 字符串操作
String result = StringUtils.capitalize("abc"); // "Abc"
String arrayStr = StringUtils.arrayToDelimitedString(new String[]{"a","b","c"}, ","); // "a,b,c"
// 路径操作
String cleanPath = StringUtils.cleanPath("/usr//local/../bin"); // "/usr/bin"
1.3 CollectionUtils - 集合工具类
常用方法如下:
java
// 集合判空
boolean isEmpty = CollectionUtils.isEmpty(list);
// 集合转换
List<String> upperList = CollectionUtils.collect(list, item -> item.toUpperCase());
// 集合合并
List<String> merged = CollectionUtils.mergeArrayIntoCollection(array1, array2);
1.4 ObjectUtils - 对象工具类
ObjectUtils是功能最全面的工具类之一,支持多种类型的判断和操作。案例如下:
java
// 空值判断
boolean isNull = ObjectUtils.isEmpty(obj); // 支持对象、字符串、集合、数组、Optional、Map
// 对象比较
boolean isEqual = ObjectUtils.nullSafeEquals(obj1, obj2); // 包含数组对象比较
// 获取对象信息
String identity = ObjectUtils.identityToString(obj); // 返回对象的类名+@+hashCode
1.5 ClassUtils - 类操作工具类
一般用于获取类信息或者判断:案例如下:
java
// 获取类信息
String packageName = ClassUtils.getPackageName(User.class); // "com.example"
String className = ClassUtils.getShortName(User.class); // "User"
// 判断类关系
boolean isAssignable = ClassUtils.isAssignable(Number.class, Integer.class); // true
// 获取所有父类
List<Class<?>> superClasses = ClassUtils.getAllSuperclasses(ArrayList.class);
1.6 BeanUtils - JavaBean工具类
通过set/get的方式给同名同类型字段赋值:案例如下:
java
// 属性复制(注意:同名同类型属性才会复制)
UserDTO dto = new UserDTO();
BeanUtils.copyProperties(user, dto);
// 获取属性描述符
PropertyDescriptor[] descriptors = BeanUtils.getPropertyDescriptors(User.class);
1.7 ReflectionUtils - 反射工具类
通过反射的方式获取方法等方法的封装,案例如下:
java
// 查找方法
Method method = ReflectionUtils.findMethod(UserService.class, "getUser", Long.class);
// 调用方法
User user = (User) ReflectionUtils.invokeMethod(method, userService, 1L);
// 访问私有字段
Field field = ReflectionUtils.findField(User.class, "password");
ReflectionUtils.makeAccessible(field);
String password = (String) field.get(user);
1.8 Base64Utils - Base64编码解码
一般用于某特殊数据的编码和解码:案例如下:
java
// 编码
String encoded = Base64Utils.encodeToString("hello".getBytes());
// 解码
byte[] decoded = Base64Utils.decodeFromString(encoded);
String original = new String(decoded);
1.9 SerializationUtils - 序列化工具类
java
// 序列化
byte[] serialized = SerializationUtils.serialize(user);
// 反序列化
User deserialized = (User) SerializationUtils.deserialize(serialized);
1.10 HttpStatus - HTTP状态码常量
查看该类可以查看有很多不用自定义直接使用的常量状态码:

使用案例:
java
@GetMapping(value = "/list")
@ApiOperation(value = "1-查看所有列表")
public ResponseEntity<List<Account>> getList(){
List<Account> accountList = accountService.getAllAccountList();
return ResponseEntity.status(HttpStatus.OK).body(accountList);
}
1.11 HtmlUtils - HTML工具类
HtmlUtils主要用于HTML内容的转义,防止XSS攻击。案例如下:
java
// HTML转义
String safeContent = HtmlUtils.htmlEscape("<script>alert('xss')</script>");
// 输出:<script>alert('xss')</script>
// HTML反转义
String original = HtmlUtils.htmlUnescape(safeContent);
二、IDEA开发插件
工欲善其事,必先利其器。以下插件能显著提升你的开发效率和代码质量。
2.1 Lombok - 代码简化神器
Lombok用注解代替构造方法、set/get方法,减少30%-40%的代码量。
比如一个实体类可以直接这样定义:

2.2 Rainbow Brackets - 彩虹括号
为不同层级的括号添加不同颜色,让嵌套结构一目了然,特别适合复杂的lambda表达式和Stream操作。案例如下:

2.3 JRebel and XRebel - 热部署插件
-
JRebel:代码修改后无需重启应用,立即生效
-
XRebel:运行时性能监控,实时查看SQL执行、方法调用等信息
2.4 SequenceDiagram - 时序图生成
自动生成方法调用的时序图,帮助理解代码执行流程和系统架构。
2.5 Alibaba Java Coding Guidelines - 代码规范检查
基于阿里巴巴Java开发手册,实时检查代码规范,提升代码质量。
2.6 Translation - 翻译插件
选中英文文档或代码注释,一键翻译,从此告别英文阅读障碍。
2.7 Free MyBatis Plugin - MyBatis增强
-
从Mapper接口直接跳转到对应的XML SQL语句
-
自动补全SQL语句
-
支持MyBatis语法高亮
2.8 其他推荐插件
-
SonarLint:实时代码质量检测
-
CodeGlance:代码迷你地图,快速导航
-
Key Promoter X:提示IDEA快捷键,帮助你摆脱鼠标
-
GenerateAllSetter:一键生成所有setter方法
-
Java Stream Debugger:Stream调试神器
三、消除大量if-else方法
3.1 提前终止条件法
案例如下:
java
// × 传统写法
public Result handleRequest(Request request) {
if (request != null) {
if (request.getData() != null) {
if (request.getData().isValid()) {
return processData(request.getData());
} else {
return Result.error("数据无效");
}
} else {
return Result.error("数据为空");
}
} else {
return Result.error("请求为空");
}
}
// √ 优化写法 - 提前终止
public Result handleRequest(Request request) {
if (request == null) {
return Result.error("请求为空");
}
if (request.getData() == null) {
return Result.error("数据为空");
}
if (!request.getData().isValid()) {
return Result.error("数据无效");
}
return processData(request.getData());
}
3.2 三目运算赋值法
案例如下:
java
// 传统写法
String result;
if (value == null) {
result = "default";
} else {
result = value;
}
// 优化写法
String result = value == null ? "default" : value;
// 或者使用Optional
String result = Optional.ofNullable(value).orElse("default");
3.3 Optional工具法
案例如下:
java
// 传统写法
if (user != null) {
if (user.getAddress() != null) {
if (user.getAddress().getCity() != null) {
return user.getAddress().getCity();
}
}
}
return "Unknown";
// Optional写法
return Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.orElse("Unknown");
3.4 策略模式
案例如下:
java
// 策略接口
public interface PaymentStrategy {
void pay(BigDecimal amount);
}
// 具体策略
@Component
public class AliPayStrategy implements PaymentStrategy {
@Override
public void pay(BigDecimal amount) {
// 支付宝支付逻辑
}
}
@Component
public class WeChatPayStrategy implements PaymentStrategy {
@Override
public void pay(BigDecimal amount) {
// 微信支付逻辑
}
}
// 策略工厂
@Service
public class PaymentService {
private final Map<String, PaymentStrategy> strategies;
public PaymentService(List<PaymentStrategy> strategyList) {
this.strategies = strategyList.stream()
.collect(Collectors.toMap(
strategy -> strategy.getClass().getSimpleName().replace("Strategy", "").toLowerCase(),
strategy -> strategy
));
}
public void pay(String type, BigDecimal amount) {
PaymentStrategy strategy = strategies.get(type.toLowerCase());
if (strategy == null) {
throw new IllegalArgumentException("不支持的支付类型");
}
strategy.pay(amount);
}
}
四、JDK8新特性的使用
4.1 Lambda表达式
java
// 传统写法
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
// Lambda写法
Collections.sort(list, (s1, s2) -> s1.length() - s2.length());
// 或者
list.sort(Comparator.comparingInt(String::length));
4.2 Stream API
java
List<User> users = getUsers();
// 过滤和转换
List<String> names = users.stream()
.filter(user -> user.getAge() > 18)
.map(User::getName)
.collect(Collectors.toList());
// 分组
Map<Integer, List<User>> usersByAge = users.stream()
.collect(Collectors.groupingBy(User::getAge));
// 统计
double avgAge = users.stream()
.mapToInt(User::getAge)
.average()
.orElse(0);
4.3 Optional类
java
// 创建Optional
Optional<User> optionalUser = Optional.ofNullable(getUser());
// 使用Optional
optionalUser.ifPresent(user -> {
System.out.println("User name: " + user.getName());
});
// 链式操作
String city = optionalUser
.map(User::getAddress)
.map(Address::getCity)
.orElse("Unknown");
4.4 接口默认方法
java
public interface MyInterface {
// 抽象方法
void abstractMethod();
// 默认方法
default void defaultMethod() {
System.out.println("This is a default method");
}
// 静态方法
static void staticMethod() {
System.out.println("This is a static method");
}
}
4.5 新的日期时间API
java
// 获取当前时间
LocalDateTime now = LocalDateTime.now();
// 格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = now.format(formatter);
// 时间计算
LocalDateTime tomorrow = now.plusDays(1);
LocalDateTime lastMonth = now.minusMonths(1);
// 时间间隔
Duration duration = Duration.between(startTime, endTime);
long minutes = duration.toMinutes();
五、GIT的使用--IDEA工具内
git最常用为下面三种:
5.1 简单拉取和推送
如下图所示:

5.1 代码合并-不同分支
方式一:cherry pick

1.将uat分支指定的某一次分支合并到dev分支来:
-
查看当前分支:git branch
-
执行命令切换到uat分支: git checkout uat
-
执行命令查看uat分支本地提交记录:git log
-
复制要合并的某一次提交的commitID
-
执行命令切换到dev分支: git checkout dev
-
在dev分支执行命令合并:
git cherry-pick commitID -
此时合并到dev分支了,但是还未push到远程
方式二:显示与工作树的差异

将部分文件代码合并之后,直接提交即可。
5.3 撤销commit但未push的提交
先通过终端进入项目目录下面:

然后执行下面3行命令:
java
git fetch --all
git reset --hard origin/uat
git pull
👏👏👏👏👏👏👏👏👏👏恭喜你坚持到了最后!!!!
如果觉得这篇文章对你有帮助,或者有所补充,记得点赞收藏哦!有什么问题欢迎在评论区留言交流~1