2022.4.21 常用类Object
常用类
Object
-
getClass():返回此Class对象的运行时类
-
getName():返回此Class对象所表示的实体(类,接口,数组类或void)的名称。
1 package com.xing.Object; 2 3 public class Test01 { 4 public static void main(String[] args) { 5 Student s1 = new Student(); 6 Object o1 = new Student(); 7 8 Class c1 = s1.getClass(); 9 Class c2 = o1.getClass(); 10 11 System.out.println(c1);//class com.xing.Object.Student 12 System.out.println(c2);//class com.xing.Object.Student 13 14 System.out.println(c1.getName());//com.xing.Object.Student 15 System.out.println(c2.getName());//com.xing.Object.Student 16 17 } 18 } 19 20 class Student{ 21 private String name; 22 public Student() { 23 } 24 public Student(String name) { 25 this.name = name; 26 } 27 28 29 }
-
hashCode()方法
-
返回该对象的哈希码值
-
哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int值。
-
一般情况下相同对象返回相同哈希码。
-
1 package com.xing.Object; 2 3 public class Test01 { 4 public static void main(String[] args) { 5 Student s1 = new Student(); 6 Student s2 = new Student(); 7 8 // == 比较基本数据类型比较的就是数值本身是否相等 9 // 比较引用数据类型比较的是变量中存放的地址值 10 System.out.println(s1 == s2);//false 11 Student s3 = s1; 12 System.out.println(s1 == s3);//true 13 14 System.out.println(s1.hashCode()); 15 16 } 17 } 18 19 class Student{ 20 private String name; 21 public Student() { 22 } 23 public Student(String name) { 24 this.name = name; 25 } 26 }
-
toString():返回对象的字符串表示
- Object 中 toString() 方法 返回的是 (类名 + @ +hashcode)字符串。
-
类Ren1 重写了继承父类的toString() 方法 所以调用的时候不显示父类的返回值。如果进行了重写,返回的是你重写后的信息
-
类Ren 没有重写如果调用toString() 方法 就会显示(类名 + @ +hashcode值)的字符,调用toString()返回的是你这个对象在堆内存中的物理地址信息
-
一般重写后用于开发时,数据的打印查看, 它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法
输出语句输出一个引用类型的时候,默认调用了引用类型的toString方法输出
1 Student s1 = new Student(); 2 System.out.println(s1);
-
equals()方法
-
默认实现为(this == obj),比较两个对象地址是否相同。
-
可进行重写,比较两个对象的内容是否相同。
-
equals()方法重写步骤
-
判断两个引用是否是同一引用变量
-
判断obj是否为null
-
判断对象的类型是否一致。(两个引用指向的类是否一致)
-
强制类型转换。
-
依次比较各个属性值是否相同。
-
-
1 package com.xing.Object; 2 3 public class Test01 { 4 public static void main(String[] args) { 5 Student s1 = new Student("小明",23); 6 Student s2 = new Student("小明",23); 7 Student s3 = new Student("小红",25); 8 9 System.out.println(s1.equals(s2));//true 10 System.out.println(s1.equals(s3));//false 11 12 Person p = new Person(); 13 //进入方法直接强转为Student类,防止传入的类不是同一类,做判断 14 System.out.println(s1.equals(p)); 15 16 } 17 } 18 class Person{ 19 20 } 21 class Student{ 22 private String name; 23 private int age; 24 25 public Student() { 26 } 27 public Student(String name, int age) { 28 this.name = name; 29 this.age = age; 30 } 31 public String getName() { 32 return name; 33 } 34 public void setName(String name) { 35 this.name = name; 36 } 37 public int getAge() { 38 return age; 39 } 40 public void setAge(int age) { 41 this.age = age; 42 } 43 44 //重写equals()方法 当两个对象的name与age一样时是同一个对象 45 public boolean equals(Object obj) { 46 //判断两个引用是否是同一引用变量 47 if(this == obj){ 48 return true; 49 } 50 //判断obj是否为null 51 if (obj == null) {//方法形参为引用类型时,建议做非空处理 52 return false; 53 } 54 55 //判断两个引用指向的类是否一致。两种方法 56 //if(this.getClass() == obj.getClass()){} 57 if(obj instanceof Student){ 58 //我们比较的是Student类的属性,所以Object要向下转型 59 Student obj1 = (Student) obj; 60 //判断name与age是否相等,这里是String类中的equals方法 61 // "abc".equals("abcd") 62 if(this.name.equals(obj1.getName()) && this.getAge()==obj1.getAge()){ 63 return true; 64 } 65 } 66 return false; 67 } 68 }
-
clone():创建并返回此对象的一个副本
1 package com.xing.Object; 2 3 public class Test02 { 4 public static void main(String[] args) throws CloneNotSupportedException { 5 Student2 s1 = new Student2("小明",23); 6 //返回Object类型,需进行强转 需抛出异常 CloneNotSupportedException 7 Student2 s2 = (Student2) s1.clone(); 8 9 //克隆后的对象与克隆前不是同一对象 10 11 } 12 13 } 14 //需继承克隆接口 15 class Student2 implements Cloneable{ 16 private String name; 17 private int age; 18 19 public Student2() { 20 } 21 public Student2(String name, int age) { 22 this.name = name; 23 this.age = age; 24 } 25 public String getName() { 26 return name; 27 } 28 public void setName(String name) { 29 this.name = name; 30 } 31 public int getAge() { 32 return age; 33 } 34 public void setAge(int age) { 35 this.age = age; 36 } 37 38 @Override //需重写接口中的方法 返回Object类型 39 protected Object clone() throws CloneNotSupportedException { 40 return super.clone(); 41 } 42 }
面试题:深克隆与浅克隆
-
finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
面试题:介绍下final , finally和finalize三者的区别
final:
修饰类表示这个类不能被继承
修饰方法表示这个方法不能被重写
修饰变量表示这个变量变为常量,不能修改
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!