zoukankan      html  css  js  c++  java
  • Object类

    Java中所有类的顶级父类(超类),任何一个类都直接或间接的继承Object,也就是说任何一个类的对象都可以赋值给一个Object对象(向上造型).

    clone()(用protect修饰)   创建并返回此对象的一个副本

    package cn.tedu.object;
    public class ObjectDemo1 implements Cloneable {
        int i;
        public static void main(String[] args) throws Throwable {
            ObjectDemo1 od1 = new ObjectDemo1();
            od1.i = 10;
            // 一个类所产生的对象要想被克隆,那么这个类必须实现Cloneable接口
            // Cloneable接口中没有任何的方法和属性,仅仅用作一个标志
            // 产生了一个新对象,而新对象的属性值和原对象一样
            ObjectDemo1 od2 = (ObjectDemo1) od1.clone();
            System.out.println(od2.i);
                    //调用哪个对象,只能在对应子类中用,p对象不在对应的Person类中,所以不能使用clone方法
            // Person p = new Person();
            // p.clone();
        }
    }
    // class Person implements Cloneable {
    // }    
    View Code

    finalize()   通知gc进行回收,不能直接调用gc,gc不一定启动

    对象.finalize();
    
    或者
    
    System.gc();(该方法底层调用的是finalize方法)

    getClass()   返回此Object的运行时类

    Object o = "abc";
    //获取对象的实际类型
    System.out.println(o.getClass());

    hashcode()   返回该对象的哈希码值

    Object o = new Object();
    //哈希码是根据哈希散列算法计算出来的
    //哈希散列算法要求计算出来的值随机的散落在int的取值范围内
    //存储对象时以对象的哈希码作为基准
    System.out.println(o.hashCode());

    toString()   返回该对象的字符串表示

    System.out.println(o);
    System.out.println(o.toString());
    // 当直接打印对象的时候,实际上底层默认调用对象的toString方法
    public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    //二进制Bin八进制Oct十进制Dec十六进制Hex
    // 如果重写了这个toString,那么按照重写之后的形式来返回

    equals()   比较俩对象是否相等

    public boolean equals(Object obj) {
            return (this == obj);
    }

    重写equals()方法,比较包含具体属性的俩对象是否相等

    package cn.jay.exer;
    public class Exer5 {
        public static void main(String[] args) {
            Student1 s=new Student1();
            s.setName("xiao");
            s.setAge(30);
            s.setId("管理01");    
            Student1 s1=new Student1();
            s1.setName("xiao");
            s1.setAge(30);
            s1.setId("管理01");
            //System.out.println(s.getName());
            //底层用==进行比较,==默认比较的是地址
            System.out.println(s.equals(s1));
        }
    }
    class Student1{
        String name;
        int age;
        String id;    
        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 String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        @Override
        public boolean equals(Object obj) {
            //判断地址是否一致
            if (this == obj)
                return true;
            //判断参数是否为空
            if (obj == null)
                return false;
            //判断类型是否一致
            if (getClass() != obj.getClass())
                return false;
            //将obj强转为Student1类型,保持类型一致,然后比较两个对象的属性值
            Student1 s = (Student1) obj;
            if (age != s.age)
                return false;
            //id是String类型,所以需要使用String中的equals比较
            if (id == null) {
                if (s.id != null)
                    return false;
            } else if (!id.equals(s.id))
                return false;
            //name是String类型,所以需要使用String中的equals比较
            if (name == null) {
                if (s.name != null)
                    return false;
            } else if (!name.equals(s.name))
                return false;
            return true;
        }    
    }
    View Code
  • 相关阅读:
    docker 如何启动空容器
    dotnet5.0 aspnetcore runtime docker镜像
    abp asp.net core 手动获取容器中的服务
    我把代码写在别人的分支了?别慌,有办法解决
    var重复声明为什么后续声明会被忽略
    flex布局不常用到的属性整理
    微信openID和unionID的区别
    js稀疏数组、密集数组、数组空位、手写数组map方法
    vscode格式化代码换行?试试这个配置
    封装一个公共组件并上传到npm仓库
  • 原文地址:https://www.cnblogs.com/lj-cn/p/9343524.html
Copyright © 2011-2022 走看看