JAVA常用类库知识整理

JAVA常用类库

目录

JAVA常用类库

Objects类

equals方法

deepEquals方法

toString方法

compare方法

isNull方法

nonNull方法

hash方法

hashCode方法

Date类

构造方法:

getTime方法

DateFormat类

format方法

parse方法

Calendar类

常用方法:

get方法:获取日历中的信息

 set方法:获取并修改数据

 add方法:对数据进行+-操作

getTime方法:转为Date类型的对象

getActualMaximum方法:获取某字段最大值

总结



Objects类

Objects类包含了一些实用的static程序方法,用于操作对象或是在操作前检查某些条件。这些实用程序包括null或null方法,用于计算对象的哈希代码,返回对象的字符串,比较两个对象,以及检查索引或子范围值是否超出范围等等。

Objects类的所有方法都是静态的,也就是说可以直接通过类名调用,不需要实例化对象再调用。

下面对objects类的方法进行整理:

equals方法

作用:对传入的两个参数进行内容比较。

源码:

public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }

详解:

注:这个方法做了不抛出空指针异常的处理,使得程序运行时较为安全,不会因为异常轻易崩溃。

方法传入两个参数a,b,

如果a,b是基本数据类型,那么这个方法就与“==”无异,直接判断值是否相等;如果相等,返回true,不等返回false,很基本的数值比较。

如果a,b是对象的引用,那么就是判断两个对象的地址是否相等,如果相等,根据逻辑运算的规则,直接跳过右边的运算返回true(对象连地址都相同了,那肯定是同一个对象啦,自己跟自己比没有意义啦);如果地址不同,那么进入右边的运算,判断 a 的引用的地址是否是null(空指针),如果是null,根据逻辑运算规则,直接跳过右边运算,返回false,如果 a 的地址不是null,那么调用a的equals()方法,判断a,b地址是否相等。 最后这一步看似重复比较了地址,但是做到了不抛出空指针异常。

 

deepEquals方法

作用:深度比较两个对象,如果参数是数组对象,则使用Arrays.deepEquals方法比较。当我们不清楚对象的具体类型时,便可以使用该方法来判断。

源码:

public static boolean deepEquals(Object a, Object b) {
        if (a == b)
            return true;
        else if (a == null || b == null)
            return false;
        else
            return Arrays.deepEquals0(a, b);
}
static boolean deepEquals0(Object e1, Object e2) {
        assert e1 != null;
        boolean eq;
        if (e1 instanceof Object[] && e2 instanceof Object[])
            eq = deepEquals ((Object[]) e1, (Object[]) e2);
        else if (e1 instanceof byte[] && e2 instanceof byte[])
            eq = equals((byte[]) e1, (byte[]) e2);
        else if (e1 instanceof short[] && e2 instanceof short[])
            eq = equals((short[]) e1, (short[]) e2);
        else if (e1 instanceof int[] && e2 instanceof int[])
            eq = equals((int[]) e1, (int[]) e2);
        else if (e1 instanceof long[] && e2 instanceof long[])
            eq = equals((long[]) e1, (long[]) e2);
        else if (e1 instanceof char[] && e2 instanceof char[])
            eq = equals((char[]) e1, (char[]) e2);
        else if (e1 instanceof float[] && e2 instanceof float[])
            eq = equals((float[]) e1, (float[]) e2);
        else if (e1 instanceof double[] && e2 instanceof double[])
            eq = equals((double[]) e1, (double[]) e2);
        else if (e1 instanceof boolean[] && e2 instanceof boolean[])
            eq = equals((boolean[]) e1, (boolean[]) e2);
        else
            eq = e1.equals(e2);
        return eq;
    }

详解:

通过这两段简单的代码应该可以看出:

1、如果两个数组使用equals返回true,则使用deepEquals也返回true,也就是说在比较的两个数组均为一维数组的前提下,equals和deepEquals的比较结果没有差别;

2、如果要比较多维数组,则需要使用deepEquals方法;

 

toString方法

重载一:

public static String toString(Object o) {
        return String.valueOf(o);
    }

作用:返回对象的字符串表示形式,如果引用为null,则返回“null”,不会抛出异常。

重载二:

 public static String toString(Object o, String nullDefault) {
        return (o != null) ? o.toString() : nullDefault;
    }

作用:如果第一个参数不是null,则返回在第一个参数上调用 toString 的结果,否则返回第二个参数。

 

compare方法

作用:判断两个任意类型的参数是否相同,相同则返回0。如果两个参数都是null则返回0。

请注意,如果其中一个参数为null, NullPointerException可能会也可能不会抛出null ,具体取决于排序策略(如果有), 由Comparator选择具有null的值。

源码:

