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

本文适合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>");
// 输出:&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 提前终止条件法

案例如下:

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

相关推荐
IMPYLH8 小时前
Lua 的 Coroutine(协程)模块
开发语言·笔记·后端·中间件·游戏引擎·lua
看见繁华8 小时前
C++ 高级
开发语言·c++
点云SLAM8 小时前
constexpr 和 explicit 在 C++ 中被提出的动机
开发语言·c++·explicit关键字·隐式转换·constexpr关键字·c++11/17/20
我命由我123458 小时前
python-dotenv - python-dotenv 快速上手
服务器·开发语言·数据库·后端·python·学习·学习方法
黑客思维者8 小时前
Python定时任务schedule/APScheduler/Crontab 原理与落地实践
开发语言·python·crontab·apscheduler
yaoxin5211238 小时前
268. Java Stream API 入门指南
java·开发语言·python
ss2738 小时前
ConcurrentLinkedQueue实战:电商秒杀系统的队列选型优化
java·开发语言·安全
繁星蓝雨8 小时前
Qt优雅的组织项目结构三(使用CMakeLists进行模块化配置)——————附带详细示例代码
开发语言·数据库·qt
电饭叔8 小时前
指定私有浮点数据域get/set方法等《python语言程序设计》2018版--第8章18题第1部分
开发语言·python