黑马程序员技术交流社区

标题: 一道面试题 快来猜一猜啊 [打印本页]

作者: 三土    时间: 2015-7-20 23:42
标题: 一道面试题 快来猜一猜啊
package mians;

public class fulei {
        public fulei() {
                System.err.println("A");
        }
        static {
                System.err.println("B");
        }
        {
                System.err.println("C");
        }
        public static void main(String[] args) {
                zilei z= new zilei();
        }
}

class zilei extends fulei{
        public zilei() {
                // TODO Auto-generated constructor stub
                System.err.println("D");
        }
        static {
                System.err.println("E");
        }
        {
                System.err.println("F");
        }

}

作者: 绝密飞行    时间: 2015-7-21 00:11
B E C A F D
作者: 大家伙    时间: 2015-7-21 00:19
面试的题目都类似这中难度吗?
作者: huangjiawei    时间: 2015-7-21 00:20
。。。。。。。。。。。。。
作者: 游呤人    时间: 2015-7-21 00:23
有点不记得了
作者: Matrix_heima    时间: 2015-7-21 01:32
父类静态代码块--》子类静态代码块--》父类构造代码块--》父类构造函数其他--》子类构造代码块--》子类构造函数其他
作者: icichacici    时间: 2015-7-21 06:01
B
E
C
A
F
D
作者: 三土    时间: 2015-7-21 10:56
大家伙 发表于 2015-7-21 00:19
面试的题目都类似这中难度吗?

这个是我碰到的 ,是一道填空题
作者: 以梦为码    时间: 2015-7-21 13:28
b e c a f d
作者: 王文辉    时间: 2015-7-21 14:33
不错,这个已经忘了,正好在看看
作者: eayonh    时间: 2015-7-21 14:44
看看……
作者: 章浩    时间: 2015-7-21 15:28
学习了!
作者: 鹰隼展翼    时间: 2015-7-21 19:58
复习了一下,都快忘了
作者: 为明天而奋斗    时间: 2015-7-21 20:04
是 B E C F A D
作者: 为明天而奋斗    时间: 2015-7-21 20:11
是 B E C A F D   类的加载过程: 1、在创建对象时,会先判断对象所属的类型(类)在内存中是否存在,如果存在则直接使用;如果不存在,则把类加载到内存中的方法区下 2、在把类(.class)加载到方法区时,分两种情况: 2.1、从.class文件的上面向下依次加载内容 2.2、静态的内容加载到方法区的静态区域下 非静态内容加载到方法区的非静态区域下 3、当.class中的内容全部加载到方法区后,会对静态区域下的所有静态变量进行默认初始化 4、当所有的静态变量默认初始化完成之后,再对静态变量进行显式初始化 5、在对所有的静态变量显式初始化完成之后,会调用静态代码块进入到栈中执行 6、只有在所有的静态代码块全部执行(按照静态代码块在.class文件中的先后书写顺序执行)完之后,整个.class的加载才完成。在类加载完成之后,就可以创建对象了:对象的创建过程: 1、在堆中开辟一块空间,在开辟完后,给空间分配一个地址 2、当空间分配地址后,把所有的非静态成员全部加载到开辟的空间下 3、当所有的非静态成员全部加载完成之后,对所有的非静态成员变量进行默认初始化 4、在所有的非静态成员变量默认初始化完成之后,调用该对象的构造函数进入到栈中执行 5、在栈中构造函数执行时,会分为两部分: 5.1、第一部分:隐式三步          1、执行super()语句         2、显式初始化所有的非静态成员变量         3、把构造代码块加到栈中执行 5.2、第二部分:在隐式三步,执行完之后,才会执行构造函数中所书写的代码 6、在整个构造函数全部执行完之后,才会把空间的地址交给对象引用
作者: 梦想起航    时间: 2015-7-21 20:11
B E C A F D
作者: rxtm    时间: 2015-7-21 22:23
都忘光了
作者: cp0717    时间: 2015-7-21 22:48
忘了,刚好复习一下
作者: 白马程序猿    时间: 2015-7-21 23:00
B E C A F D
作者: 人造番茄    时间: 2015-7-21 23:28
B E C A F D
作者: 时光无痕    时间: 2015-7-21 23:33
这个就看执行循序了
作者: 星空1990211    时间: 2015-7-21 23:36
学习中正在基础班学习那:)
作者: Summer910925    时间: 2015-7-22 13:57
父类静态代码块——子类静态代码块——父类构造代码块——父类构造函数——子类构造代码块——子类构造函数
作者: DD_vincent    时间: 2015-7-22 16:12
创建对象的时候,首先要调用类。如果内存中存在类则直接调用,否则先对类进行初始化。初始化由父类以次向下,并且在类的初始化中要将类函数与类变量依次定义。在类的初始化完成后,再由父类向子类以此进行创建,先执行构造代码块,最后执行构造方法(构造函数)。
作者: boboyuwu    时间: 2015-7-22 18:34
Matrix_heima 发表于 2015-7-21 01:32
父类静态代码块--》子类静态代码块--》父类构造代码块--》父类构造函数其他--》子类构造代码块--》子类构造 ...

都没创建父类的对象为什么会调用父类的代码块
作者: 痴人说梦    时间: 2015-7-22 21:15
看看。。。。
作者: jk7130866    时间: 2015-7-22 21:21
学习了
B E C A F D




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2