一、什么是API
- API(Application Programming interface)应用程序编程接口。
- 简单来说:就是Java帮我们写好的一些方法,我们直接拿过来用就可以了。
二、Object类
1、Object类的作用:
- 一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类。
- Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法。
2、Object类的常用方法
3、Object的toString方法:
public String toString()
默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址
问题引出:
- 开发中直接输出对象,默认输出对象的地址其实是毫无意义的。
- 开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息。
toString存在的意义:
- 父类toString() 方法的存在意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息。
示例:输出学生对象的信息
/*
toString方法默认返回变量地址
重写Object类的toString方法返回对象的内容
*/
@Override
public String toString(){
return "Student { name" + name + ", Sex = " + Sex + ", age = " + age + "}";
//直接调用重写toString方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", sex=" + sex +
", age=" + age +
'}';
}
4、object的equals方法:
问题思考:
- 直接比较两个对象的地址是否相同完全可以用“==”替代equals。
equals存在的意义:
- 父类的equals方法存在的意义就是为了被子类重写,以便用子类自己来定制比较规则。
示例:自己重写equals,自己制定规则
两个对象的内容一样就认为是相等的
自己重写方法
/* s1.equals(s2)
比较者 s1 ==> s2
被比较者 this ==> o
*/
@Override
public boolean equals(Object o) {
//1、判断是不是Student类型
if(o instanceof Student) {
Student s2 = (Student) o;
//2、判断2个对象的内容是否相同
if (this.name.equals(s2.name) &&
this.age == s2.age && this.sex == s2.sex) {
return true;
} else {
return false;
}
}else{
//学生只能和学生比较,否则结果只能是false
return false;
}
}
官方重写
/*
重写equals方法两个对象的内容相同就认为是相等的
*/
@Override
public boolean equals(Object o){
//1、判断是否是同一对象比较,如果是返回true.
if(this == o) return true;
//2、如果o是null返回false 如果o不是学生类型返回false
if(o == null || this.getClass() != o.getClass()) return false;
//3.说明o一定是学生类型而不是null
Student student = (Student) o;//将Object类型强制转换为Student
return sex == student.sex&& age == student.age&& name == student.name;
三、Objects类
1、概述:
- Objects类是与Object还是继承关系,Objects类是从JDK 1.7开始之后才有的。
2、Objects的常见方法
4、对象进行内容比较的时候建议使用什么?为什么?
- 建议使用Objects 提供的equals方法。
- 比较的结果是一样的,但是更安全。(objects的equals方法底层会先进行非空判断)
四、StringBulider类
1、概述:
- StringBuilder是一个可变的字符串类,我们可以把它看成是一个对象容器。
- 作用:提高字符串的操作效率,例如拼接、修改等等。
2、StringBulider的构造器
3、StringBuilder常用方法
public class Test_method {
public static void main(String[] args) {
StringBuilder s = new StringBuilder("{");
//拼接
s.append("a ,");
s.append("b ,");
s.append("o ,").append("w ,").append("s }");
System.out.println(s);//{a,b ,o ,w ,s }
System.out.println(s.toString());//{a,b ,o ,w ,s }
//反转
s.append("123");
System.out.println(s.reverse());//321} s, w, o, b,a{
//返回长度
System.out.println(s.length());//18
//注意:StringBuilder只是拼接字符串的手段,效率好
//最终目的还是要恢复成String类型
StringBuilder s2 = new StringBuilder("123");
s2.append("456");
String rs = s2.toString();
check(rs);
}
public static void check(String s){
System.out.println(s);//123456
}
}
4、为什么拼接、反转字符串建议使用StringBuilder?
- String:内容是不可变的、拼接字符串的性能差。
- StringBuilder:内容是可变的、拼接字符串的性能好、代码优雅。
5、注意
- 定义字符串用String
- 拼接修改等操作字符串使用StringBuilder
6、案例
public class Test {
public static void main(String[] args) {
int[] arr1 = null;
System.out.println(toString(arr1));
int[] arr2 = {11,22,33,44};
System.out.println(toString(arr2));
}
public static String toString(int[] arr) {
if (arr != null) {
//开拼拼接内容
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]).append(i == arr.length-1 ? "" : ",");
}
sb.append("]");
return sb.toString();//StringBuilder中toString方法可以实现把StringBuilder转换成String
} else {
return null;
}
}
}
五、Math类
1、概述
- 包含执行基本数字运算的方法,Math类中没有提供公开的构造器。
- 如何使用类中的成员? 看类的成员是否都是静态的,如果是,通过类名就可以直接调用。
2、Math类常用的方法
3、使用操作
六、System类
1、System类概述
- System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化。
2、System类的常用方法
3、时间毫秒值
4、数组拷贝
public static void arraycopy(数组源数组,起始索引,目的地数组,起始索引,拷贝个数)
七、BigDeimal类
1、BigDecimal作用
- 用于解决浮点型运算精度失真的问题。
2、使用步骤
- 创建对象BigDecimal封装浮点型数据(最好的方法是调用方法)
public static BigDecimal valueOf(double val): 包装浮点数成为BigDecima对象
3、BigDecimal的对象如何获取?
- BigDecimal b1 = BigDecimal.valueOf(0.1);
4、BigDecimal常用API
4、使用BigDecimal解决精度失真问题
package d5_BigDecimal;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Test {
public static void main(String[] args) {
double a = 0.1;
double b = 0.2;
double c = a + b;
System.out.println(c);
System.out.println("-----解决精度失真------");
//包装浮点数数据成为大数据对象BigDecimal
BigDecimal a1 = BigDecimal.valueOf(a);
BigDecimal b1= BigDecimal.valueOf(b);
BigDecimal c1 = a1.add(b1);
System.out.println(c1);//加0.3
System.out.println(a1.subtract(b1));//减-0.1
System.out.println(a1.multiply(b1));//乘0.02
System.out.println(a1.divide(b1));//除0.5
//目的:转变成double
System.out.println("-----变为double类------");
double rs = c1.doubleValue();
System.out.println(rs);//0.3
System.out.println("-------精度计算---------");
/*
BigDemical一定要进行精度计算的,10/3 = 3.333333....
*/
BigDecimal a2 = BigDecimal.valueOf(10.0);
BigDecimal b2 = BigDecimal.valueOf(3.0);
//System.out.println(a2.divide(b2));报错无法确认精度
System.out.println(a2.divide(b2,2, RoundingMode.HALF_UP));
//(另一个BigDecimal对象,精确几位,舍入模式)
}
}