高级类特性与常用类之异常(2)

异常补充

Objects(JDK7)

Objects类是在JDK7之后新增的一个工具类(位于java.util包中),内部提供的方法都是静态方法,因此可以直接通过类名称调用;Objects类主要提供了对于对象的一些空指针安全的访问方法(研究源码得知),比如对象的比较可以使用:Objects.equals(o1,o2),判断对象是否为空可以使用:Objects.isNull(obj),确保对对象不为空的检查可以使用Object.requireNonNull(obj)等。

示例如下:

public class ObjectsDemo {
    
    public void change(User u){
        Objects.requireNonNull(u);
        u.setName("admin");
    }
​
    public static void main(String[] args) {
        
        String s1 = null;
        String s2 = null;
        //原始的比较方法
//      if(s1 != null){
//          System.out.println(s1.equals(s2)); 
//      }
​
        //Objects的比较方法
        System.out.println(Objects.equals(s1, s2));
        User u  = new User("softeem", "123");
        User u2  = new User("softeem", "123");
        
        System.out.println(u == null);
        System.out.println(Objects.isNull(u));
        System.out.println(Objects.nonNull(u));
        //确保对象重写equals或hashCode
        System.out.println(Objects.equals(u, u2));
    }
}

Math&Random

Math类

Math类是由java.lang包提供的一个用作数学相关操作的类,该类为final类,内部提供的所有方法都是static的,并且该类未对外提供公开的构造方法,因此无法在外界直接创建对象。

Math类的常用方法如下:

public class MathDemo {
​
    public static void main(String[] args) {
        
        //获取圆周率
        System.out.println(Math.PI);
        //绝对值
        System.out.println(Math.abs(-100));
        //向上取整
        System.out.println(Math.ceil(10.01)); 
        //向下取整
        System.out.println(Math.floor(9.9999));
        //四舍五入
        System.out.println(Math.round(9.5));
        
        //分页中: 总记录条数,每页大小数?要求获取总页数?
        int totalNum = 108;
        int pageSize = 10;
        long totalPage = 0;
        if(totalNum % pageSize == 0){
            totalPage = totalNum / pageSize;
        }else{
            totalPage = totalNum / pageSize + 1;
        }
        //使用Math类完成总页数计算
        totalPage = (int)Math.ceil((double)totalNum/pageSize);
        System.out.println(totalPage);
        
        //比较大小返回较大的一个数
        System.out.println(Math.max(10, 20));
        //比较大小返回较小的一个
        System.out.println(Math.min(10, 20));
        
        //对指定数值开平方根
        System.out.println(Math.sqrt(9));
        
        //求第一个的数值的第二个数次幂
        System.out.println(Math.pow(2, 4));
        //返回一个0.0(包含)~1.0(不包含)之间随机数
        System.out.println(Math.random());
        
        //从1-10之间随机获取一个整数?    5-10?
        System.out.println("---------");
        for (int i = 0; i < 100; i++) {
//          int n = (int)(Math.random() * 10) + 1;
            int n = (int)Math.ceil(Math.random()*10);
            System.out.println(n);
        }
    }
}

Random类

Random类是Java.util包中提供的一个基于伪随机流,用于生成随机数的工具类,该类中提供了一系列用于产生伪随机数据的方法,如:nextBoolean(),nextDouble(),nextInt()等.

Random类用法如下:

public class RandomDemo {
​
    public static void main(String[] args) {
        
        Random r = new Random();
        System.out.println(r.nextInt(10));
        //从一个数组中随机产生一名中奖观众?
        
        String[] names = {"易大师","盖伦","艾希","玛尔扎哈","提莫","菊花信"};
        System.out.println(names[r.nextInt(names.length)]); 
    }
​
}

基于Random类实现一个随机位数的验证码生成器

import java.util.Random;
​
public class ValidateUtils {
​
    //ctrl+shift+x/y(大小写转换)
    static String s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    public static String genVCode(int count){
        Random r = new Random();
        //声明临时变量用于存储生成的验证码字符串
        String code = "";
        //循环count次获取每次取到的字符
        for(int i = 0;i<count;i++){
            //随机产生一个索引(0~s.length()-1)
            int index = r.nextInt(s.length());
            //把每次获取的字符拼接到字符串中
            code += s.charAt(index);
        }
        //循环结束后返回生成的字符串对象
        return code;
    }
    
    public static void main(String[] args) {
        //生成并输出长度为6的验证码字符串
        System.out.println(genVCode(6));
    }
}
​

BigDecimal&DecimalFormat

BigDecimal

由于计算机对浮点数运算时,可能导致精度丢失问题(如double类型0.1和0.2做相加运算时,实际结果不是0.3,而是0.30000000000004),因此Java中提供了一个BigDecimal(java.math.BigDecimal)类型用于表示精确的数值,在对数值类型做运算需要保证精度的情况下,可以使用BigDecimal中提供的相关方法实现。

package com.softeem.lesson13.demo3;
​
import java.math.BigDecimal;
import java.text.DecimalFormat;
​
public class BigDecimalDemo {
​
    public static void main(String[] args) {
        
        double d1 = 0.1;
        double d2 = 0.2;
        System.out.println(d1 + d2);
        
        BigDecimal bd1 = new  BigDecimal("0.1");
        BigDecimal bd2 = new  BigDecimal("0.3");
        
        //相加
        BigDecimal d = bd1.add(bd2); 
        System.out.println(d.toString());
        System.out.println(d.doubleValue());
        
        //相减
        d = bd2.subtract(bd1);
        System.out.println(d);
        
        //相乘
        System.out.println(bd1.multiply(bd2));
        
        //相除
        System.out.println(bd1.divide(bd2,BigDecimal.ROUND_CEILING));
        
        System.out.println(0.1/0.3);
        DecimalFormat fmt = new DecimalFormat("##.###");
        System.out.println(fmt.format(0.1/0.3));
        
        //12,312,343,123,213
        //34.5%
        //$5.6
    }
}
​

DecimalFormat

java.text.DecimalFormat是一个用于对数值类型数据格式化(解析字符串为数值)处理的类,该类从java.text.NumberFormat类继承,里面提供了一些用于将数值类型表示为不同格式字符串转换方法(货币,百分比,千分数等);

实例如下:

​
public class NumberFormatDemo {
​
    public static void main(String[] args) {
        //根据本机环境获取货币格式化对象
        NumberFormat fmt = NumberFormat.getCurrencyInstance();
        String m = fmt.format(3650.5);
        System.out.println(m);//¥3,650.5
        
        //获取百分比的格式化对象
        fmt = NumberFormat.getPercentInstance();
        m = fmt.format(0.4556);
        System.out.println(m);//46%
        
        //根据指定匹配模式格式化数值为字符串(百分比)
        fmt = new DecimalFormat("##.##%");
        m = fmt.format(0.4556);
        System.out.println(m);//45.56%
        
         //根据指定匹配模式格式化数值为字符串(千分比)
        fmt = new DecimalFormat("##.##\u2030");
        m = fmt.format(0.4556);
        System.out.println(m);
        
        //198200 1.982*10E5  科学计数法  
        fmt = new DecimalFormat("#.###E0");
        m = fmt.format(198200);
        System.out.println(m);
        
        //将一个字符串表达式,根据指定的格式解析为数值类型
        String s = "45.6%"; // 0.456
        fmt = new DecimalFormat("##.#%");
        Number num = fmt.parse(s);
        double d = num.doubleValue();
        System.out.println(d);
    }
​
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值