API:Math、System、Object、Objects、equals、toString、BigDecimal

API:

Application Programming Interface  应用程序接口

简单来说:就是Java已经帮我们写好的接口,直接拿来用即可

api文档--甲骨文官网---下载java---找到你下载的版本---下面有个doucumentation download---一个是存api一个是整体介绍

static 静态方法,可以直接用类名.调用

Api - 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 int min(int a , int b)返回两个int值中的较小值
public static double pow(double a , double b)返回a的b次幂的值
public static double random()

返回值为double的正值,

[0.0 , 1.0) 

Api - System:

public static void exit(int status)终止当前运行的Java虚拟机,非零表示异常终止
public static long currentTimeMillis()返回当前时间(以毫秒为单位)
arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)数组copy

currentTimeMillis()应用场景:

long start =  System.currentTimeMillis();

fori<1000;-----------------需要测试运行时间的内容

long end = System.currentTimeMillis();

long rs = end - start;-------------将两次运行时间相减,得出代码的运行时间

sout(rs)

arraycopy应用场景:

int[] arr1 = {1,2,3,4};

int[] arr2 = new int[10];

此处无需再遍历后再存入了,直接调用arraycopy存储,且可以局部存储

为什么Math和System都不能创建对象呢?

因为构造方法被private私有化了,外类访问不到,只能用静态调用(可用Ctrl+N搜索类的源代码)

Object:

Stutdent s =  new Student();

sout(s);

public void println(Object x) {
    String s = String.valueOf(x);-------valueOf就是把任意对象转成字符串
    synchronized (this) {-----这个this是指调用对象的地址?
        print(s);---打印
        newLine();---换行
    }
}

public static String valueOf(Object obj) {------【Object obj  =  new Student(); 父类指向子类(多态)】
    return (obj == null) ? "null" : obj.toString();-----【obj指的是对象s,但对象s并没有写toString(),但由于所有对象最终都会继承Object这个类,这个类中有toString()方法】
}

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}-----调用 包名、类名+@+对象地址值(十六进制),最终将地址值返回

但注意,打印s,结果是地址值,一般的使用都是想看看属性值,由于父类Object无法满足子类的需求,所以子类可以重写toString()方法,idea已经编辑好,使用快捷键即可

Object类的常用方法

public String toString()返回对象的字符串表示形式。建议所有子类重写该方法,自动生成(重写后显示对象属性值)
public boolean equals(另外一个对象)比较对象是否相等。默认比较地址值,重写可以比较内容,自动生成(重写后对比属性内容是否一致)

此处重点注意一下:equals方法

之前String类里也有一个equals方法

boolean equals(Object anObject)   区分大小写

boolean equalsIgnoreCase(String anotherString)忽略大小写的-----可应用于  “验证码”

其实是一样的,String类里的equals方法,是String类去调用的,

例如:"sss".equals(123);这个是用String这个类去调用的

但如果是封装类,例如我们常写的Student类,这个类里并没有写equals方法,那么就存在于Object父类里

Object里equals方法的源代码是这样的:对比的不是字符串是否一致,而是地址值

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

所以,如果需要使用到对比属性值是否一致,可以重写方法,idea也已准备好了,直接快捷生成即可

在类中 Alt+7 可弹出这个类的结构大纲

另外可以看看String类的equals方法的源代码:

public boolean equals(Object anObject) {
    if (this == anObject) {-----String的地址值相同,直接返回true,字符串常量池(复用性)
        return true;
    }
    if (anObject instanceof String) {------传入的对象是否为String,不是返回false,也就意味着,String的equals方法的对比只能是String类型对比String类型
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

结论:

再调用方法时,注意是由谁调用

再传递参数时,注意是否会产生多态

Objects:

public static String toString(对象)返回参数中对象的字符串表现形式
public static String toString(对象,默认字符串)返回对象的字符串表现形式
public static Boolean isNull(对象)判断对象是否为空
public static Boolean nonNull(对象)判断对象是否不为空

Student s = new Student("小花",22);

注意:第一个toString()方法,Objects.toString(s) 和 Student类重写的一样,都是调用同一个重写的toString(),但目的是另外一个:

public static String toString(对象,默认字符串)

sout ( Objects.toString(s,"随便写一个")  ) 最终打印出来的和第一个toString()一样,

但是

若将s赋值为null

s = null;

sout ( Objects.toString(s,"随便写一个")  )  打印结果就为 "随便写一个"

当对象为空null,返回的第二个参数(默认字符串)

Object和Objects的区别http://t.csdn.cn/5d4wM

BigDecimal:

用于精确运算,银行、金融、证券这些

计算机计算流程:十进制 → 二进制计算 → 十进制展示

当十进制为小数时,转成二进制,会有数据丢失,会用无限解决于这个数的二进制表示,虽然误差很小,但是不适用于银行、金融、证券这些需要精确运算的地方

构造方法:

BigDecimal(double val)参数为double
BigDecimal(String val)参数为String

常用方法:

public BigDecimal add(另一个BigDecimal对象)加法
public BigDecimal subtract(另一个BigDecimal对象)减法
public BigDecimal multiply(另一个BigDecimal对象)乘法
public BigDecimal divide(另一个BigDecimal对象)除法
public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式)除法

注意:调用方法时,需要先创建对象,然后再用对象去调用方法,而不是bd1 + bd2

正确格式:

BigDecimal bd1  =  new BigDecimal(0.1);

BigDecimal bd2  =  new BigDecimal(0.2);

BigDecimal add = bd1.add(bd2);

sout(add)-------------但问题是出来的还是不精确的,原因是出在传入的数据问题,用double传入的是不精确的,只有用字符串形式传入,才能计算精确

BigDecimal bd1  =  new BigDecimal( " 0.1 " );

BigDecimal bd2  =  new BigDecimal( " 0.2 " );

BigDecimal add = bd1.add(bd2);

sout(add)----结果为0.3

注意:当除不尽时,运行会报错

这是需要用最后一个方法

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

舍入模式需要用BigDecimal类名.调用

已过时----还是可以用,新出的只是涉及到后面的知识,后面会讲

常用的舍入模式:

进一法:BigDecimal.ROUND_UP

去尾法:BigDecimal.ROUND_FLOOR

四舍五入:BigDecimal.ROUND_HALF_UP

BigDecimal bd1  =  new BigDecimal( " 10.0 " );

BigDecimal bd2  =  new BigDecimal( " 3.0 " );

BigDecimal divide = bd1.divide(bd2 , 2 , BigDecimal.ROUND_HALF_UP );

sout(divide)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值