什么是 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@3b07d329
System.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)); // 比较两个对象的地址是否相同; 输出结果:false
System.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() 方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
'}';
}
// 重写equals方法,比较两个对象的内容是否一样
@Override
public boolean equals(Object o) {
// 1. 判断两个对象地址是否一样,一样直接返回true
if (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); // 输出结果:100
String idStr = "0.5";
double id = Double.valueOf(idStr);
System.out.println(id + 0.5); // 输出结果:1.0
}
}