Java基础 Day14

API (Application Programming Interface):应用程序编程接口

简单来说:就是 Java 帮我们已经写好的一些类和方法,我们直接拿过来用就可以了

一、Object 类

所有的类,都直接或者间接地继承了 Object 类 (祖宗类)

Object类的方法是一切子类都可以直接使用的

1、toString 方法

public String toString();

默认是返回当前对象在堆内存中的地址信息:类的全类名@十六进制哈希值

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashcode());
}

getClass().getName():获取类的全类名,即“包名+类名”
Integer.toHexString():转十六进制
hashcode():返回对象的内存地址用哈希算法算出来的哈希值

使用打印语句打印对象名的时候,println() 会自动调用对象的 toString 方法

开发中直接输出对象,默认输出对象的地址其实是毫无意义的

开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息

父类 toString() 方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息

2、equals 方法

public boolean equals(Object obj);

默认是比较当前对象与另一个对象的地址是否相同

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

父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则

重写equals方法一般用IDEA直接生成

二、Objects 类

Objects类与 Object 还是继承关系,Objects类是从JDK 1.7开始之后才有的

1、equals 方法

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));
}

2、isNull 方法

public static boolean isNull(Object obj);

判断对象是否为 null

三、Math 类

是一个工具类,包含执行基本数字运算的方法

public static int abs​(int a)

获取参数绝对值

public static double ceil​(double a)

向上取整

public static double floor​(double a)

向下取整

public static int round​(float a)

四舍五入

public static int max​(int a,int b)

获取两个int值中的较大值

public static double pow​(double a,double b)

返回a的b次幂的值

public static double random​()

返回值为double的随机值,范围[0.0, 1.0)

 

 

四、System 类

是一个工具类

public static void exit​(int status)

终止当前运行的 Java 虚拟机,非零表示异常终止

public static long currentTimeMillis​()

返回当前系统的时间毫秒值形式

public static void arraycopy(数据源数组, 起始索引, 目的地数组, 起始索引, 拷贝个数)

数组拷贝

五、BigDecimal 类

用于解决小数运算中, 出现的不精确问题

// 创建对象
// 法一:不推荐,仍存在不精确的问题
public BigDecimal(double val)
// 法二:
public BigDecimal(String val)
// 法三:
public static BigDecimal valueOf(double val)

// 示例:
BigDecimal bd1 = BigDecimal.valueOf(1.0);
BigDecimal bd2 = BigDecimal.valueOf(0.3);
// System.out.println(bd1.divide(bd2));  // 报错
System.out.println(bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP));  // 3.33

// doubleValue() 将 BigDecimal 转为 double
double a = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP).doubleValue();

public BigDecimal add(BigDecimal b)

加法

public BigDecimal subtract(BigDecimal b)

减法

public BigDecimal multiply(BigDecimal b)

乘法

public BigDecimal divide(BigDecimal b)

除法

public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) 

除法

BigDecimal divide = bd1.divide(参与运算的对象, 小数点后精确到多少位, 舍入模式);

参数1 ,表示参与运算的BigDecimal 对象。

参数2 ,表示小数点后面精确到多少位

参数3 ,舍入模式

RoundingMode.UP  进一

RoundingMode.DOWN  去尾

RoundingMode.HALF_UP 四舍五入

六、包装类

将基本数据类型,包装成类 (变成引用数据类型)

变成类,就可以创建对象了

对象就可以调用方法更方便地解决问题

int num = 1;

// 手动拆装箱
Integer i1 = Integer.valueOf(num);
int n1 = i1.intValue();

// JDK5 开始可以自动拆装箱
Integer i2 = num;
int n2 = i2;

// valueOf()源码
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

public static String toBinaryString(int i) 

得到二进制

public static String toOctalString(int i) 

得到八进制

public static String toHexString(int i) 

得到十六进制

public static int parseInt​(String s) 

将字符串类型的整数转成int类型的整数

注意:

自动装箱的原理:系统自动调用了 valueOf() 方法

如果装箱的数据不在 [-128, 127] 范围,会创建一个新的对象

如果在此范围,会从 Integer 类的 cache 数组中取出一个提前创建好的对象并返回

 

你可能感兴趣的:(java,开发语言)