Java JDK常用的类


 

根类 Object

Object是所有类的根类,提供了对象的基本方法

  • getClass():获取所属类的Class对象
  • hashCode():获取对象的hashCode,提供对hash表的支持
  • equals():判断对象是否相等
  • clone():克隆当前对象,得到一个对象副本
  • toString()
  • wait():
  • notify():
  • notifyAll():
  • finalize():

 

数学操作 Math

Math.round(x)  //四舍五入
Math.floor()  //向下取整
Math.ceil()  //向上取整

Math.min(x,y)  //返回2个数中小的一个
Math.max(x,y)  //返回大的一个

Math.random()  //返回一个[0,1)之间的伪随机数

/是整除,如果2个操作数都是整数,则结果默认舍弃小数部分、只取整;只要有1个操作数是浮点数,结果就是浮点数。

 

数字格式化 NumberFormat、DecimalFormat

这2个类都可以格式化数字,只不过目标格式不同
 

NumberFormat

NumberFormat nf1 = NumberFormat.getCurrencyInstance(Locale.CHINA);  //获取指定国家的货币格式,比如中国是¥,美国是$,参数为Locale类的常量
NumberFormat nf2 = NumberFormat.getIntegerInstance();  //整型数字格式,如果含有小数,先四舍五入转换为整数
NumberFormat nf3 = NumberFormat.getNumberInstance();  //通用数字格式,可以格式化所有类型的数字,保留原值、不四舍五入


// 格式化数字,返回字符串。从末尾起,每3位加一个逗号
String str1 = nf1.format(12345);  //"¥12,345"
String str2 = nf2.format(12345);   //"12,345"
String str3 = nf3.format(12345.678);  //"12,345.678"


// 将格式字符串转换为数值,返回Number类型
try {
    Number n1 = nf1.parse(str1);  //12345
    Number n2 = nf2.parse(str2);  //12345
    Number n3 = nf3.parse(str3);  //12345.678
} catch (ParseException e) {
    e.printStackTrace();
}

 
DecimalFormat

//舍弃小数部分,只保留整数部分(不是四舍五入)
DecimalFormat df1 = new DecimalFormat("#");

//保留2位小数
DecimalFormat df2 = new DecimalFormat("#.##");

//转换为百分数形式,%前面部分保留2位小数
DecimalFormat df3 = new DecimalFormat("#.##%");


//参数是数值型,返回的是String
String format = df1.format(60.5);

占位符可以使用#或者0,区别位数不足时,#不会自动填充,0会自动填充0。

eg. 60.5 保留2位小数
#.## => 60.5 不会自动填充0
0.00 => 60.50 位数不够会自动填充0

 

大数 BigInteger、BigDecimal

  • int | Integer 只能表示正负21亿+范围内的整数,对于大整数,需要使用 BigInteger 表示。
  • BigDecimal 是借助 BigInteger 实现的, 在 BigInteger 的基础上加入了小数位的概念。
  • 计算机表示浮点数有误差,不管是单精度、双精度,还是浮点数的包装类型,都存在这个问题。为保证精度,创建 BigInteger、BigDecimal 实例时尽量使用字符串类型的入参,并通过 BigInteger、BigDecimal 自身提供的方法进行数学运算。
//使用字符串类型的入参
BigInteger bi1 = new BigInteger("1111111111");
BigInteger bi2 = new BigInteger("2222222222");

//add加,subtract减,multiply乘,divide除
BigInteger add = bi1.add(bi2);
BigInteger subtract = bi1.subtract(bi2);
BigInteger multiply = bi1.multiply(bi2);
//整除(直接舍弃小数部分,只保留整数部分)
BigInteger divide = bi1.divide(bi2);  
//使用字符串类型的入参
BigDecimal db1 = new BigDecimal("1.00000000000000000");
BigDecimal db2 = new BigDecimal("2.00000000000000000");

//add加,subtract减,multiply乘,divide除
BigDecimal add = db1.add(bd2);
BigDecimal subtract = db1.subtract(bd2);
BigDecimal multiply = db1.multiply(bd2);

//如果除不尽,会直接抛异常
BigDecimal divide = db1.divide(bd2);
//所以尽量指定保留的小数位数,RoundingMode指定取舍模式
BigDecimal divide = db1.divide(db2, 2, RoundingMode.HALF_UP);

//转换为数值型,xxxValue()
double doubleValue = db1.doubleValue();

RoundingMode 枚举和 BigDecimal 内部定义的 ROUND_XXX 系列常量对应,可参考:https://blog.csdn.net/piaoranyuji/article/details/116594403

 

随机数 Random、ThreadLocalRandom

  • Random、ThreadLocalRandom生成的都是伪随机数,生成的随机数是预测的,种子相同时生成的随机数相同
  • 并发场景下多线程使用同一个Random对象时,多线程使用的是同一个种子,Random使用原子类+CAS算法保证线程安全,但多线程竞争种子的使用权严重拉低生成随机数的效率。
  • ThreadLocalRandom是Random的子类,内部用ThreadLocal存储线程各自的种子,多线程下线程安全,且避免了多线程竞争种子,生成随机数的效率比Random高得多,推荐并发场景下使用ThreadLocalRandom。
  • Math.random()是对Random的简易封装,实际使用的还是Random。
  • 严格意义上来说,计算机自身不能生成真随机数,生成真随机数往往需要借助外部硬件设备,代价高昂。java.security.SecureRandom借助真实世界中的鼠标点击、按键点击等事件,模拟随机事件生成随机数,虽然生成的也是伪随机数,但比Random、ThreadLocalRandom要随机得多,更趋近于真随机。
Random random1 = new Random();  //默认以当前时间戳作为种子
Random random2 = new Random(1212121122323232L);  //设置种子

int next = random1.nextInt(10);  //返回[0,10)内的一个随机整数
int i = random1.nextInt();  //返回int范围内的一个随机整数
boolean b = random1.nextBoolean();  //随机生成布尔值


// ThreadLocalRandom是Random的加强版,在并发环境下资源占用更少,并且可以设置范围的下限
ThreadLocalRandom random = ThreadLocalRandom.current();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值