时间格式化
hzBillMain.setIyear(Integer.parseInt(new SimpleDateFormat("yyyy").format(new Date())));
hzBillMain.setImonth(month);
hzBillMain.setMaxYearMonth(new SimpleDateFormat("yyyy-MM-dd").parse(hzBillMain.getIyear() + "-" + (month >= 10 ? month : "0" + month) + "-28"));
localTime,localDate,localDateTime的区别
@Accessors(chain = true)
@Accessors(chain = true)
: 这是Lombok的另一个注解,用于启用链式调用。当你的类使用了这个注解后,你可以在调用一个setter方法后立即调用另一个setter方法,而不必每次都引用对象的变量。这可以提高代码的可读性和简洁性
Arrays和ArrayList的区别
Arrays
和 ArrayList
是 Java 中用于处理集合(数组或列表)的两种不同工具,它们有一些关键的区别:
-
数据结构:
Arrays
是一个类,用于操作数组,它提供了一系列的静态方法来处理数组,例如排序、复制、填充等。ArrayList
是一个类,代表一个动态数组,是 Java Collections Framework 的一部分。它使用动态数组来存储元素,可以根据需要自动扩展数组的大小。
-
大小调整:
Arrays
操作的数组是静态大小的,一旦数组创建后,不能更改其大小。如果需要更改数组大小,必须创建一个新的数组,并将元素复制到新数组中。ArrayList
具有动态大小,可以根据需要自动调整大小,因此可以轻松添加或删除元素。
-
元素类型:
Arrays
可以处理任何类型的数组,包括原始数据类型和对象类型的数组。ArrayList
只能用于对象类型的数组,不支持原始数据类型,但可以使用包装类(如Integer
、Double
)来代替。
-
使用场景:
Arrays
适用于对静态数组进行各种操作,如搜索、排序、复制等。ArrayList
适用于需要动态大小、增加、删除元素的场景。它是一种常见的列表数据结构,通常用于构建可变集合。
-
性能:
- 在大多数情况下,
Arrays
操作相对较快,因为它直接操作原始数组。但它不适用于动态大小的集合。 ArrayList
的性能在处理可变集合时通常很好。由于其动态数组的特性,它可以根据需要自动扩展,因此很适合处理变化大小的集合。
- 在大多数情况下,
FROM_UNIXTIME
FROM_UNIXTIME
是 MySQL 数据库的一个函数,用于将 UNIX 时间戳转换为日期时间格式。UNIX 时间戳通常以秒为单位表示自 1970 年 1 月 1 日零点(也称为 UNIX 纪元)以来的时间。FROM_UNIXTIME
函数接受一个整数参数,该参数是 UNIX 时间戳,然后返回一个日期时间字符串
(FROM_UNIXTIME(cm.money_user_time / 1000, '%Y-%m-%d' )
@Lazy
@Lazy
是Spring框架中的注解之一,用于延迟初始化bean。当一个bean被标记为@Lazy
时,Spring容器将不会在应用程序启动时立即创建该bean,而是在第一次请求该bean时进行创建。
@Autowired
@Lazy
private BService bService;
BigDecimal
BigDecimal.ZERO
是 BigDecimal
类的一个静态常量,表示数值 0。它是 BigDecimal
类中的一个预定义常量,可以用于进行与 0 相关的精确计算,避免使用浮点数的精度问题。除了 BigDecimal.ZERO
之外,还有BigDecimal.ONE
: 表1, BigDecimal.TEN
: 表示数值 10
multiply
BigDecimal
类的 multiply
方法进行乘法运算。这个方法用于将当前 BigDecimal
与指定的 BigDecimal
相乘,返回一个新的 BigDecimal
对象,表示乘法的结果。BigDecimal
是不可变的,任何对 BigDecimal
的操作都会返回一个新的 BigDecimal
对象。
BigDecimal result = one.multiply(two);
compareTo
compareTo
是 Java 中的一个用于比较对象的方法,通常用于实现 Comparable
接口。该方法返回一个整数,表示两个对象的比较结果。返回值的含义如下:
- 如果对象相等,则返回 0。
- 如果调用对象小于参数对象,则返回负数。
- 如果调用对象大于参数对象,则返回正数
例: str1.compareTo(str2)
当BigDecimal类型用于比较时,推荐
用compareTo,因为:
BigDecimal
存储的是精确的十进制数,而不是二进制浮点数。由于浮点数在计算机中以二进制表示,存在精度丢失的问题。使用compareTo
方法能够更好地处理BigDecimal
对象之间的精度差异。- 使用比较运算符可能会忽略
BigDecimal
对象之间的微小差异,导致错误的比较结果。
try-catch
在 Java 中,异常分为两类:检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)。
-
检查型异常(Checked Exception): 这类异常在编译期强制要求进行捕获或声明,否则编译不通过。常见的检查型异常有:
- IOException:处理输入输出操作时可能抛出的异常。
- SQLException:处理数据库操作时可能抛出的异常。
- ClassNotFoundException:处理类加载时找不到类的异常。
-
非检查型异常(Unchecked Exception): 这类异常通常是由程序错误引起的,编译器不会检查是否捕获或声明,因此也称为运行时异常。常见的非检查型异常有:
- NullPointerException:尝试访问空对象的属性或方法。
- ArrayIndexOutOfBoundsException:数组索引越界。
- IllegalArgumentException:方法接收到不合法的参数。
- ArithmeticException:算术运算异常,如除以零。
- ClassCastException:类型转换异常。
- RuntimeException 的子类,如 IllegalStateException、IndexOutOfBoundsException等。
在使用 try-catch 块时,可以选择捕获具体的异常类型,也可以捕获它们的父类 Exception
常见的 Java 异常及其简要描述:
-
IOException: 输入输出异常,通常用于处理文件或网络操作中的错误。
-
SQLException: 数据库操作异常,可能由数据库访问引起的问题。
-
ClassNotFoundException: 找不到类异常,通常发生在尝试加载不存在的类时。
-
NullPointerException: 空指针异常,尝试访问空对象的属性或方法。
-
ArrayIndexOutOfBoundsException: 数组索引越界异常,尝试使用超出数组范围的索引。
-
IllegalArgumentException: 非法参数异常,通常由方法接收到不合法的参数引起。
-
ArithmeticException: 算术异常,例如除以零。
-
ClassCastException: 类型转换异常,通常发生在试图将对象强制转换为不兼容类型时。
-
RuntimeException 的子类:
- IllegalStateException: 状态异常,通常在对象的状态不适合执行特定操作时引发。
- IndexOutOfBoundsException: 索引越界异常,通常与集合类相关。
- NumberFormatException: 数字格式异常,通常在字符串转换为数字时发生。
- ConcurrentModificationException: 并发修改异常,通常在迭代集合时修改了集合结构。
-
FileNotFoundException: 文件未找到异常,尝试访问不存在的文件时引发。
-
SocketException: Socket 异常,通常在进行网络通信时发生。
-
InterruptedException: 中断异常,通常在多线程编程中,线程被中断时引发。
mybatisplus分页问题
首先引入mybatisplus依赖
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
然后引入mybatisplus插件
如果数据量小于10条,mybatisplus的分页是不能用的,因为Page类中,默认的size是10,如果数据量小于10,分页功能并不实现。解决的办法有两个,一个是将自己的数据加到10条以上,另一个就是改变整个默认的size
WebMvcConfig(客户端访问服务端静态资源配置)
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 配置静态文件服务,将图片文件的实际路径映射到URL registry.addResourceHandler("/images/**") .addResourceLocations("file:D:/gw/"); // 请替换为你实际的图片存储路径 } }
例:http://192.168.0.111:8899/images/111.jpg
java.time包
1.获取当前日期和时间:
LocalDateTime now = LocalDateTime.now();
默认会提供毫秒级精度,LocalDateTime类具有纳米级精度,如果希望不包括毫秒和纳秒,则使用truncatedTo截断
LocalDateTime now = LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS);
2.获取某一天的开始时间(午夜):
LocalDateTime startOfDay = LocalDate.now().atStartOfDay();
3.获取某一天的结束时间(23:59:59.999):
LocalDateTime endOfDay = LocalDate.now().atTime(LocalTime.MAX);
4.获取当前日期:
LocalDate currentDate = LocalDate.now();
5.获取当前时间:
LocalTime currentTime = LocalTime.now();
6.获取当前时区:
ZoneId currentZone = ZoneId.systemDefault();
7.获取带时区的日期和时间:
ZonedDateTime zonedDateTime = ZonedDateTime.now();
8.获取当前日期的时间戳:
Instant instant = Instant.now();