本文适合Java新手开发者,全面介绍Spring自带工具类、IDEA高效插件、代码优化技巧、JDK8新特性以及Git使用,助你从小白快速成长为Java开发高手!
一、spring自带工具类
1.1Assert - 断言工具类
Assert工具类用于进行条件断言,不满足条件时抛出异常,是参数校验的好帮手。案例如下:
// 常用方法示例 Assert.notNull(obj, "对象不能为空"); Assert.hasText(str, "字符串必须有内容"); Assert.isTrue(age > 0, "年龄必须大于0"); Assert.notEmpty(list, "列表不能为空");使用场景:方法参数校验、业务条件检查、单元测试断言等。
1.2 StringUtils - 字符串工具类
StringUtils提供了比原生String更丰富的字符串操作方法。案例如下:
// 判空操作 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 - 集合工具类
常用方法如下:
// 集合判空 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是功能最全面的工具类之一,支持多种类型的判断和操作。案例如下:
// 空值判断 boolean isNull = ObjectUtils.isEmpty(obj); // 支持对象、字符串、集合、数组、Optional、Map // 对象比较 boolean isEqual = ObjectUtils.nullSafeEquals(obj1, obj2); // 包含数组对象比较 // 获取对象信息 String identity = ObjectUtils.identityToString(obj); // 返回对象的类名+@+hashCode1.5 ClassUtils - 类操作工具类
一般用于获取类信息或者判断:案例如下:
// 获取类信息 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的方式给同名同类型字段赋值:案例如下:
// 属性复制(注意:同名同类型属性才会复制) UserDTO dto = new UserDTO(); BeanUtils.copyProperties(user, dto); // 获取属性描述符 PropertyDescriptor[] descriptors = BeanUtils.getPropertyDescriptors(User.class);1.7 ReflectionUtils - 反射工具类
通过反射的方式获取方法等方法的封装,案例如下:
// 查找方法 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编码解码
一般用于某特殊数据的编码和解码:案例如下:
// 编码 String encoded = Base64Utils.encodeToString("hello".getBytes()); // 解码 byte[] decoded = Base64Utils.decodeFromString(encoded); String original = new String(decoded);1.9 SerializationUtils - 序列化工具类
// 序列化 byte[] serialized = SerializationUtils.serialize(user); // 反序列化 User deserialized = (User) SerializationUtils.deserialize(serialized);1.10 HttpStatus - HTTP状态码常量
查看该类可以查看有很多不用自定义直接使用的常量状态码:
使用案例:
@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攻击。案例如下:
// 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开发手册,实时检查代码规范,提升代码质量。
详细了解可以参考我的博文:java开发--alibaba代码规范插件--新手必备-CSDN博客https://blog.csdn.net/weixin_57259781/article/details/155878178?spm=1011.2415.3001.5331
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 提前终止条件法
案例如下:
// × 传统写法 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 三目运算赋值法
案例如下:
// 传统写法 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工具法
案例如下:
// 传统写法 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 策略模式
案例如下:
// 策略接口 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表达式
// 传统写法 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
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类
// 创建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 接口默认方法
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
// 获取当前时间 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行命令:
git fetch --all git reset --hard origin/uat git pull👏👏👏👏👏👏👏👏👏👏恭喜你坚持到了最后!!!!
如果觉得这篇文章对你有帮助,或者有所补充,记得点赞收藏哦!有什么问题欢迎在评论区留言交流~1