2022.4.21 常用类Object

常用类

JavaAPl: Java API指的是JDK中提供的各种功能的Java类

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:

修饰类表示这个类不能被继承

修饰方法表示这个方法不能被重写

修饰变量表示这个变量变为常量,不能修改

posted @   暴躁C语言  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示