Java程序入口,public static void main(String[] args) {}为什么这么定义呢?
ThreadLocalRandom是Random的增强版,可以代替Random减少多线程资源的竞争,最终保证系统具有更好的线程安全性。
Random rand = new Random();
ThreadLocalRandom rand = ThreadLocalRandom.current();
使用BigDecimal时不推荐使用浮点数作为参数的构造器,因为浮点数的值并非表面所见到的那样。
一般使用String作为参数的构造器。
也可以使用BigDecimal.valueOf(double value)来创建BigDecimal对象。
public class BigDecimalTest
{
public static void main(String[] args)
{
var f1 = new BigDecimal("0.05");
var f2 = BigDecimal.valueOf(0.01);
var f3 = new BigDecimal(0.05);
System.out.println("使用String作为BigDecimal构造器参数:");
System.out.println("0.05 + 0.01 = " + f1.add(f2));
System.out.println("0.05 - 0.01 = " + f1.subtract(f2));
System.out.println("0.05 * 0.01 = " + f1.multiply(f2));
System.out.println("0.05 / 0.01 = " + f1.divide(f2));
System.out.println("使用double作为BigDecimal构造器参数:");
System.out.println("0.05 + 0.01 = " + f3.add(f2));
System.out.println("0.05 - 0.01 = " + f3.subtract(f2));
System.out.println("0.05 * 0.01 = " + f3.multiply(f2));
System.out.println("0.05 / 0.01 = " + f3.divide(f2));
}
}
使用String作为BigDecimal构造器参数:
0.05 + 0.01 = 0.06
0.05 - 0.01 = 0.04
0.05 * 0.01 = 0.0005
0.05 / 0.01 = 5
使用double作为BigDecimal构造器参数:
0.05 + 0.01 = 0.06000000000000000277555756156289135105907917022705078125
0.05 - 0.01 = 0.04000000000000000277555756156289135105907917022705078125
0.05 * 0.01 = 0.0005000000000000000277555756156289135105907917022705078125
0.05 / 0.01 = 5.000000000000000277555756156289135105907917022705078125
做加减乘除精确运算时,可以为BigDecimal写一个工具类方便使用。
public class Arith
{
// 默认除法运算精度
private static final int DEF_DIV_SCALE = 10;
// 构造器私有,让这个类不能实例化
private Arith() {}
// 提供精确的加法运算。
public static double add(double v1, double v2)
{
var b1 = BigDecimal.valueOf(v1);
var b2 = BigDecimal.valueOf(v2);
return b1.add(b2).doubleValue();
}
// 提供精确的减法运算。
public static double sub(double v1, double v2)
{
var b1 = BigDecimal.valueOf(v1);
var b2 = BigDecimal.valueOf(v2);
return b1.subtract(b2).doubleValue();
}
// 提供精确的乘法运算。
public static double mul(double v1, double v2)
{
var b1 = BigDecimal.valueOf(v1);
var b2 = BigDecimal.valueOf(v2);
return b1.multiply(b2).doubleValue();
}
// 提供(相对)精确的除法运算,当发生除不尽的情况时.
// 精确到小数点以后10位的数字四舍五入。
public static double div(double v1, double v2)
{
var b1 = BigDecimal.valueOf(v1);
var b2 = BigDecimal.valueOf(v2);
return b1.divide(b2, DEF_DIV_SCALE,
RoundingMode.HALF_UP).doubleValue();
}
public static void main(String[] args)
{
System.out.println("0.05 + 0.01 = "
+ Arith.add(0.05, 0.01));
System.out.println("1.0 - 0.42 = "
+ Arith.sub(1.0, 0.42));
System.out.println("4.015 * 100 = "
+ Arith.mul(4.015, 100));
System.out.println("123.3 / 100 = "
+ Arith.div(123.3, 100));
}
}
public class NewDatePackageTest
{
public static void main(String[] args)
{
// -----下面是关于Clock的用法-----
// 获取当前Clock
var clock = Clock.systemUTC();
// 通过Clock获取当前时刻
System.out.println("当前时刻为:" + clock.instant());
// 获取clock对应的毫秒数,与System.currentTimeMillis()输出相同
System.out.println(clock.millis());
System.out.println(System.currentTimeMillis());
// -----下面是关于Duration的用法-----
var d = Duration.ofSeconds(6000);
System.out.println("6000秒相当于" + d.toMinutes() + "分");
System.out.println("6000秒相当于" + d.toHours() + "小时");
System.out.println("6000秒相当于" + d.toDays() + "天");
// 在clock基础上增加6000秒,返回新的Clock
var clock2 = Clock.offset(clock, d);
// 可以看到clock2与clock1相差1小时40分
System.out.println("当前时刻加6000秒为:" +clock2.instant());
// -----下面是关于Instant的用法-----
// 获取当前时间
var instant = Instant.now();
System.out.println(instant);
// instant添加6000秒(即100分钟),返回新的Instant
var instant2 = instant.plusSeconds(6000);
System.out.println(instant2);
// 根据字符串解析Instant对象
var instant3 = Instant.parse("2014-02-23T10:12:35.342Z");
System.out.println(instant3);
// 在instant3的基础上添加5小时4分钟
var instant4 = instant3.plus(Duration
.ofHours(5).plusMinutes(4));
System.out.println(instant4);
// 获取instant4的5天以前的时刻
var instant5 = instant4.minus(Duration.ofDays(5));
System.out.println(instant5);
// -----下面是关于LocalDate的用法-----
var localDate = LocalDate.now();
System.out.println(localDate);
// 获得2014年的第146天
localDate = LocalDate.ofYearDay(2014, 146);
System.out.println(localDate); // 2014-05-26
// 设置为2014年5月21日
localDate = LocalDate.of(2014, Month.MAY, 21);
System.out.println(localDate); // 2014-05-21
// -----下面是关于LocalTime的用法-----
// 获取当前时间
var localTime = LocalTime.now();
// 设置为22点33分
localTime = LocalTime.of(22, 33);
System.out.println(localTime); // 22:33
// 返回一天中的第5503秒
localTime = LocalTime.ofSecondOfDay(5503);
System.out.println(localTime); // 01:31:43
// -----下面是关于localDateTime的用法-----
// 获取当前日期、时间
var localDateTime = LocalDateTime.now();
// 当前日期、时间加上25小时3分钟
var future = localDateTime.plusHours(25).plusMinutes(3);
System.out.println("当前日期、时间的25小时3分之后:" + future);
// -----下面是关于Year、YearMonth、MonthDay的用法示例-----
var year = Year.now(); // 获取当前的年份
System.out.println("当前年份:" + year); // 输出当前年份
year = year.plusYears(5); // 当前年份再加5年
System.out.println("当前年份再过5年:" + year);
// 根据指定月份获取YearMonth
var ym = year.atMonth(10);
System.out.println("year年10月:" + ym); // 输出XXXX-10,XXXX代表当前年份
// 当前年月再加5年、减3个月
ym = ym.plusYears(5).minusMonths(3);
System.out.println("year年10月再加5年、减3个月:" + ym);
var md = MonthDay.now();
System.out.println("当前月日:" + md); // 输出--XX-XX,代表几月几日
// 设置为5月23日
var md2 = md.with(Month.MAY).withDayOfMonth(23);
System.out.println("5月23日为:" + md2); // 输出--05-23
}
}
public class NewFormatterTest
{
public static void main(String[] args)
{
var formatters = new DateTimeFormatter[] {
// 直接使用常量创建DateTimeFormatter格式器
DateTimeFormatter.ISO_LOCAL_DATE,
DateTimeFormatter.ISO_LOCAL_TIME,
DateTimeFormatter.ISO_LOCAL_DATE_TIME,
// 使用本地化的不同风格来创建DateTimeFormatter格式器
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.MEDIUM),
DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG),
// 根据模式字符串来创建DateTimeFormatter格式器
DateTimeFormatter.ofPattern("Gyyyy%%MMM%%dd HH:mm:ss")
};
var date = LocalDateTime.now();
// 依次使用不同的格式器对LocalDateTime进行格式化
for (var i = 0; i < formatters.length; i++)
{
// 下面两行代码的作用相同
System.out.println(date.format(formatters[i]));
System.out.println(formatters[i].format(date));
}
}
}
public class NewFormatterParse
{
public static void main(String[] args)
{
// 定义一个任意格式的日期时间字符串
var str1 = "2014==04==12 01时06分09秒";
// 根据需要解析的日期、时间字符串定义解析所用的格式器
var fomatter1 = DateTimeFormatter
.ofPattern("yyyy==MM==dd HH时mm分ss秒");
// 执行解析
var dt1 = LocalDateTime.parse(str1, fomatter1);
System.out.println(dt1); // 输出 2014-04-12T01:06:09
// ---下面代码再次解析另一个字符串---
var str2 = "2014$$$4月$$$13 20小时";
var fomatter2 = DateTimeFormatter
.ofPattern("yyy$$$MMM$$$dd HH小时");
var dt2 = LocalDateTime.parse(str2, fomatter2);
System.out.println(dt2); // 输出 2014-04-13T20:00
}
}
原文:https://www.cnblogs.com/jtStudy/p/14607682.html