常用类库(更新ing)

48 篇文章 0 订阅

Objects

equals

        String s1 = null;
        String s2 = "abc";
        //传统方法如果第一个比较的对象为null会报空指针异常
      System.out.println(s1.equals(s2));
      

在这里插入图片描述

//使用Objects工具类比较则不会,下面我们来看看他的源码
        System.out.println(Objects.equals(s1,s2));
        

返回值为 false,避免了空指针异常
在这里插入图片描述

requireNonNull

 //这个方法判断对象是否为空,如果为空则抛一个空指针异常,结束程序运行(好狠的方法)
        Objects.requireNonNull(s1);
       
       

nonNull和isNull

 //判断对象是否为null,不为返回true,否则返回false
        Objects.nonNull(s1);

        //判断对象是否为null,为返回true,否则返回false
        Objects.isNull(s1);

Math

package educoder;
public class MathTest{
      public static void main(String args[]){ 
        /** 
         *Math.sqrt()//计算平方根
         *Math.cbrt()//计算立方根
         *Math.pow(a, b)//计算a的b次方
         *Math.max( , );//计算最大值
         *Math.min( , );//计算最小值
         */
        System.out.println(Math.sqrt(16));  //4.0 
        System.out.println(Math.cbrt(8));  //2.0
        System.out.println(Math.pow(3,2));   //9.0
        System.out.println(Math.max(2.3,4.5));//4.5
        System.out.println(Math.min(2.3,4.5));//2.3
        /** 
         * abs求绝对值 
         */
        System.out.println(Math.abs(-10.4));  //10.4 
        System.out.println(Math.abs(10.1));   //10.1 
        /** 
         * ceil天花板的意思,就是返回大的值
         */
        System.out.println(Math.ceil(-10.1));  //-10.0 
        System.out.println(Math.ceil(10.7));  //11.0 
        System.out.println(Math.ceil(-0.7));  //-0.0 
        System.out.println(Math.ceil(0.0));   //0.0 
        System.out.println(Math.ceil(-0.0));  //-0.0 
        System.out.println(Math.ceil(-1.7));  //-1.0
        /** 
         * floor地板的意思,就是返回小的值 
         */
        System.out.println(Math.floor(-10.1)); //-11.0 
        System.out.println(Math.floor(10.7));  //10.0 
        System.out.println(Math.floor(-0.7));  //-1.0 
        System.out.println(Math.floor(0.0));  //0.0 
        System.out.println(Math.floor(-0.0));  //-0.0 
        /** 
         * random 取得一个大于或者等于0.0小于不等于1.0的随机数 
         */
        System.out.println(Math.random()); //小于1大于0的double类型的数
        System.out.println(Math.random()*2);//大于0小于2的double类型的数
        System.out.println(Math.random()*2+1);//大于1小于2的double类型的数
        /** 
         * rint 四舍五入,返回double值 
         * 注意.5的时候会取偶数  
         */
        System.out.println(Math.rint(10.1));  //10.0 
        System.out.println(Math.rint(10.7));  //11.0 
        System.out.println(Math.rint(11.5));  //12.0 
        System.out.println(Math.rint(10.5));  //10.0 
        System.out.println(Math.rint(10.51));  //11.0 
        System.out.println(Math.rint(-10.5));  //-10.0 
        System.out.println(Math.rint(-11.5));  //-12.0 
        System.out.println(Math.rint(-10.51)); //-11.0 
        System.out.println(Math.rint(-10.6));  //-11.0 
        System.out.println(Math.rint(-10.2));  //-10.0 
        /** 
         * round 四舍五入,float时返回int值,double时返回long值 
         */
        System.out.println(Math.round(10.1));  //10 
        System.out.println(Math.round(10.7));  //11 
        System.out.println(Math.round(10.5));  //11 
        System.out.println(Math.round(10.51)); //11 
        System.out.println(Math.round(-10.5)); //-10 
        System.out.println(Math.round(-10.51)); //-11 
        System.out.println(Math.round(-10.6)); //-11 
        System.out.println(Math.round(-10.2)); //-10 
      } 
    }


