Object类,Math类,System类,BigDecimal类,包装类,Arrays类

什么是API

API(application programming interface) 应用程序编程接口
简单来说:就是Java帮我们已经写好的一些类和方法,我们直接拿过来用就可以了

Objec类

Object类介绍

所有的类,都直接或者间接的继承了Object类(祖宗类)
Object类的方法是一切子类都可以直接使用的,所以我们要学习object类的方法。

Object类的常用方法

image.png

public String toString()
  • 开发中直接输出对象,默认输出对象的地址其实是毫无意义的。
  • 开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息。
一个现象

当我们打印对象名的时候,println()源码中会自动调用对象的toString方法。

public static String valueOf(Object obj) {
	return (obj == null) ? "null" : obj.toString();
}
public String toString()
    return getClass().getName() + "@" + Integer.toHexString(hashcode();
}
解释

对象的全类名@十六进制哈希值
哈希值 = 对象的值+哈希算法,常被人称作地址值

结论

Object类的toString方法,就是让我们重写的
----重写了才有意义
今后打印某一个对象的名字,看到的不是地址值,就说明该类重写过toString方法。

public boolean equals(Object obj)

比较两个对象是否相等

public boolean equals(Object obj) {
    return (this == obj);
}

**结论:**这个方法也需要我们自己重写

@Override
//stu1.equals(stu2);
//this: stu1对象
//o: stu2对象
public boolean equals(Object o) {
    //如果地址相同, 就没必要比较内容, 直接返回true.
    if (this == o) return true;
    //代码执行到这里, 说明stu1肯定不是null
    //stu1不是null, stu2是null值, 就直接返回false.
    //-------------------------------------------
    //比较两个对象的字节码, 如果字节码不相同, 返回false.
    if (o == null || getClass() != o.getClass()) return false;
    //代码执行到这里, 说明类型肯定都是Student,向下转型
    Student student = (Student) o;
    //比较内容
    return age == student.age && Objects.equals(name, student.name);
}
public static boolean equals(Object a, Object b)

让两个对象进行比较

  • 这个方法, 内部依赖于我们自己重写的equals方法.
  • 优势: 可以避免不必要的空指针异常.
public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

a是null --> a != null --> false
&& 左边为false, 右边就不执行, a是null的状态, 不会调用equals方法.
a不是null --> a != null --> true
&& 左边为true, 右边继续执行, a不是null的状态, 才会调用到equals方法.

Math类

包含执行基本数字运算的方法

Math类的常用方法

image.png

System类

image.png

常用方法

image.png

BigDecimal类

image.png

创建对象

image.png

将需要运算的小数, 封装为BigDecimal对象

【强制】禁止使用构造方法 BigDecimal(double)的方式把 double 值转化为 BigDecimal对象。
说明:BigDecima(double)存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。

            A: 通过构造方法               `BigDecimal(String val)`
            B: 通过静态方法 `valueOf `      `static BigDecimal valueOf(double val)`

四则运算

public BigDecimal add(BigDecimal augend) : 加法
public BigDecimal subtract(BigDecimal subtrahend) : 减法
public BigDecimal multiply(BigDecimal multiplicand) : 乘法
public BigDecimal divide(BigDecimal divisor) : 除法
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode) :
除法操作, 并指定保留小数点多少位, 还有舍入模式
舍入模式 :
RoundingMode.HALF_UP 四舍五入
RoundingMode.UP 进一法
RoundingMode.DOWN 去尾法

double doubleValue()将此BigDecimal转换为double

BigDecimal bd1 = BigDecimal.valueOf(10.0);
BigDecimal bd2 = BigDecimal.valueOf(3.0);

Double result1 = bd1.add(bd2).doubleValue();
Double result2 = bd1.subtract(bd2).doubleValue();
Double result3 = bd
1.multiply(bd2).doubleValue();
Double result4 = bd1.divide(bd2, 5, RoundingMode.HALF_DOWN).doubleValue();

System.out.println(result1);	//13.0
System.out.println(result2);	//7.0
System.out.println(result3);	//30.0
System.out.println(result4);	//3.33333

包装类

image.png
分类:

byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
charCharacter

如何进行包装

手动装箱: 手动的调用方法,将基本数据类型, 包装为类
Integer i = Integer.valueOf(10);
自动装箱(JDK5): 将基本数据类型, 直接赋值给包装类的变量.

  • 内部会自动的调用 Integer类的valueOf()方法

手动拆箱: 手动的调用方法,将包装类(引用数据类型),转换为基本数据类型
int num = i.intValue();
自动拆箱(JDK5): 将包装类的对象, 直接赋值给基本数据类型变量
int num = i;

  • 这句代码, 会自动的调用intValue();

结论: 基本数据类型, 和对应的包装类是可以直接在一起运算的.

Integer i1 = 10;
int num = 20;
int result = i1 + num
System.out.println(result);		//30
自动装箱的现象:

如果装箱的数据, 在byte的取值范围内 (-128~127)
==号比较的结果就是true, 反之是false

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2);	//true

Integer i3 = 129;
Integer i4 = 129;
System.out.println(i3 == i4);	//false
原因
Integer.valueOf();


Integer[] cache = {new Integer(-128), new Integer(-127) 
                   .... new Integer(126), new Integer(127)};


public static Integer valueOf(int i) {              // 126
    if (i >= -128 && i <= 127) {
        return IntegerCache.cache[i + 128];         // 254
    }
    return new Integer(i);
}

Integer自动装箱的时候会调用valueOf方法
方法的源码中, 会进行一个判断, 判断装箱的数据是否在 -128~127之间
在 : 会从底层的缓存中取出对象进行使用.
不在 : 会创建出一个新的对象

底层的缓存实际上是一个Integer类型的数组, 名字叫做cache, 内部存储了 -128~127 之间所有的Integer对象.
如果装箱的数据在范围中, 就会从缓存中取出已有的对象使用, 避免创建太多重复的对象.

Integer常用方法

image.png

  • 字符串必须是数字字符串

Arrays类

  • 数组操作工具类,专门用于操作数组元素

image.png

public static void main(String[] args) {
    int[] arr1 = {11, 22, 33, 44, 55};
    int[] arr2 = {11, 22, 33, 44, 55};

    // 按照指定的格式, 将数组元素拼接为字符串
    System.out.println(Arrays.toString(arr1));

    // 比较两个数组内容是否相同
    System.out.println(Arrays.equals(arr1, arr2));

    // 根据元素找索引
    // 注意: binarySearch使用二分查找法找索引, 要求数组元素必须是有序的.
    System.out.println(Arrays.binarySearch(arr1, 66));

    int[] arr = {22, 11, 55, 33, 44};
    System.out.println(Arrays.binarySearch(arr, 33));

    // 对数组升序排序
    // 问题: 降序如何操作?
    // 回答: TODO 讲解了TreeSet集合之后, 再说这个问题.
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));
}
  • 42
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值