草庐IT

JavaSE基础(24) Object类

逆轮回 2023-04-20 原文

概述

所有的类,都是以继承结构存在的。如果没有显示的父类,默认继承Object类。

class Person{}

相当于

        class Person extends Object{}

        class Student extends Person{}//学生类继承Person类,

 class Animal{}

相当于

        class Animal extends Object{}

        class Cat extends Animal{}

超类、基类,所有类的直接或间接父类,位于继承树的最顶层。

任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。

Object类中所定义的方法,是所有对象都具备的方法。

Object类型可以存储任何对象。

作为参数,可接受任何对象。

作为返回值,可返回任何对象。

常用方法

getClass()

public final Class<?> getClass(){...}
返回引用中存储的实际对象类型。
应用:通常用于判断两个引用中实际存储对象类型是否一致。

hashCode()方法

public int hashCode(){...}
返回该对象的十进制的哈希码值。
哈希算法根据对象的地址或字符串或数字计算出来的int类型的数值。

toString()方法

public String toString(){...}
返回该对象的字符串表示(表现形式)。
可以根据程序需求覆盖该方法,如:展示对象各个属性值。

equals()方法

        public boolean equals(Object obj){...}

        默认实现为(this == obj),比较两个对象地址是否相同。

        可进行覆盖,比较两个对象的内容是否相同。

equals重写步骤:

        比较两个引用是否指向同一个对象。

        判断obj是否为null。

        判断两个引用指向的实际对象类型是否一致。

        强制类型转换。

        依次比较各个属性值是否相同。

示例:

public class Cat {
    private String name;
    private int 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;
    }


    //重写equals的意义:有时候我们不想判断内存是否相等,我们就想知道属性是否相同。
//   @Override
//   public boolean equals(Object obj) {//在这里的时候,会发生向上转型
//       if(this==obj){//step1:如果两个内存地址一样,那么我们认为内容是一样的。内存地址一样,
//           return true;
//       }
//       if(obj instanceof Cat){//step2:先判断obj是否是Cat类型,为向下转型准备
//           Cat cat = (Cat)obj;//step3:强制转换,向下转型,
//           if(this.getAge()==cat.getAge()&&this.getName().equals(cat.getName())){
//               return true;
//           }
//       }
//       return false;
//    }

//    @Override
//    public String toString() {
//        return "Cat{" +"name='" + name + '\'' +", age=" + age + '}';
//    }
}
public static void main(String[] args) {
    Cat cat = new Cat();
    cat.setAge(20);
    cat.setName("机器猫");
    int hashCode = cat.hashCode();
    System.out.println("hashCode:" + hashCode);

    Cat cat2 = new Cat();
    cat2.setAge(20);
    cat2.setName("机器猫");
    int hashCode2 = cat2.hashCode();
    System.out.println("hashCode2:"+hashCode2);
    Class c1 = cat2.getClass();//获取对象运行时所属的类
    System.out.println(c1);//

    //toString()方法
    System.out.println(cat.toString());
    System.out.println(cat2.toString());//调用默认的toString方法

    int i = 12;
    System.out.println(Integer.toBinaryString(i));//10进制转二进制
    System.out.println(Integer.toOctalString(i));//10进制转8进制
    System.out.println(Integer.toHexString(i));//10进制转16进制
}

finalize()方法

当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。

垃圾对象:没有有效引用指向此对象时,为垃圾对象。

垃圾回收: 由GC销毁垃圾对象,释放数据存储空间。

自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。

手动回收机制:使用System.gc(); 通知JVM执行垃圾回收。

示例:

public class TestFinalize {
    public static void main(String[] args) {

        new Student();
        new Student();
        new Student();

        System.out.println("-------------");

        //手动GC
        System.gc();

    }
}

有关JavaSE基础(24) Object类的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  3. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  4. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  5. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  6. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  7. ruby - 你会如何在 Ruby 中表达成语 "with this object, if it exists, do this"? - 2

    在Ruby(尤其是Rails)中,您经常需要检查某物是否存在,然后对其执行操作,例如:if@objects.any?puts"Wehavetheseobjects:"@objects.each{|o|puts"hello:#{o}"end这是最短的,一切都很好,但是如果你有@objects.some_association.something.hit_database.process而不是@objects呢?我将不得不在if表达式中重复两次,如果我不知道实现细节并且方法调用很昂贵怎么办?显而易见的选择是创建一个变量,然后测试它,然后处理它,但是你必须想出一个变量名(呃),它也会在内存中

  8. ruby - 在 Ruby 中,为什么 Array.new(size, object) 创建一个由对同一对象的多个引用组成的数组? - 2

    如thisanswer中所述,Array.new(size,object)创建一个数组,其中size引用相同的object。hash=Hash.newa=Array.new(2,hash)a[0]['cat']='feline'a#=>[{"cat"=>"feline"},{"cat"=>"feline"}]a[1]['cat']='Felix'a#=>[{"cat"=>"Felix"},{"cat"=>"Felix"}]为什么Ruby会这样做,而不是对object进行dup或clone? 最佳答案 因为那是thedocumenta

  9. ruby object.hash - 2

    一个对象的散列值是什么意思?在什么情况下两个对象具有相同的哈希值??还有说Array|Hash不能是Hashkeys,这个跟对象的hash值有关系,为什么? 最佳答案 对于要存储在HashMap或哈希集中的对象,必须满足以下条件:如果认为两个对象相等,则它们的哈希值也必须相等。如果两个对象不被认为是相等的,那么它们的哈希值应该很可能不同(两个不同的对象具有相同哈希值的次数越多,对HashMap/集合的操作性能就越差)。因此,如果两个对象具有相同的哈希值,则很有可能(但不能保证)它们相等。上面“相等”的确切含义取决于散列方法的实现者。

  10. ruby - 为什么 Object 在 Ruby 中既包含内核又继承它? - 2

    在Ruby(1.8.X)中为什么Object既继承了内核又包含了内核?仅仅继承还不够吗?irb(main):006:0>Object.ancestors=>[Object,Kernel]irb(main):005:0>Object.included_modules=>[Kernel]irb(main):011:0>Object.superclass=>nil请注意,在Ruby1.9中情况类似(但更简洁):irb(main):001:0>Object.ancestors=>[Object,Kernel,BasicObject]irb(main):002:0>Object.included

随机推荐