无继承的情况
class A(){
private int x;
private static int y;
public void f(){...}
public void b(int k){...}
public static void h(){...}
}
...
new A();//实例化
上述代码中实例化对象A;A对象在内存中是怎么存储的呢?如图:
说明:
1,对于静态数据,在整个类中只此一份,所以没有必要将其和对象存储在一起,而是单独的存储在静态数据区中
2,对于方法而言,相同类实例化来的对象要执行的方法都是相同的,没有必要多次存储,因此方法放在单独的方法区存储。
因此,在逻辑上可以视“方法+数据=对象”。
有继承的情况
class A(){
private int x;
}
class B extends A(){
private int x;
public int y;
}
class C extends B(){
private int z;
}
...
new C();//实例化对象
//上述代码中,B类继承了A类,C类继承了B类,A类继承了Object类
//在java中所有类都必定继承了其他类,默认继承Object
下图表示分别C,B,A类的实例化对象,在内存中所包含的数据
关于2个x,在A类中,x是private的,私有数据会被隐性继承,所以在B类的实例化对象内存中存在2个x。