Object类
定义
Object : 是java中所有类共同的父类【内置或者自定义】,任何一个类的对象都可以使用Object 类中的功能
object类中的成员方法
Object 类中的成员方法:
public int hashCode () 可以看作是一个对象的地址值的另外一种体现,不同的对象可能是一样
public final Class getClass () 获取当前对象对应类的Class对象
public String toString () 将一个对象以指定的字符串格式输出, 默认情况下也可以看作是一个地址值的表现形式
java中直接输出对象名,默认调用的就是toString ()方法
我们正常情况下,直接输出对象名,是想观察对象中的成员变量值的情况,重写toString ()方法
两个对象的比较方式: ==
如果==两边是一个基本数据类型的变量,比较的是具体的数值大小
如果==两边是引用数据类型的变量,比较的是对象的地址值
例子
class Student1 {
String name;
int age;
@Override
public String toString () {
return "Student1{" +
"name='" + name + '\'' +
", age=" + age +
'}' ;
}
}
public class ObjectDemo1 {
public static void main (String[] args) {
Student1 s1 = new Student1 ();
s1.name = "张三" ;
s1.age = 18 ;
System.out.println("姓名:" + s1.name + ", 年龄:" + s1.age);
System.out.println("-----------------------------------" );
Student1 s2 = new Student1 ();
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s1==s2);
System.out.println("-----------------------------------" );
System.out.println(s1.getClass().getName());
System.out.println("-----------------------------------" );
System.out.println(s1.toString());
System.out.println(s1);
}
}
Object中的方法
一个标准类4.0 版本:
成员变量:使用private 关键字修饰
构造方法:提供一个无参和一个所有参数
成员方法:getXxx()和setXxx(),以及toString()
例子
class Teacher {
private String name;
private int age;
public Teacher () {
}
public Teacher (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;
}
@Override
public String toString () {
return "Teacher{" +
"name='" + name + '\'' +
", age=" + age +
'}' ;
}
}
public class ObjectDemo2 {
public static void main (String[] args) {
Teacher t1 = new Teacher ("小虎" , 18 );
System.out.println(t1);
}
}
Object类中的成员方法:
public boolean equals (Object obj) Object类中的equals方法底层是使用==比较的,比较的是地址值
如果要比较内容值的话,需要在对象的类中重写该方法
protected void finalize () 做垃圾回收的
protected Object clone () 浅拷贝
Cloneable接口中什么方法都没有,像这样的接口称之为标记接口
mport java.util.Objects;
class Demo {
int a = 10 ;
}
class Student2 implements Cloneable {
String name;
int age;
Demo demo;
public Student2 () {
}
public Student2 (String name, int age, Demo demo) {
this .name = name;
this .age = age;
this .demo = demo;
}
public Student2 (String name, int age) {
this .name = name;
this .age = age;
}
@Override
public String toString () {
return "Student2{" +
"name='" + name + '\'' +
", age=" + age +
'}' ;
}
@Override
public boolean equals (Object o) {
if (o == null || getClass() != o.getClass()) return false ;
Student2 student2 = (Student2) o;
return age = = student2.age && Objects.equals(name, student2.name);
}
@Override
protected Object clone () throws CloneNotSupportedException {
return super .clone();
}
}
public class ObjectDemo3 {
public static void main (String[] args) throws Exception {
Student2 s1 = new Student2 ("张成阳" , 18 , new Demo ());
System.out.println("-----------------------------------" );
Object o1 = s1.clone();
System.out.println("o1: " + o1);
System.out.println("s1: " + s1);
System.out.println(s1 == o1);
Student2 s2 = (Student2) o1;
System.out.println(s1.demo == s2.demo);
}
}
Object中的clone方法
1. 作用:复制一个属性值一样的新对象
2. 使用:
需要被克隆的对象实现Cloneable
重写clone方法
public class Person implements Cloneable {
private String name;
private int age;
public Person () {
}
public Person (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;
}
@Override
public String toString () {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}' ;
}
@Override
public boolean equals (Object o) {
if (this == o) return true ;
if (o == null || getClass() != o.getClass()) return false ;
Person person = (Person) o;
return age = = person.age && Objects.equals(name, person.name);
}
@Override
protected Object clone () throws CloneNotSupportedException {
return super .clone();
}
}
public class Test03 {
public static void main (String[] args) throws CloneNotSupportedException {
Person p2 = new Person ("涛哥" , 16 );
Object o = p2.clone();
Person p3 = (Person) o;
System.out.println(p2==p3);
System.out.println(p2.equals(p3));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现