JAVA 常用类库总结(1)

写在前面

要想成为一个优秀的Java工程师,会看源码是不可或缺的必备技能。在IDEA里,Ctrl+鼠标左键就可以看到类的源码。同样的,也要熟悉Java的API文档。这里简单的介绍一些Java类库及其常用的方法,会根据我自己的学习进度进行不定时更新。

java.util.Objects

我们知道 java.lang.Object 是类层次的根,所有类的基类,即所有类都继承自Object。这里我们介绍的是 java.util.Objects 类。
此类包含static实用程序方法,用于操作对象或在操作前检查某些条件。 这些实用程序包括null或null方法,用于计算对象的哈希代码,返回对象的字符串,比较两个对象,以及检查索引或子范围值是否超出范围。

  1. Objects.equals
    equals​(Object a, Object b) 如果参数相等,返回true;其他则返回false。 因此,如果这两个参数是null , 返回true,如果只有一个参数为null,返回false。如果二者都不为空,通过使用第一个参数的equals方法确定相等性。
观察下面的代码
String s1 = "123";
String s2 = "456";
System.out.println(s1.equals(s2));

这样写当然没有问题,但是考虑传参时,有可能传过来null,即

String s1 = null;
String s2 = "456";
System.out.println(s1.equals(s2));

这样会产生空指针异常,因为一个空的null不能调取方法。如果使用Objects类的方法,就不会产生异常。

String s1 = null;
String s2 = "456";
System.out.println(Objects.equals(p1, p2));

我们来看Objects类equals方法的源码。

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

a == b 比较的是两个对象的内存地址,如果内存地址相同,即同一个对象,返回true;(a != null && a.equals(b) 这段代码是先判断a不为空,a不为空后再调用基类Object的equals方法,就不会出现空指针异常了。

  1. Objects.checkFromIndexSize​(int fromIndex, int size, int length)
    检查是否在子范围从 fromIndex (包括)到 fromIndex + size (不包括)是范围界限内 0 (包括)到 length(不包括)。( java里常用包括上界,不包括下界的区间)源码为
public static
    int checkFromIndexSize(int fromIndex, int size, int length) {
        return Preconditions.checkFromIndexSize(fromIndex, size, length, null);
    }
  1. Objects.isNull(Object obj)
    空则返回true,不空返回false。源码为
	public static boolean isNull(Object obj) {
       return obj == null;
  	}
  1. Objects.nonNull(Object obj)
    不空则返回true,空返回false。源码为
    public static boolean nonNull(Object obj) {
        return obj != null;
    }
  1. Objects.requireNonNull​(T obj)
    如果传参为空,直接抛出异常。当我们需要判断传过来的对象必须不能为空时,可以使用这个方法,调用方法的程序如果不处理异常,程序就会中断。源码为
    public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }

java.lang.Math

类Math包含用于执行基本数字运算的方法,例如基本指数,对数,平方根和三角函数。

  1. public static double abs​(int a)
    该方法为求绝对值,重载了int,float,double,long等基本数据类型。
  2. public static double min​(int a, int b)
    该方法返回两数种较小的一个,同样有重载方法。
  3. public static int min​(int a, int b)
    该方法返回两数种较大的一个,同样有重载方法。
  4. public static long round​(double a)
    该方法返回四舍五入后的值,1.5结果为2,-1.5四舍五入后为-1。
  5. public static double floor​(double a)
    返回小于或等于参数且等于数学整数的最大值,1.5结果为1,-1.5结果为-2
  6. public static double ceil​(double a)
    返回大于或等于参数且等于数学整数的最小值,1.2结果为2,-1.2结果为-1

java.util.Arrays

该类包含用于操作数组的各种方法(例如排序和搜索)。 此类还包含一个静态工厂,允许将数组视为列表。

  1. static int binarySearch​(int[] a, int fromIndex, int toIndex, int key)
    使用二进制搜索算法搜索指定值的指定数组的范围,有重载。
  2. static int binarySearch​(int[] a, int key)
    使用二进制搜索算法在指定的int数组中搜索指定的值,有重载。
  3. static int compare​(boolean[] a, boolean[] b)
    boolean字典顺序比较两个 boolean阵列。
  4. static void sort​(Object[] a)
    根据元素的natural ordering ,将指定的对象数组按升序排序。
  5. static void sort​(Object[] a, int fromIndex, int toIndex)
    根据元素的natural ordering ,将指定对象数组的指定范围按升序排序。
  6. static String toString​(double[] a)
    返回指定数组内容的字符串表示形式。
  7. static int mismatch​(double[] a, double[] b)
    查找并返回两个 double数组之间第一个不匹配的索引,否则如果未找到不匹配则返回-1。
  8. static boolean equals​(int[] a, int[] a2)
    如果两个指定的int数组彼此 相等 ,则返回 true 。
  9. static double[] copyOf​(double[] original, int newLength)
    实现数组的动态扩容,传入原数组和新长度,即可扩容。如下代码块,数组长度已经更改为15。
int arr[] = {1,2,3,4,5};
arr = Arrays.copyOf(arr, 15);
arr[6] = 1;
System.out.println(arr.length);

java.math.BigDecimal

在写一些简单的程序的时候,你是否会有这样的疑问。

System.out.println(0.1+0.2);

输出结果毫无疑问应当是0.3,但是其实是…
在这里插入图片描述
在java中,如果使用double float等基本数据类型进行运算时,运算的结果会失去一些精准。当我们想做一个金融方面的程序时,这样小的误差积累起来会导致结果错误。BigDecimal类可以解决小数误差问题。来看一下这个类的使用方法吧。

public class Demo1 {
    public static void main(String[] args) {
        BigDecimal b1 = new BigDecimal("0.1");
        BigDecimal b2 = new BigDecimal("0.2");
        BigDecimal b3 = b1.add(b2);
        System.out.println(b3);
    }
}

需要注意以下几点

  • 创建对象时传入的时字符串类型
  • add subtract multiply divide分别表示加减乘除方法,这些方法返回的也是一个BigDecimal对象,参与运算的对象不会发生变化
  • 可以使用 intValue doubleValue 等方法,返回基本数据类型。

java.lang.System

对于这个类我们并不陌生,System类提供的方法包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法。

  • static PrintStream err “标准”错误输出流。
  • static InputStream in “标准”输入流。
  • static PrintStream out “标准”输出流。
  • static void arraycopy​(Object src, int srcPos, Object dest, int destPos, int length)
    将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。
  • static void gc()
    运行垃圾回收器。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值