我是靠谱客的博主 舒心小蜜蜂,最近开发中收集的这篇文章主要介绍vtable演示初始数据查看vtableObjectvtable不算vable_len1. 内置的init的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

初始数据

AA

public class AA {

    public static final int PAGE = 20;

    private int num = 10;

    public void name(){
        System.out.println("AA");
    }

    public void add() {

    }

}

BB

public class BB extends AA{

    public void name(){
        System.out.println("BB");
    }

    public void del(){
        System.out.println("Del");
    }
}

CC

public class CC extends BB{

    private int num = 20;

    public void name(){
        System.out.println("CC");
    }

    public void print(){
        System.out.println("print");
    }
}

查看vtable

AA

在这里插入图片描述

BB

在这里插入图片描述

CC

在这里插入图片描述

Object

Object全部方法


package java.lang;

public class Object {

    private static native void registerNatives();
    static {
        registerNatives();
    }

    public final native Class<?> getClass();
    
    public native int hashCode();
    
    public boolean equals(Object obj) {
        return (this == obj);
    }
    
    protected native Object clone() throws CloneNotSupportedException;
    
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    
    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 {
        wait(0);
    }
    
    protected void finalize() throws Throwable { }
}

可被重写方法

排除static、final修饰的方法,以下方法可被子类重写,所以继承Object的java类,vtable大小最小就是5

public class Object {
    
    public native int hashCode();

    
    public boolean equals(Object obj) {
        return (this == obj);
    }
    
    protected native Object clone() throws CloneNotSupportedException;

    
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    
    protected void finalize() throws Throwable { }
}

vtable

instanceKlass.cpp:462

klassVtable* InstanceKlass::vtable() const {
  return new klassVtable(this, start_of_vtable(), vtable_length() / vtableEntry::size());
}

不算vable_len

1. 内置的init的方法

不算vtable_len

<init>

static方法

不算vtable_len

public class CC {

    public static void say(){  // static 不算
        System.out.println();
    }

}

在这里插入图片描述

final方法

不算vtable_len
(如果final方法覆盖了父类的方法,那么只要更新父类vtable中对应vtableEntry即可)

// a final method never needs a new entry; final methods can be statically   
// final 方法从不需要新条目; 
// resolved and they have to be present in the vtable only if they override   
// 只有当它们覆盖父类方式时,才出现在 vtable 中,在这种情况下,他们重用它的入口
// a super's method, in which case they re-use its entry                
public class DD {

    public final void abc(){  // final 不算

    }

}

在这里插入图片描述

private方法

  // 类中的私有方法在 vtable 中总是有一个新条目
  // private methods in classes always have a new entry in the vtable
  // specification interpretation since classic has
  // private methods not overriding
  // JDK8 adds private methods in interfaces which require invokespecial

对本类算

前提只有private修饰的,没有static、final

public class BB {
    private void mes(){ // vtable算进去
        System.out.println("BB");
    }
}

在这里插入图片描述

private 对子类及子子类

前提只有private修饰的,没有static、final

public class BBB extends BB{
 // 继承BB
}

在这里插入图片描述

子子类

public class BBBB extends BBB{
}

在这里插入图片描述

最后

以上就是舒心小蜜蜂为你收集整理的vtable演示初始数据查看vtableObjectvtable不算vable_len1. 内置的init的方法的全部内容,希望文章能够帮你解决vtable演示初始数据查看vtableObjectvtable不算vable_len1. 内置的init的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部