Arrays

 public static void main(String[] args) {
      
        int[] arr = new int[]{1,2,312,4,42,4,2354,6,15,0,5,3,21,8};
        //按照数字顺序排列指定的数组
        Arrays.sort(arr);
        //返回指定数组的内容的字符串表示形式
        //结果:[0, 1, 2, 3, 4, 4, 5, 6, 8, 15, 21, 42, 312, 2354]
      
        System.out.println(Arrays.toString(arr));
        //使用二叉搜索算法搜索指定对象的指定数组
        //使用binarySearch方法检索(二分法)的前提是要对集合内数据进行排序,否则返回的值是不准确的!要是不排序,怎么能知道值是在比中间值小的区域或者比中间值大的区域呢?
        //arr数组中的5 对应下标是 7
        //结果: 7
        System.out.println(Arrays.binarySearch(arr,6));
     
        /**
         * copyOfRange(int[] original, int from, int to)方法参数说明如下:
         *
         * 参数 original 表示被复制的数组
         * 参数 from 表示被复制元素的初始索引(包括)
         * 参数 to 表示被复制元素的最后索引(不包括)
         */
        int[] newArr = Arrays.copyOfRange(arr,1,4);
        System.out.println(Arrays.toString(newArr));
        //结果:[1, 2, 3]

        //数组扩容(非手动)
        System.out.println(arr.length);
        //结果14
        arr = Arrays.copyOf(arr,20);
        System.out.println(arr.length);
        //结果20

    }

BigDecimal

float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候就用到BigDecimal。

BigDecimal的创建

// 第一种用new一个对象的方式
BigDecimal b1 = new BigDecimal("0.0");
// 第二种用内部方法获取
BigDecimal b2 = BigDecimal.valueOf(0.0);


0-10的数字创建BigDecimal并没有创建新的而是返回的同一个对象,源码如下:

// Cache of common small BigDecimal values.
    private static final BigDecimal zeroThroughTen[] = {
        new BigDecimal(BigInteger.ZERO,       0,  0, 1),
        new BigDecimal(BigInteger.ONE,        1,  0, 1),
        new BigDecimal(BigInteger.valueOf(2), 2,  0, 1),
        new BigDecimal(BigInteger.valueOf(3), 3,  0, 1),
        new BigDecimal(BigInteger.valueOf(4), 4,  0, 1),
        new BigDecimal(BigInteger.valueOf(5), 5,  0, 1),
        new BigDecimal(BigInteger.valueOf(6), 6,  0, 1),
        new BigDecimal(BigInteger.valueOf(7), 7,  0, 1),
        new BigDecimal(BigInteger.valueOf(8), 8,  0, 1),
        new BigDecimal(BigInteger.valueOf(9), 9,  0, 1),
        new BigDecimal(BigInteger.TEN,        10, 0, 2),
    };


BigDecimal的加减乘除

public BigDecimal add(BigDecimal value);//加法
public BigDecimal subtract(BigDecimal value);//减法 
public BigDecimal multiply(BigDecimal value);//乘法
public BigDecimal divide(BigDecimal value);//除法


BigDecimal的加减乘除进行运算以后都是返回了一个新的BigDecimal而不是在原有的对象上增加的因此

BigDecimal b1 = BigDecimal.ZERO;
BigDecimal b2 = BigDecimal.valueOf(3);
b2 = b2.add(b1); // 这样写的话会把新的对象赋值个b2
b2.add(b1);      // 这样的话b2是不会变化的 


Date


       //创建一个Date对象
        Date date = new Date();
        //获取时间戳(ms 1620196873750)
        System.out.println(date.getTime());
        //获取当下时间 (Wed May 05 14:44:11 CST 2021)
        System.out.println(date);
        //获取前一天时间戳(1620110736323)
        long time = date.getTime()-(1000*60*60*24);
        System.out.println(time);
        //获取前一天时间,Tue May 04 14:46:39 CST 2021
        Date date2 = new Date(time);
        System.out.println(date2);

