zoukankan      html  css  js  c++  java
  • Object类

    Object通用方法

    Object 类是所有类、数组、枚举类的父类,也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量,当一个类时没有使用显式继承某个类时 , 默认继承 Object 类。

    因为所有的 Java 类都是 Object 类的子类,所以任何 Java 对象都可以调用 Object 类的方法。Object 类提供了如下几个常用方法。

    equals

    public boolean equals(Object obj);
    

    equals() 是用来判断两个对象是否等价。默认情况下, equals 方法等同于 == 运算符,对于基本类型判断值是否相等,对于引用类型判断指向的是否为同一个对象,所有引用类型一般要重写 equals 方法。

    hashCode

    public native int hashCode() ;
    

    native 说明该方法是原生方法,也就是这个方法是用 C/C++ 语言实现的,并且被编译成了DLL,由 java 去调用。

    hashCode() 方法返回散列值。默认情况下,hashCode 是根据对象地址计算的,一般要重写根据对象数据计算,要求 equals() 返回 true 的同时,hashCode() 返回值相等,尤其对于 HashMap 和 HashSet 基于哈希表运算的数据结构。

    toString

    public String toString();
    

    返回该对象的字符串。默认情况下,返回 ”运行时类名@十六进制 hashCode 值” 格式字符串,一般要重写,返回对象的重要信息。

    clone

    protected native Object clone() throws CloneNotSupportedException;
    

    clone() 是 Object 的 protected 方法,它不是 public,一个类不显式去重写 clone(),其它类就不能直接去调用该类实例的 clone() 方法。

    //Cloneable是一个标记性接口,里面什么都没定义
    //如果一个类没有实现Cloneable接口而调用了clone()方法,会抛出异常
    public class A implements Cloneable {
    
        @Override
        public A clone() throws CloneNotSupportedException {
            //super.clone()会返回该对象的副本
            return (A)super.clone();
        }
    
        public static void main(String[] args) {
            A a1 = new A();
            A a2 = null;
            try {
                a2 = a1.clone();
            } catch (CloneNotSupportedException e) {
                e.printStackTrace();
            }
            
            System.out.println(a1 == a2);  //false
        }
    }
    

    需要指出,Object 的 clone() 只是一种 “浅拷贝”,它只克隆该对象的所有成员变量值,不会对引用类型的成员变量值所引用的对象进行克隆,所以 “深拷贝” 还需要自己编写。

    getClass

    public final native Class<?> getClass();
    

    返回该对象运行时类。

    finalize

    protected void finalize() throws Throwable;
    

    当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源。

    控制线程

    public final native void notify(); 
     
    public final native void notifyAll(); 
     
    public final native void wait(long timeout) throws InterruptedException; 
     
    public final void wait(long timeout, int nanos) throws InterruptedException; 
     
    public final void wait() throws InterruptedException;
    


    Objects工具类

    Java 为工具类的命名习惯是添加一个字母 s,比如操作数组的工具类是 Arrays,操作集合的工具类 Collections。

    public class A {
        //定义一个 obj 变量,默认值为 null
        static A obj;
        public static void main(String[] args) {
            //计算一个null对象的hashCode值
            System.out.println(Objects.hashCode(obj));  //0
    
            //输出一个null对象的 toString
            System.out.println(Objects.toString(obj));  //null
    
            //要求obj不能为null,如果obj为null抛出异常
            System.out.println(Objects.requireNonNull(obj)); //异常
        }
    }
    
  • 相关阅读:
    Discuz安装(centos+宝塔)
    宝塔面板安装
    Java中设置classpath、path、JAVA_HOME的作用
    【JDK和Open JDK】平常使用的JDK和Open JDK有什么区别
    提取Chrome插件为crx文件
    Python 01
    Java 01
    HTML5学习之FileReader接口
    formidable上传图片
    Mac系统下brew安装指定版本的nodejs小笔记
  • 原文地址:https://www.cnblogs.com/zongmin/p/11342745.html
Copyright © 2011-2022 走看看