继承相关的面试题
来源:互联网 发布:windows xp开机蓝屏 编辑:程序博客网 时间:2024/06/07 21:48
题目一:
class Fu{int num = 10;Fu(){System.out.println("fu");}}class Zi extends Fu{int num = 50;Zi(){System.out.println("zi");}void show(){int num = 30;System.out.println(num);System.out.println(this.num);System.out.println(super.num);}}class Rectangle{public static void main(String args[]){Zi z = new Zi();z.show();}}
执行顺序:
1、类的初始化过程:成员变量的初始化,默认初始化,显示初始化,构造方法初始化。
2、Zi z = new Zi(),首先JVM在堆内存中开辟一个空间,并开始对这个内存空间进行初始化。
3、初始化过程:首先开辟空间的同时,本来是要调用 Zi 类的构造方法,但是它存在继承关系,所以首先去初始化父类的成员变量,对成员变量进行默认初始化,然后再进行显示初始化,最后调用父类的构造方法;最后到子类进行相同的操作。
4、初始化完毕之后,就把地址赋给 z,然后 z 指向 new Zi() 开辟的内存空间,z 也就可以调用 Zi 的show方法,num代表的是当前方法的局部变量,this.num代表的是当前类的全局变量num,super.num代表的是父类的num。
5、输出结果:fu,zi,30,50,10
题目二:
class Fu{static{System.out.println("父类静态代码块");}{System.out.println("父类构造代码块");}Fu(){System.out.println("父类构造方法");}}class Zi extends Fu{static{System.out.println("子类静态代码块");}{System.out.println("子类构造代码块");}Zi(){System.out.println("子类构造方法");}}class Text{public static void main(String args[]){Zi zi = new Zi();}}
执行顺序:
1、执行new Zi(),JVM开辟空间,同时为对应的内存空间进行初始化。初始化过程如下:
2、本来首先对子类进行初始化,但是子类继承父类,所以首先初始化父类,但这次不是首先初始化父类的构造方法,而是首先实行父类的静态代码块,因为静态代码块是用于初始化类的,类一旦加载,就会首先执行静态代码块。
3、执行完父类的静态代码块,就会执行子类的静态代码块,执行完子类的静态代码块就会执行父类的构造代码块,然后再执行构造方法,执行完父类的构造方法,就会在子类执行相同的操作。
4、Q:为什么会先执行构造代码块,再执行构造方法?
A:因为构造代码块是初始化所有的对象的,而构造方法是初始化对应的对象的,比如 Zi() 只是用于zi对象的初始化。
5、Q:为什么会先执行静态代码块,然后再执行构造代码块?
A:因为静态代码块是初始化类的,构造代码块是初始化对象的,类一旦加载就会执行静态代码块,对象一旦建立就会执行构造代码块。
题目三:
class A{B b = new B();A(){System.out.println("A的构造方法");}}class B{B(){System.out.println("B的构造方法");}}class Text extends A{B b = new B();Text(){System.out.println("Text的构造方法");}public static void main(String args[]){new Text();}}
执行顺序:
1、main函数入口,执行new Text(),JVM为其开辟空间,然后初始化步骤如下:
2、原本是首先初始化Text类的,但是因为Text类有继承关系,所以首先对父类A进行初始化,首先对父类的成员变量进行初始化,执行new B(),也同时执行B类的构造方法,打印内容。然后才执行A类的构造方法,打印内容。最后,父类才初始化完成。
3、然后到Text子类进行初始化工作。首先执行new B(),同时执行B的构造方法,然后再往下指向,执行Text的构造方法,最后,初始化完成,程序停止。
0 0
- 继承相关的面试题
- 继承相关面试题
- 继承的面试题
- Handler相关的面试题
- 数组相关的面试题
- .NET相关的面试题
- 随机数的相关面试题
- String相关的面试题
- EJB相关的面试题
- Activity相关的面试题
- 单链表的相关面试题
- Handler相关的面试题
- 随机数的相关面试题
- 框架相关的面试题
- java面试题:有关于继承的面试题
- js面试题--js的继承
- java 继承常见的面试题
- 关于类继承的面试题
- 行为识别综述笔记
- HDU 1907 John(Nim game)
- PHPExcel实例
- IP和整数的相互转换
- apache mina 自学
- 继承相关的面试题
- 各类程序员学习路线图
- (课堂讨论)关于编码规范
- 关于 iOS 10 中 ATS 的问题
- zookeeper两个经典问题-带着问题看源码
- 算法导论学习日记(7)冒泡排序的递归实现
- 银联"押宝"二维码支付 背后还有一片纷争江湖
- arduino学习系列——DHT11温湿度传感器的使用
- 数据结构 邻接矩阵 DFS