-
Application Programming Interfaces(API)
API是指提供了一系列的接口以及子接口或者实现类。
Object
Object是java中所有类的顶级父类,没有父类的类,所有类默认继承Object类,所有的类可以拿到Object里的属性和方法(重写)。
-
clone()
返回的是存储了原对象信息的新对象,注意:如果对象想要操作克隆方法就要让类实现Cloneable接口才能支持克隆,Cloneable里没有信息只是标记,实现这个接口就能执行克隆。
public class ObjectDemo1 implements Cloneable {
int i=10;
public static void main(String[] args) throws CloneNotSupportedException {
// TODO Auto-generated method stub
//创建对象
ObjectDemo1 od = new ObjectDemo1();
//调用父类Object里的方法
//向下造型 new对象时候底层默认object向上转型
//CloneNotSupportedException ----克隆不支持异常
//实现了Cloneable接口用于支持克隆操作
//Cloneable接口没有任何信息,只是标记,
//标记实现这个接口类的对象可以进行克隆操作
ObjectDemo1 od1=(ObjectDemo1) od.clone();
//两个对象地址值不相等---把原对象的信息拷贝一份方法克隆对象中
System.out.println(od);
System.out.println(od1);
System.out.println(od==od1);
//克隆对象中的信息
System.out.println(od1.i); //10
}
}
- finalize()
无用对象用这个方法通知系统进行垃圾回收等效于(System.gc())
- getclass()
返回的是实际创建类的类型即是类的全路径名。
package day11;
public class ObjectDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建对象
//ObjectDemo2 od2 = new ObjectDemo2();
Object od = new ObjectDemo2();
//返回的是类的全路径名 class day11.ObjectDemo2 就能唯一确定类
//返回实际创建类的类名
//运行时类=实际创建类
System.out.println(od.getClass());
}
}
- hashcode()
返回对象的哈希码值(不同对象哈希码值一般不一样),哈希码值取值范围广,分布均匀,是地址值。
- toString()
返回的是对象的字符串表现形式,返回的是对象拼接的地址值,当重写toString方法用于方便输出属性值。
public class ObjectDemo3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建对象
ObjectDemo3 od = new ObjectDemo3();
//Object里的toString方法用于拼接对象地址值
System.out.println(od.toString());//day11.ObjectDemo3@15db9742
System.out.println(od);//day11.ObjectDemo3@15db9742
//创建对象,重写
ODemo od1 = new ODemo();
od1.name="lili";
od1.age=10;
od1.gender='w';
System.out.println(od1.toString());//ODemo [name=lili, age=10, gender=w]
//toString被重写之后 syso底层也是调用toString因此输出重写的toString
//默认调用ODemo类中toString的重写方法
System.out.println(od1);//ODemo [name=lili, age=10, gender=w]
}
}
class ODemo{
// Source --> general toString 重写toString
String name;
int age;
char gender;
@Override
public String toString() {
return "ODemo [name=" + name + ", age=" + age + ", gender=" + gender
+ "]";
}
}
- equals()
equals()--Object中的equals()方法是判断两个对象的地址值是否相等,对equals()方法可以进行重写
-
判断对象的地址值守相等。
-
判断参数是否为null
-
判断对象类型是否一致
-
比较属性是否一致,引用类型的属性比较特殊
public class ObjectDemo4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建对象
Person p1 = new Person();
//给对象属性赋值
p1.name=null;
p1.age=10;
p1.gender='w';
Person p2 = new Person();
p2.name=null;
p2.age=10;
p2.gender='w';
//比较两个对象是否相等
//判断地址值是否相等
System.out.println(p1.equals(p2));
}
}
//Person类
class Person{
//属性
String name;
int age;
char gender;
@Override
public boolean equals(Object obj) {
//重写equals方法 判断对象中的属性是否相同
// TODO Auto-generated method stub
//1.比较对象地址值是否相等
if(this==obj){
//this 代表上面p1 obj是p2
return true;
}
//2.判断参数是否为null
if(obj==null) return false;
//3.判断两个对象的类型是否一致
if(this.getClass()!=obj.getClass()){
return false;
}
//判断 保证参数对象类型和Person类型一致,才能调用属性
//向下造型
Person p = (Person)obj;
//4.比较属性
//比较两个对象年龄属性是否相等
if(this.age!=p.age){
return false;
}
//比较性别属性
if(this.gender!=p.gender){
return false;
}
//比较两个对象姓名是否相等,姓名是引用类型---地址值
//这个equals是this.name是String类下的equals所以这里的equals没有被我们的equals重写
//String类中的equals是比较地址值是否相等,如果不相等再比较内容是否相等
//java.lang.NullPointerException ----this.name为null空指针调用其他会报错
//this.name==p.name||this.name!=null
//为了解决 两个引用类型为null的情况
//this.name==p.name 为true 直接短路
if (this.name==p.name||this.name!=null&&this.name.equals(p.name)) {
//比较地址值,表明属性地址值相等
return true;
}
return false;
}
}
要求:自己能手写equals比较属性相同方法。
注意:当引用类型去调用的时候要判断该引用类型是否存在地址为null的情况,如果为null会报空指针异常。