首先看一段程序:
abstract class A{
public A(){
this.print() ;
}
public abstract void print() ;
}
class B extends A{
private int i = 10 ;
public B(int i){
this.i = i ;
}
public void print(){
System.out.println(this.i) ;
}
};
public class Demo{
public static void main(String artgs[]){
new B(100) ;
}
};
结果是:0;
解释1:
debug跟踪一下,最清晰.
public B(int i)方法前,先调用父类的构造public A(),然后执行this.print();执行System.out.println(this.i) ;此时i还没有赋值,也就是private int i = 10 ;这句还没有执行,此时的i值为初始化的值0.
解释2:
当new B(100);的时候,代码执行顺序为:
public B(int i){
public A(){
this.print(){
System.out.println(this.i) ;
}
}
this.i = i ;
}
这样你应该明白为什么是0了么?
解释3:
要弄清初始化的过程
1.当new B(100) 时,jvm会在内存中申请一块恰好够放下B的内存。
2.这块内存清零。也就这块内存用二进制的0填存之。这时所有成员都被初始化为0了。
3.调用子类的构造方法,本例中调用的是B的构造方法。
4.子类构造中,第一件事就是调用父类的构造方法。本例中调用了类A的构造方法,执行了print()方法,打印出i的值,结果当然是0.
5.父类的构造方法结束后,子类的成员按它们出现的次序初始化。本例中i=10被执行。
6.继续执行子类构造方法中的其它语句。本例中执行i=100.
分享到:
相关推荐
类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序
本篇文章主要介绍了Spring 中如何控制2个bean中的初始化顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
C++ 成员变量的初始化顺序问题详解 问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void Print(){ cout <&...
介绍一下java程序初始化的顺序,这会对您以后的开发所有帮助
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
(1)初始化顺序表L (2)从标准输入(键盘)逐个数据输入a,b,c,d,e元素 ,建立顺序表 (3)输出顺序表L (4)输出顺序表L的长度 (5)判断顺序表L是否为空 (6)输出顺序表L的第3个元素 (7)输出元素a的位置...
java面试题-类的初始化顺序.doc 大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,...
使用c++实现顺序表的基本操作: 1、顺序表的初始化 2、顺序表的长度 3、顺序表插入元素 4、删除顺序表元素 5、遍历顺序表 6、查找顺序表元素
详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序
类的初始化顺序,适用于任何一种面向对象的语言。真正了解面向对象的程序的流程。配有实例
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
具体内容见博客
Java初始化顺序1
这是我获得的java的代码,这个主要关于成员的初始化顺序和多态性,这个代码主要用于学习和交流,希望大家喜欢。
对java类初始化以及顺序,详解,由于转载仅供大家参考!
SD卡的SPI模式的初始化顺序,对开发SD卡很有帮助
作为一名程序员必须知道Java初始化顺序......
数据结构 是个指针变量,实际的意思是指向一个内存地址,当p=(char *)malloc(2) 后,p即指向了malloc函数所分配的内存区的首地址了,并且告诉你从首地址
一个java代码初始化具体过程的的demo