当前位置: 首页 > news >正文

java开发--开发工具全面介绍--新手养成记

本文适合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); // 返回对象的类名+@+hashCode

1.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>"); // 输出:&lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt; // 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

http://www.cnnetsun.cn/news/36634.html

相关文章:

  • WindowResizer:5分钟学会窗口尺寸强制调整的终极解决方案
  • [Windows] Adobe Acrobat Pro DC 绿色精简版(PDF核心功能工具包)
  • Rust包管理器Cargo的7大核心功能:从零开始构建高效开发环境
  • 轻松上手深林算法:从零开始的深度随机森林实战指南 [特殊字符]
  • 西安电子科技大学数字图像处理完整教学资源包
  • 伺服系统设计完整指南:从理论到实战的深度解析
  • Freeze:三步实现EDR绕过的零检测Shellcode执行方案
  • 基于微信小程序的学习复习小程序(源码+lw+部署文档+讲解等)
  • PaperAI终极指南:如何用AI快速分析医学论文
  • 基于Java+SpringBoot的高校机动车认证信息管理系统的设计与实现(源码+lw+部署文档+讲解等)
  • 基于SpringBoot的甘肃特产销售系统的设计与实现(程序+文档+讲解)
  • Zephyr RTOS音频处理终极指南:告别卡顿与延迟
  • 22、SELinux系统管理全解析
  • 代码绘图深度解析:3步掌握DevOps架构可视化高效方案
  • 轻量级视频生成新纪元:腾讯HunyuanVideo 1.5如何解决行业三大挑战
  • OpenColorIO终极配置指南:5步快速搭建专业颜色工作流
  • 2025年,网安人掌握这些能力,比别人高80%的薪资!
  • 6、RHEL 8系统管理:用户、软件与systemd单元配置指南
  • jQuery Mobile滑块组件:快速构建移动端滑动控件的实用指南
  • SeaTunnel数据同步工具:实现多源异构系统的实时数据处理
  • Llama-Factory是否提供训练资源消耗预测功能?
  • vue基于Spring Boot的同城医院陪诊服务预约系统设计与实现_154iph2z-java毕业设计
  • PushNotifications:跨平台推送测试终极指南,告别证书配置烦恼
  • wazero在物联网嵌入式设备中的创新部署实践指南
  • ARMv8-A权威指南:掌握下一代处理器核心技术
  • 打造完美智能家居:5个Home Assistant入门必知要点
  • K-Diffusion扩散模型终极指南:从快速上手到实战精通
  • 解锁GloVe词向量的实战指南:从零构建语义理解引擎
  • Headless Recorder终极实战指南:零基础快速掌握浏览器自动化脚本生成
  • 7个实战技巧:让你的无锁并发队列性能提升300%