• 【Java】【常用类】Object 基类 源码学习


    源码总览:

    有好些都是native本地方法,背后是C++写的

    没有关于构造器的描述,默认编译器提供的无参构造

    https://blog.csdn.net/dmw412724/article/details/81477546

    啊,为什么还是native。目前只能得出的结论是 凡是native修饰的方法,都是JNI调用C++或者C的代码实现的

    获取类对象,用于反射和读取配置文件之类的

    public final native Class<?> getClass();

    获取对象的哈希值,类似C的地址值,由于是在JVM运行的,所以并不是真实的内存地址值,是虚拟的

     - 可用于辅助判断两个对象是否是一样的

    public native int hashCode();

    原汁原味的equal判断,直接取地址比较

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

    克隆方法,返回一个复制出来的对象,除了new方式的第二种获取对象的办法

    - 注意 不支持克隆异常 ,此方法需要实现Cloneable接口才可用使用

    protected native Object clone() throws CloneNotSupportedException;

    默认的toString方法

    - 返回的是 对象所属的类的完整类名 和 转换成16进制的哈希值

    public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }

    多线程开发所用,方法意思通知

    【通知一个在对象上等待的线程,使其从wait方法中返回,返回需要获取到该对象的锁 】

        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 {
            if (timeout < 0) {
                throw new IllegalArgumentException("timeout value is negative");
            }
    
            if (nanos < 0 || nanos > 999999) {
                throw new IllegalArgumentException(
                                    "nanosecond timeout value out of range");
            }
    
            if (nanos > 0) {
                timeout++;
            }
    
            wait(timeout);
        }

    【进入等待状态,直至被其他线程通知,或者中断 才返回】

    public final void wait() throws InterruptedException {
            wait(0);
        }

    【对象被销毁时执行的方法】

    protected void finalize() throws Throwable { }

    GC回收和==与equals的区别?

    重写toString & equals

    public class ObjectTest {
    
        /*
        Object 是所有类的父类
        类中的声明未使用extends关键字指明父类,默认父类为java.lang.Object父类
    
        垃圾回收机制的关键点
        垃圾回收机制只回收JVM堆内存的对象空间
        对其他物理连接,数据库链接,IO流,Socket链接无力
        JVM实现垃圾回收的算法,很多种
        垃圾回收具有不可预知性,程序无法精确控制机制执行
        不过我们可以把对象的引用设置为null (Object obj = null) 让对象失去引用指向,引导GC回收
    
        我们也可以手动设置GC通知系统进行回收,但是系统是否进行回收无法确定
    
        GC在回收对象之前,一定先调用Finalize方法,
        如果覆盖Finalize方法,让一个新的引用变量 重新引用对象,则会重新激活对象
    
        我们不应该主动调用finalize方法,交由GC自动处理就好了
    
        面试常问 final 、 finally 、 finalize  的区别?
    
        面试: == 和equals的区别?
    
        ==
        基本数据类型和引用数据类型都可以使用
    
        基本类型可以类型不同,数据在进行转换之后进行比较。其字面值的地址一样返回true
        引用类型,直接取实例的地址值进行比较,一样返回true
    
        equals不是运算符,是一个方法,只适用引用类型
        Object类原型方法采用就是 == 比较
    
        其他衍生类重写了equals方法,第一方法仍然是取地址比较
        其次比较对象的属性是否一样,
    
        输出一个对象的引用时,就是调用toString方法
        其他类重写了toString方法,返回的是对象的内容信息
         */
    
        public static void main(String[] args) {
            SubObj obj = new SubObj();
    
            // getClass() 获取这个实例的所属类
            // getSuperClass() 获取个类的父类
            Class<?> superclass = obj.getClass().getSuperclass();
            System.out.println(superclass);
    
            int i = 10;
            double d = 10.0;
            char c = 10;
    
            System.out.println(i == d);// true
            System.out.println(d == c);// true
        }
    }
    
    class SubObj{
        int age;
        String name;
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof SubObj)) return false;
            SubObj obj = (SubObj) o;
            return age == obj.age && Objects.equals(name, obj.name);
        }
        @Override
        public int hashCode() {
            return Objects.hash(age, name);
        }
    }
    View Code
  • 相关阅读:
    aa
    ECS上搭建Docker(CentOS7)
    mysql时间戳转日期
    rsync用法
    docker安装mysql8
    使用Docker安装mysql,挂载外部配置和数据
    my.cnf
    Centos7通过yum安装jdk8
    maven添加本地包命令mvn install:install-file
    Mysql——查看数据库,表占用磁盘大小
  • 原文地址:https://www.cnblogs.com/mindzone/p/12715460.html
Copyright © 2020-2023  润新知