目录
一、Object
Object是Java中的顶级父类。所有的类都直接或间接的继承与Object类
Object类中的方法可以被所有的子类访问
方法名 | 说明 |
public Object() | 空参构造 |
顶级父类Object中只有无参构造
1、Object的成员方法:
方法名 | 说明 |
public String toString() | 返回对象的字符串表示形式 |
public boolean equals(Object obj) | 比较两个对象是否相等 |
protected Object clone (int a) | 对象克隆(浅克隆) |
eg.
//Studen类
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = 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;
}
}
System:类名
out:静态变量
System.out:获取打印的对象
println():方法
方法里面的参数:表示打印的内容
输出语句的核心逻辑:
当我们打印一个对象时,底层会调用对象的toString方法,
把对象变成字符串。然后再打印在控制台上。打印完毕换行处理
/*思考:
* 默认情况下,因为Object类中的toString方法返回的是地址值
* 所以打印一个对象打印的就是地址值
* 要想看到的是对象内部的属性值,要怎么做?
* 处理方案:
* 重写父类Object类中的toString方法*/
public class Objectdemo {
public static void main(String[] args) {
Object obj = new Object();
String str1 = obj.toString();
System.out.println(str1);
Student s1 = new Student();
Student s2 = new Student();
boolean result = s1.equals(s2);//false
System.out.println(result);
}
}
Studen类中没有equals方法,就去调用父类Object里面的equals()方法,(Object类中equals默认用“==”号比较两个对象的地址值是否相同)而s1和s2两个对象都是new出来的,地址值不同,所以为false。重写之后的equals方法比较的就是对象内部的属性值了。
结论:1、如果没有重写equals方法,那么默认使用Object中的方法进行比较,比较的是地址值是否相等
2、一般来讲地址值对我们来说意义不大,所以我们会重写,重写之后比较的就是内部的属性值了。
Object练习:
判断下面的程序的返回值
代码:
public class Objectdemo {
public static void main(String[] args) {
String s = "abc";
StringBuilder sb = new StringBuilder("abc");
System.out.println(s.equals(sb));
System.out.println(sb.equals(s));
}
}
答案:
public class Objectdemo {
public static void main(String[] args) {
String s = "abc";
StringBuilder sb = new StringBuilder("abc");
System.out.println(s.equals(sb));//false
/*因为equals方法是s调用的,而s是字符串,所以equals要看Strig类中的。
* 字符串中的equals方法:
* 先判断参数是否是字符串。
* 如果是字符串,再比较内部的属性值。
* 但是如果参数不是字符串
* 直接返回false*/
System.out.println(sb.equals(s));//false
/*因为equals方法是被sb调用的,而sb是StringBulider。所以这里的equals要看StringBuilder中的equals方法
* 在StringBuilder当中,没有重写equals方法,使用的是Object中的
* 在Object当中默认使用“==”号比较两个对象的地址值
* 而这里的s和sb记录的地址值收不一样的。
* 所以结果返回false*/
}
}
对象克隆:
把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制。
细节:
方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去。
书写细节:
1、重写Object类中的clone方法
2、让Javabean类实现Cloneable接口(该接口里面没有抽象方法,表示当前接口hi一个标志性接口,Cloneable接口表示,一旦实现了,那么当前类类的对象就可以被克隆。如果没有实现,当前类的对象不能被克隆)。
3、创建原对象并调用clone就可以
浅克隆:不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来
深克隆:基本数据类型拷贝过来。字符串复用。引用数据类型会创建新的。
二、Objects:
Objects是一个工具类,提供了一些方法去完成一些功能。
成员方法:
方法名 | 说明 |
public static boolean equals(Object a,Object b) | 先做非空判断,再比较两个对象 |
public static boolean isNull(Object obj) | 判断对象是否为null,为null返回true,反之返回false |
public static boolean nonNull(Object obj) | 判断对象是否为null,跟isNull的结果相反 |