什么是 API
- API ( Application Programming interface ):应用程序编程接口
- 就是 Java 帮我们已经写好一些程序,如:类、方法等,我们直接拿过来用就可以解决一些问题
- 使用别人写好的程序,可以帮我们提高开发效率,站在巨人的肩膀上,做更有意义的事情
Object 类的作用
-
Object 类是 Java 中所有类的祖宗类,因此,Java 中所有类的对象都可以直接使用 Object 类中提供的一些方法
-
Object 类的常见方法
toString() | equals() | clone() |
---|---|---|
返回对象的字符串表示形式 | 判断两个对象是否相等 | 对象克隆 |
import java.util.Objects;public class Test {public static void main(String[] args) {// 1. toString()方法Student s1 = new Student("Jack");System.out.println(s1.toString()); // 返回对象内存地址的字符串形式:login.Student@3b07d329System.out.println(s1); // 默认也是返回对象的内存地址:login.Student@3b07d329// 所以toString()常用的使用方式是:对toString()进行重写,返回我们真正需要的关于对象的信息,而不是内存地址System.out.println(s1.toString()); // 重写后,输出结果为:Student{name='Jack'}// 2. equals()方法Student s2 = new Student("Jack");System.out.println(s2.equals(s1)); // 比较两个对象的地址是否相同; 输出结果:falseSystem.out.println(s2 == s1); // 默认也是比较两个对象的地址是否相同; 输出结果:false// 所以equals()常用的使用方法是:对equals()进行重写,比较对象的信息是否一致,而不是比较内存地址System.out.println(s2.equals(s1)); // 重写后,输出结果:true}
}class Student { // 默认就继承了 Object 类private String name;public Student() {}public Student(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}// 重写 Object 父类的 toString() 方法@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +'}';}// 重写equals方法,比较两个对象的内容是否一样@Overridepublic boolean equals(Object o) {// 1. 判断两个对象地址是否一样,一样直接返回trueif (this == o) return true;// 2. 如果o是null或者如果两者类型不一致,直接返回// 这里的" getClass() != o.getClass() " 其实是省略了" this " 的// 即原来是" this.getClass() != o.getClass() "if (o == null || getClass() != o.getClass()) return false;// 3. 如果都不是上面的情况,就进行类型转换,然后比较数据Student student = (Student) o;return Objects.equals(this.name, student.name);}
}
Objects
- Objects 是一个工具类,提供了很多的操作对象的静态方法给我们使用
- Objects 类的常见方法
方法名 | 说明 |
---|---|
public static boolean equals (Object a, Object b) | 我们;源码分析见下 |
public static boolean isNull(Object obj) | 判断对象是否为null,为null返回true,反之 |
public static boolean nonNull(Object obj) | 判断对象是否不为null,不为null则返回true,反之 |
源码分析:底层实现原理是——先做非空判断,再比较两个对象
public static boolean equals(Object a, Object b){return (a == b) || (a != null && a.equals(b));
}
包装类
1.包装类就是把基本数据类型的数据包装成对象
基本数据类型 | 对应的包装类(引用数据类型) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
import java.util.ArrayList;public class Test {public static void main(String[] args) {// 一般的方式Integer obj1 = Integer.valueOf(12);System.out.println(obj1); // 输出结果:12// 自动装箱:可以自动把基本类型的数据转换成对象Integer obj2 = 12;// 自动拆箱:可以自动把包装类型的对象转换成对应的基本数据类型int a = obj2;// 泛型和集合不支持基本数据类型,只能支持引用数据类型
// ArrayList<int> list1 = new ArrayList<>(); // 报错ArrayList<Integer> list2 = new ArrayList<>(); // 正常list2.add(33); // 自动装箱list2.add(44); // 自动拆箱int res = list2.get(1); // 自动拆箱}
}
2.包装类的其他常见操作
- 可以把基本类型的数据转换成字符串类型
- 可以把字符串类型的数值转换成数值本身对应的数据类型
public class Test {public static void main(String[] args) {// 1. 把基本类型的数据,转换成字符串Integer a = 23;String res = Integer.toString(a);System.out.println(res + 1); // 输出结果:231// 2. 把字符串类型的数据,转换成对应的基本数据类型String ageStr = "29";int age = Integer.parseInt(ageStr);System.out.println(age + 1); // 输出结果:30// 然后,实际开发中,推荐使用 valueof(),记住一个就能用在所有的数据类型String scoreStr = "98";int score = Integer.valueOf(scoreStr);System.out.println(score + 2); // 输出结果:100String idStr = "0.5";double id = Double.valueOf(idStr);System.out.println(id + 0.5); // 输出结果:1.0}
}