Java的API及Object类

本文详细讲解了Java API中的Object类基础、equals方法的重写策略以及克隆方法的使用。重点介绍了如何根据年龄判断Person对象的同龄性,以及区分==与equals的区别,并演示了浅克隆与深复制的应用。
摘要由CSDN通过智能技术生成

Java 的API

API (API: Application(应用) Programming(程序) Interface(接口));

Java API就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来,
在JDK安装目录下有个src.zip文件,这个文件解压缩后里面的内容是所有Java类的源文件。
	可以在其中查看相对应的类的源码。
也可以通过查帮助文档的方式,来了解Java提供的API如何使用。

Object类概述

Object类是Java语言中的根类,即所有类的父类。
它的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。
    • equals方法

      equals方法:用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。
      Object类中的equals方法内部使用的就是==比较运算符。
      
/*
 	描述人这个类,并定义功能根据年龄判断是否是同龄人
 	由于要根据指定类的属性进行比较,这时只要覆盖Object中的equals方法
 	在方法体中根据类的属性值进行比较
 */
class Person extends Object{
	int age ;
//复写父类的equals方法,实现自己的比较方式
	public boolean equals(Object obj) {
		//判断当前调用equals方法的对象和传递进来的对象是否是同一个
		if(this == obj){
			return true;
		}
		//判断传递进来的对象是否是Person类型
		if(!(obj instanceof Person)){
			return false;
		}
		//将obj向下转型为Perosn引用,访问其属性
		Person p = (Person)obj;
		return this.age == p.age;
	}
}
  • 注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。
    • == 和equals
  •  ==:连接引用类型比较的是地址值
     equals:默认比较地址值,但是String类重写equals方法,所以内容是否相同
    
public class StringTest {
    public static void main(String[] args) {

        String s1  = "hello" ;
        String s2 =  "world" ;
        String s3 = "helloworld" ;

        System.out.println(s3 == (s1+s2)); //s1+s2:先开空间,在拼接  false
        System.out.println(s3.equals(s1+s2)); //true
        System.out.println("----------------------");
        System.out.println(s3 == "hello"+"world"); //先拼接,然后再常量池中找,存在,直接返回地址
        System.out.println(s3 .equals("hello"+"world"));
    }
}
    • 克隆方法

      protected Object clone() throws CloneNotSupportedException:创建对象并返回该对象的副本
      这个方法会抛出一个异常,throws:表示的是可能出现异常,针对调用者必须进行处理
      
      要使用clone方法,当前某个对象所在的类必须实现"标记接口"Cloneable(没有字段(成员变量),也没有成员方法)
      实现这个接口,那么就可以使用Object的clone()方法
      
public class ObjectDemo {
    public static void main(String[] args) throws CloneNotSupportedException{
        //创建学生对象
        Student s1 = new Student("xxx",21) ;
        System.out.println(s1);
        System.out.println(s1.getName()+"---"+s1.getAge());

        System.out.println("-----------------------------------");
        //调用克隆方法clone()
        Object obj = s1.clone(); //已经克隆了(浅克隆:将s1地址值赋值给Objet)
        //向下转型
        Student s2 = (Student) obj;
        System.out.println(s2);
        System.out.println(s2.getName()+"---"+s2.getAge());

        System.out.println("-----------------------------------");
        
        //传统方式
        Student s3 = s1 ;
        System.out.println(s3.getName()+"---"+s3.getAge());
    }
}
  • 注意:要进行克隆必须实现标记接口Cloneable
public class Student implements  Cloneable{
    private String name ;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值