DateFormat

DateFormat是个抽象类,我们需要创建他的子类对象来调用他的方法。
在这里插入图片描述

  /**
         * y : 年
         * M : 月
         * d : 日
         * H : 时
         * m : 分
         * s : 秒
         *
         * 2021年5月5日 2:50 43 (格式并不唯一)
         */

//换一种格式
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd H:m s");
        //format:将date对象转换成日期字符串(yyyy-MM-dd HH:mm ss,之前定义的格式)
        String text = format.format(new Date());
        System.out.println(text);

        //parse:将日期字符串(yyyy-MM-dd HH:mm ss,之前定义的格式)转换成date对象(记得抛个异常)
        Date date1 = format.parse("2021-2-5 2:20 23");
        System.out.println((new Date().getTime()-date1.getTime())/1000/60/60/24);

Calender

package basepackageclass;
import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
public class CalendarClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,
		 * 此对象已由当前日期时间初始化,即默认代表当前时间
		 * 如 Calendar c = Calendar.getInstance();*/
		//使用Calendar获取时间
		Calendar a = Calendar.getInstance();//创建Calendar对象
		int year = a.get(Calendar.YEAR);//获取年份
		int month = a.get(Calendar.MONTH)+1;//获取月份,0表示1月
		int day = a.get(Calendar.DAY_OF_MONTH);//获取日期
		int hour = a.get(Calendar.HOUR_OF_DAY);//获取小时
		int minute = a.get(Calendar.MINUTE);//获取分钟
		int second = a.get(Calendar.SECOND);//获取秒数
		System.out.println("当前时间:"+year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second);
		
		System.out.println();
		/*
		 * Calendar 类提供了 getTime() 方法,用来获取 Date 对象
		 * 完成 Calendar 和 Date 的转换,还可通过 getTimeInMillis() 方法
		 * 获取此 Calendar 的时间值,以毫秒为单位。如下所示:*/
		Date date = a.getTime();//获取当前系统日期时间
		Long time = a.getTimeInMillis();//当前毫秒数
		System.out.println(date);
		System.out.println(time);
		
		System.out.println();
		//以下为常用方法
		// 创建Calendar对象
		Calendar c = Calendar.getInstance();
		        
		// 将Calendar对象转换为Date对象
		Date da = c.getTime();
		        
		// 创建SimpleDateFormat对象,指定目标格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		        
		// 将日期转换为指定格式的字符串
		String now = sdf.format(da);
		System.out.println("当前时间:" + now);
		
	}

}



YEAR
默认情况下指示为年份.

MONTH
指示当前年中的月份数,一年中的一月的值为 0
需要注意的是 JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER 分别与 [0, 11] 对应, 在设置和获取日期时要格外注意

WEEK_OF_YEAR
指示当前年中的星期数. 一年中的第一个星期的值为 1.

WEEK_OF_MONTH
指示当前月中的星期数. 一个月中第一个星期的值为 1.

DAY_OF_MONTH
指示一个月中的某天. 它与 DATE 是同义词. 一个月中第一天的值为 1.

DATE
同 DAY_OF_MONTH

DAY_OF_YEAR
指示当前年中的天数. 一年中第一天的值为 1.

DAY_OF_WEEK
指示一个星期中的某天, 一周中第一天的值为 1.
需要 注意 的是, 与中国人的习惯不同, 此处一周中的第一天为 周日. 一周的顺序依次为: 周日(1), 周一(2), 周二(3), 周三(4), 周四(5), 周五

输出:
Thu Jan 10 14:32:29 CST 2019
当前时间:2021-5-5 15:31:52

Wed May 05 15:31:52 CST 2021
1620199912451

当前时间:2021-05-05 15:31:52


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值