Java大数据之路--API(Object)

  • 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()方法可以进行重写

  1. 判断对象的地址值守相等。

  2. 判断参数是否为null

  3. 判断对象类型是否一致

  4. 比较属性是否一致,引用类型的属性比较特殊

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会报空指针异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值