public static <T> int compare(T a, T b, Comparator<? super T> c) {
        return (a == b) ? 0 :  c.compare(a, b);
    }

isNull方法

作用:判断对象是否为空,如果是则返回true

源码:

public static boolean isNull(Object obj) {
        return obj == null;
    }

nonNull方法

作用:判断对象是否不为空,如果是则返回true

源码:

public static boolean nonNull(Object obj) {
        return obj != null;
    }

hash方法

作用:生成哈希码,该方法的参数列表是可变参数

源码:

 public static int hash(Object... values) {
        return Arrays.hashCode(values);
    }

详解:

将所有的输入值都放到一个数组里,然后调用Arrays.hashCode(Object[])方法来实现哈希码的生成。

对于当一个对象包含多个成员、重写Object.hashCode时,hash方法非常有用。

例如,如果有三个字段,对象xy ,和z ,一个可以这样写:

 @Override public int hashCode() {
     return Objects.hash(x, y, z);
 }

hashCode方法

作用:返回一个对象的哈希码值

源码:

public static int hashCode(Object o) {
        return o != null ? o.hashCode() : 0;
    }

Date类

Date类表示特定的时刻,精度为毫秒

构造方法:

Date(){} 生成当前时间

Date(long date){}  生成当前时间减去 date(毫秒) 后的时间

getTime方法

public long getTime()

返回自1970年1月1日00:00:00 GMT至今的总毫秒数。

public class Demo1 {
    public static void main(String[] args) {
        Date date = new Date(); 
        long time = date.getTime() - (24*60*60*1000); 
        Date date2 = new Date(time);
        System.out.println(date.toString());
        System.out.println(date2.toString());
    }
}
输出:
Sun Feb 07 17:15:16 GMT+08:00 2021
Sat Feb 06 17:15:16 GMT+08:00 2021

DateFormat类

format方法

作用:将date对象格式化为日期时间字符串

public final String format​(Date date)

接收一个date类型的对象参数,返回值是String类型

parse方法

作用:将时间字符串转为date对象

public Date parse​(String source) throws ParseException

接收一个String类型字符串,返回一个Date类型的对象。

例子:

public class Demo1 {
    public static void main(String[] args) throws ParseException {
        /**
         * y    年
         * M    月
         * d    日
         * H    时
         * m    分
         * s    秒
         */
        // 通过SimpleDateFormat类创建实例化对象,并在参数列表输入想要的格式
        SimpleDateFormat f = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        //format方法:将date对象转为自定义格式的时间字符串
        String test = f.format(new Date());
        System.out.println(test);
        //parse方法:将与模板格式相同的字符串转为date对象
        Date d =f.parse("2021年02月07日 17:43:00");
        System.out.println(d.getTime());

    }
}

Calendar类

创建日历对象:

日历类,它是一个抽象类,没有办法通过new关键字创建对象,但是可以使用它提供的getInstance()方法来创建实例化对象。

public class Demo1 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
    }
}

日历类将年月日等数据存储在一个字段数组中,我们如果想要获取年月日时分秒,就要通过调用get方法,并传入数组的下标(或是下标值对应的常量名),即可获取该下标对应的值。

常用方法:

get方法:获取日历中的信息

public class Demo1 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);//get传入的参数是Calendar类中的常量,是字段数组的下标,代表年
        System.out.println(year);
        int day = c.get(Calendar.DAY_OF_YEAR);//传入的是获取今天是该年的第几天
        System.out.println(day);
    }
}

输出
2021
38

 set方法:获取并修改数据

public class Demo1 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR,2022);//set,将year修改为2020
        int year = c.get(Calendar.YEAR);
        System.out.println(year);
    }
}
输出
2022

 add方法:对数据进行+-操作

public class Demo1 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        c.add(Calendar.YEAR,1);//year+1,传入负数就是-1
        System.out.println(c.get(Calendar.YEAR));
    }
}

输出
2022

getTime方法:转为Date类型的对象

public class Demo1 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        Date d = c.getTime();
        System.out.println(d);
    }
}
输出
Sun Feb 07 21:19:58 GMT+08:00 2021

getActualMaximum方法:获取某字段最大值

public class Demo1 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        int maxmonth = c.getActualMaximum(Calendar.MONTH);//获取最多有几个月
        int maxday = c.getActualMaximum(Calendar.DAY_OF_MONTH);//获取该月中最多有多少天
        System.out.println(maxmonth);
        System.out.println(maxday);
    }
}
输出
11 //计算机中月份是0-11 11代表12月
28 2021年2月最多28天

总结

目前刚步入常用类库的学习,暂时整理这么多,以后会随着学习的不断深入,更新更多细节的知识点

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值