API(Application Programming interface) :应用程序编程接口
就是写好的一些类和方法,我们直接拿过来用
目录
1.Object
2.Objects
3. Math类
4.System类
5.Arrays类
6.BigDecimal
Object类是Java中所有类的祖宗类,因此,Java中所有类的对象都可以直接使用Object类中提供的一些方法。
toString存在的意义:就是为了被子类重写,返回对象具体的内容(输出对象默认执行的就是toString, sout(对象的变量名) 默认就是sout(对象的变量名.toString) 在idea种显示toString灰色 )
equals存在的意义:为了让子类重写,比较对象的内容,不重写比较的是地址
package com.itheima.day02.teacher.api01_object;
/**
测试类toString
*/
public class Demo01 {
public static void main(String[] args) {
Student stu1 = new Student("鸿福王",21);
//String s = stu1.toString();//不报错原因是 父类中有
System.out.println(stu1.toString());
System.out.println(stu1);//相当于调用toString
// 我们没有写toString 用的Object的toString方法
/*
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
包名+类名 + @ + 理解为是一种地址展示效果
}
*/
// com.itheima.api01_object.Student@3b07d329
/*
我们 希望 把对象变成一个字符串之后 展示对象中的内容(属性)
想看内容 发现父类中toString 没法满足了,就做重写。
在Student类中 重写 toString
重写之后
就是 拼接了一个字符串(展示对象中属性内容)
*/
}
}
---------------
package com.itheima.day02.teacher.api01_object;
/**
* 测试类equals
*/
public class Demo02 {
public static void main(String[] args) {
/*
Object 里面提供的equals源码
boolean equals(Object obj)
当前对象和传递对象 是否 "相等"
public boolean equals(Object obj) {
return (this == obj);
}
默认情况比较的是地址值 我们希望比较内容
不满足就重写
*/
Student stu1 = new Student("士磊",21);
Student stu2 = new Student("士磊",21);
Student stu3 = new Student("天柱",21);
/*
用 没有重写之前的equals做判断
//false
//false
重写之后 比较的是内容(属性)
true
false
*/
System.out.println("stu1.equals(stu2):"+stu1.equals(stu2));
System.out.println("stu1.equals(stu3):"+stu1.equals(stu3));
}
}
------------------
package com.itheima.day02.teacher.api01_object;
/**
* 学生类
*/
import java.util.Objects;
public class Student {
private String name;
private int age;
public Student() {
super();//ctrl+左键
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// alt+insert 选择 toString
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {//Object 接收
if (this == o) // 判断两个对象 是不是一个地址
return true;
if (o == null || getClass() != o.getClass())
// 另外一个对象是null 或者 两者类型不一样 没有必要判断 返回false
return false;
// 向下转型 目的 进行属性的比较
Student student = (Student) o;
// 基本类型属性比较了 引用类型比较
return age == student.age && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
总结一下Object的toString方法和equals方法
public String toString()
返回对象的字符串表示形式。默认的格式是:“包名.类名@哈希值16进制”
【子类重写后,返回对象的属性值】
public boolean equals(Object o)
判断此对象与参数对象是否"相等"。默认比较对象的地址值,和"=="没有区别
【子类重写后,比较对象的属性值
------------------------------------------------
Objects的equlas方法,直接拿来进行判断,因为我们自己很容易漏掉一些判断
isNull和nonNull可以忽略,底层源码就一个 == 没啥可写的,不建议用,自己写判Null
package com.itheima.day02.teacher.api01_object;
import java.util.Objects;
public class ObjectsDemo {
public static void main(String[] args) {
// 对象比较的时候 我们的想法很简单 相比较对象里面的内容
// 但是 由于经验不足 我们可能会忘记进行 非空校验。从而会导致 比较的时候出现 NullPointerException
String a = "aaa";
String b = "aaa";
// a.equals(b) 忘记做非空校验 或者 还得写 if判断 非空校验
boolean b1 = Objects.equals(a, b);
/*
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
比较 两个对象 a b 内容是否一样 说白 增强安全性 从而避免了 空指针异常
*/
System.out.println(Objects.isNull(a));
System.out.println(a==null);
System.out.println(Objects.nonNull(a));
System.out.println(a!=null);
}
}
直接上代码演示
package com.itheima.day02.teacher.api02;
public class MathDemo {
public static void main(String[] args) {
//演示 Math的使用
//目标 了解Math常见的方法
// pulic static int abs(int a)// 求该数的绝对值
System.out.println(Math.abs(-5));//5
System.out.println(Math.abs(3.14));//3.14
System.out.println(Math.abs(-1.1));//1.1
System.out.println("-----------------");
// 向上取整 小数 ceil(小数)
System.out.println(Math.ceil(4.99));//5.0
System.out.println(Math.ceil(-3.14));//-3.0
System.out.println(Math.ceil(4.0));// 4.0
System.out.println("-----------------");
// 向下取整 floor
System.out.println(Math.floor(4.99));//4.0
System.out.println(Math.floor(-3.14));//-4.0
System.out.println(Math.floor(-4.0));//-4.0
System.out.println("-----------------");
//四舍五入 round 把小数四舍五入成整数
System.out.println(Math.round(3.4999));// 3
System.out.println(Math.round(3.5));// 4
System.out.println(Math.round(-3.6));// -4
System.out.println("-----------------");
// max min
System.out.println(Math.max(3,4));//4
System.out.println(Math.min(3,4));//3
System.out.println("-----------------");
// a的b次方 pow(a,b)
System.out.println(Math.pow(2,10));
// random 随机数 [0.0 , 1.0)
System.out.println(Math.random());
}
}
package com.itheima.day02.teacher.api02;
public class SystemDemo {
public static void main(String[] args) {
// static void exit(int status) 终止当前的jvm 后面的代码不再执行了
//
// System.exit(0);//人为进行停止虚拟机
System.exit(0);//系统内存不够了...
// static long currentTimeMillis() 返回当前时间的毫秒值
// 1秒 = 1000毫秒 毫秒值 指的是 与计算机的 时间原点 为基准的时间区间值。
long l = System.currentTimeMillis();
System.out.println(l);
}
}
Arrays是操作数组的工具类,它可以很方便的对数组中的元素进行遍历、拷 贝、排序等操作
作用,浮点数加减乘除会出现失真情况,浮点数基本数据类,转成引用类型BigDecimal就不会报错(比如我们的微信转账角分,就是先转整分,在转会double,保留两位小数,下舍入)
BigDeciaml的常用方法
package com.itheima.day02.teacher.api02;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalDemo {
public static void main(String[] args) {
System.out.println(0.1 + 0.2);// 0.3
System.out.println(1.0 - 0.32);//0.68
System.out.println(1.015 * 100);//101.5
System.out.println(1.301 / 100);//0.01301
System.out.println("=====================");
// 目标:掌握BigDecimal进行精确运算的方案。
double a = 0.1;
double b = 0.2;
// 1、把浮点型数据封装成BigDecimal对象,再来参与运算。
// a、public BigDecimal(double val) 得到的BigDecimal对象是无法精确计算浮点型数据的。 注意:不推荐使用这个,
// b、public BigDecimal(String val) 得到的BigDecimal对象是可以精确计算浮点型数据的。 可以使用。
// c、public static BigDecimal valueOf(double val): 通过这个静态方法得到的BigDecimal对象是可以精确运算的。是最好的方案。
BigDecimal a1 = BigDecimal.valueOf(a);
BigDecimal b1 = BigDecimal.valueOf(b);
// 2、public BigDecimal add(BigDecimal augend): 加法
// a1+b1
BigDecimal c1 = a1.add(b1);
System.out.println(c1);
// 3、public BigDecimal subtract(BigDecimal augend): 减法
BigDecimal c2 = a1.subtract(b1);
System.out.println(c2);
// 4、public BigDecimal multiply(BigDecimal augend): 乘法
BigDecimal c3 = a1.multiply(b1);
System.out.println(c3);
// 5、public BigDecimal divide(BigDecimal b): 除法
BigDecimal c4 = a1.divide(b1);
System.out.println(c4);
System.out.println("================================");
// 6、public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式) : 除法,可以设置精确几位。
BigDecimal d1 = BigDecimal.valueOf(1.0);
BigDecimal d2 = BigDecimal.valueOf(3.0);
BigDecimal f = d1.divide(d2,2, RoundingMode.HALF_UP); //精确小数点后2位,舍入模式,看源码自选方法
System.out.println(f);
// 7、public double doubleValue() : 把BigDecimal对象又转换成double类型的数据。
double v = f.doubleValue();
System.out.println(v);
}
}