LocalDateTime使用(通过这个类创建一个日期时间的实例对象)
// LocalDate -->日期
// LocalTime -->时间
// LocalDateTime -->日期和时间
对于日期时间进行格式化输出:DateTimeFormatter.ofPattern(“指定的格式”)
y表示年份,M表示月份,d表示日期,H表示小时,m表示分钟,s表示秒
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
调用指定的格式:dtf.format(LocalDateTime实例化对象)
–》2025-3-18 14:39:05
public class NetTest {
public static void main(String[] args) {
// TODO:掌握Java提供的获取时间的方案
// jdk8之前的方案 :Date
Date date = new Date();
System.out.println(date);
// 格式化输出时间SimpleDateFormat-->y表示年份,M表示月份,d表示日期,H表示小时,m表示分钟,s表示秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String result = sdf.format(date);
System.out.println(result);
// TODO:jdk8以后的方法
// LocalDate -->日期
// LocalTime -->时间
// LocalDateTime -->日期和时间
System.out.println("=================================");
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
// 格式化输出时间:DateTimeFormatter
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(dtf.format(now));
}
StringBuilder(用于操作字符串,性能较高)高效拼接字符串
原有方法是通过+
对于String字符串进行拼接的
但是由于String这个类是个final类,
所以无法修改它的内容,所以只能通过new一个新对象来替换
导致会有很多无用对象产生,从而导致内存溢出,效率较低
现在推荐选用StringBuilder的append方法进行字符串的拼接(可以进行链式编程)
sb.append("hello").append(" ").append("world");
// TODO:通过String来进行定义字符串,通过StringBuilder进行操作字符串
public static void main(String[] args) {
// TODO:实现高效拼接字符串
// 原有方法是通过 + 进行拼接字符串
/*但是由于String这个类是个final类,
所以无法修改它的内容,所以只能通过new一个新对象来替换*/
//导致会有很多无用对象产生,从而导致内存溢出,效率较低
// TODO:通过StringBuilder进行拼接字符串
// 这种方式运行起来会快很多,因为StringBuilder是一个可变容器
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append(i).append(" ");
}
System.out.println(sb);
// 最终还是需要通过toString()方法将StringBuilder转化为String
String s = sb.toString();
System.out.println(s);
System.out.println("-----------------------------------------");
// StringBuilder支持链式编程
StringBuilder sb2 = new StringBuilder();
sb2.append("hello").append(" ").append("world");
System.out.println(sb2);
// reserve()方法可以反转StringBuilder中的内容
sb2.reverse();
System.out.println(sb2);
}
BigDecimal(用于解决浮点数的运算的失真问题)
double的0.05+0.01
这个运算会无限接近于0.06(0.06无法表示因为计算机底层的二进制表示无法表示出这个值)
BigDecimal的使用步骤:
BigDecimal.valueOf(double类型的数据)–》得到一个BigDecimal类型的对象
通过这个对象进行运算操作
两个BigDecimal对象bd1,bd2
加法(add)bd1.add(bd2)
减法(subtract)bd1.subtract(bd2)
乘法(multiply)bd1.mutiply(bd2)
除法(devide)bd1.devide(bd2)
TODO:用于项目实例的除法运算的时候:
bd1.devide(bd2,精确的位数,舍入模式)
public static void main(String[] args) {
// 通过BigDecimal避免浮点数运算结果失真问题
double d1 = 0.05;
double d2 = 0.01;
double d3 = d1 + d2;//结果无限接近于0.06,但是0.06无法表示因为计算机底层的二进制表示无法表示出这个值
System.out.println(d3);
// TODO:通过BigDecimal解决浮点数运算结果失真问题
// 1、将浮点数转换为字符串
// 2、将字符串转换为BigDecimal对象--》调用对应的字符串的构造方法public BigDecimal(String val)
String s1 = 0.05 + "";
String s2 = 0.01 + "";
// String s=Double.toString(0.05);
BigDecimal bd1 = new BigDecimal(s1);
BigDecimal bd2 = new BigDecimal(s2);
BigDecimal bd3 = bd1.add(bd2);
System.out.println(bd3);
// TODO:优化方法
// 通过直接调用BigDecimal的valueOf方法
// 底层就相当于是调用的构造方法public BigDecimal(String val)
BigDecimal bd4 = BigDecimal.valueOf(0.05);
BigDecimal bd5 = BigDecimal.valueOf(0.01);
BigDecimal bd6 = bd4.add(bd5);
// TODO: 最终目的是将BigDecimal转换为double--》调用对应的doubleValue方法
double d4 = bd6.doubleValue();
System.out.println(d4);
// 减法 subtract
BigDecimal bd7 = new BigDecimal("0.05");
BigDecimal bd8 = new BigDecimal("0.01");
BigDecimal bd9 = bd7.subtract(bd8);
double d5 = bd9.doubleValue();
System.out.println(d5);
// 乘法 multiply
BigDecimal bd10 = new BigDecimal("0.05");
BigDecimal bd11 = new BigDecimal("0.01");
BigDecimal bd12 = bd10.multiply(bd11);
double d6 = bd12.doubleValue();
System.out.println(d6);
// 除法 divide
BigDecimal bd13 = new BigDecimal("0.05");
BigDecimal bd14 = new BigDecimal("0.01");
BigDecimal bd15 = bd13.divide(bd14);
double d7 = bd15.doubleValue();
System.out.println(d7);
// TODO:除法运算的另外一种写法
// bd1.divide(bd2,精确几位,舍入模式)
BigDecimal bd16 = new BigDecimal("0.01");
BigDecimal bd17 = new BigDecimal("0.03");
BigDecimal bd18 = bd16.divide(bd17,2,BigDecimal.ROUND_HALF_UP);
double d8 = bd18.doubleValue();
System.out.println(d8);
}