相对路径:将该项目作为根目录
绝对路径/完整路径:带上盘符
Object:所有类的父类
Object类中的方法:
public int hashCode()返回对象的哈希码值。(简单理解为地址值的另外一种表现形式)
public final Class getClass()返回的是该对象的类对象
public String toString()返回对象的字符串表示形式。toString()方法是被public修饰的,也恰好它的返回值是String类型的,所以我们可以在其他类中对它做重写得到该对象中各个成员变量的值 一个标准类的4.0版本:
成员变量:使用private关键字修饰
构造方法:一个无参。一个带所有参数的方法。
成员方法:setXxx(...)/getXxx()
toString():自动生成即可,替代掉我们之前show方法
package com.shujia.wyh.day13.changyonglei;
import java.util.Objects;
public class Student4 extends Object implements Cloneable{
private String name;
private int age;
private Demo demo;
public Student4() {
}
public Student4(String name, int age,Demo demo) {
this.name = name;
this.age = age;
this.demo = demo;
}
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 Demo getDemo() {
return demo;
}
public void setDemo(Demo demo) {
this.demo = demo;
}
@Override
public String toString() {
return "Student4{" +
"name='" + name + '\'' +
", age=" + age +
", demo=" + demo +
'}';
}
}
public class StudentTest2 {
public static void main(String[] args) {
Student2 s2 = new Student2("小王", 18);
System.out.println(s2.toString());
}
}
public boolean equals(Object obj)指示一些其他对象是否等于此。 equals:只能比较的引用数据类型实际开发的时候,调用equals方法更希望它比较的是成员变量的值是否一样,所以我们应该在子类中进行重写
package com.shujia.wyh.day13.changyonglei;
import java.util.Objects;
public class Student4 extends Object implements Cloneable{
private String name;
private int age;
private Demo demo;
public Student4() {
}
public Student4(String name, int age,Demo demo) {
this.name = name;
this.age = age;
this.demo = demo;
}
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 Demo getDemo() {
return demo;
}
public void setDemo(Demo demo) {
this.demo = demo;
}
@Override
public String toString() {
return "Student4{" +
"name='" + name + '\'' +
", age=" + age +
", demo=" + demo +
'}';
}
//s1.equals(s2)
@Override
public boolean equals(Object o) {
//this -- s1
//o -- s2
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student4 student3 = (Student4) o;
return age == student3.age && Objects.equals(name, student3.name);
}
}
public class StudentTest3 {
public static void main(String[] args) {
Student3 s1 = new Student3("小刘", 18);
Student3 s4 = new Student3("小王", 19);
System.out.println(s1.equals(s4));
}
}
protected void finalize()用于垃圾回收的
protected Object clone() 创建并返回此对象的副本(浅拷贝)
package com.shujia.wyh.day13.changyonglei;
import java.util.Objects;
public class Student4 extends Object implements Cloneable{
private String name;
private int age;
private Demo demo;
public Student4() {
}
public Student4(String name, int age,Demo demo) {
this.name = name;
this.age = age;
this.demo = demo;
}
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 Demo getDemo() {
return demo;
}
public void setDemo(Demo demo) {
this.demo = demo;
}
@Override
public String toString() {
return "Student4{" +
"name='" + name + '\'' +
", age=" + age +
", demo=" + demo +
'}';
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class StudentTest4 {
public static void main(String[] args) throws CloneNotSupportedException {
Demo demo = new Demo();
Student4 s1 = new Student4("小王", 18,demo);
System.out.println(s1.toString());
//这里其实隐含了一个多态
Object obj = s1.clone();
System.out.println(obj.toString());
System.out.println(s1.toString());
}
}
拷贝:
浅拷贝:
浅拷贝是指我们拷贝出来的对象的内部引用类型变量和原来的对象内部引用类型变量的地址值是一样的(指向的是同一个对象)
但是整个拷贝出来的对象和新对象不是同一个地址值。
深拷贝:
全部拷贝对象的内容,包括内存的引用类型也进行拷贝,拷贝的时候,重新创建一个对象,成员变量值和原来被拷贝的一样。
但是后续再对拷贝后的引用数据类型变量做修改,不会影响到原来被拷贝的。