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();
}
}