我是靠谱客的博主 舒心小蜜蜂,最近开发中收集的这篇文章主要介绍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的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复