初始化块和构造函数执行顺序的问题

问题描述

classParent{publicStringname="父类";publicParent(){System.out.println("父类无参数构造函数");}publicParent(Stringname){this.name=name;System.out.println("父类有参数构造函数name:"+name);}static{System.out.println("父类静态初始化块");}{System.out.println("父类普通初始化块");}}classChildextendsParent{publicStringname;publicChild(){super("子类");System.out.println("子类的构造函数");}static{System.out.println("子类静态初始化块");}{System.out.println("子类普通的初始化块");}}/**父类静态初始化块子类静态初始化块父类普通初始化块@1:父类有参数构造函数name:子类@2:子类普通的初始化块子类的构造函数===================父类普通初始化块父类有参数构造函数name:子类子类普通的初始化块子类的构造函数*/newChild();System.out.println("===================");newChild();@1为什么会在@2前执行,不是先执行初始化块,然后再执行构造函数吗??

解决方案

本帖最后由 meoujb 于 2011-04-22 16:49:55 编辑
解决方案二:
父类的:父类普通初始化块@1:父类有参数构造函数name:子类子类的:@2:子类普通的初始化块子类的构造函数有哪里不对么。@1和@2一个是父类一个是子类
解决方案三:
在java中static静态块里的东西是编译的时候就执行的所以肯定在最前面先父类在子类而后执行父类的初始化块父类的构造方法子类的初始化块子类的构造方法就是这样的一个顺序楼主有什么不明白的吗
解决方案四:
引用1楼lrbyantai的回复:

父类的:父类普通初始化块@1:父类有参数构造函数name:子类子类的:@2:子类普通的初始化块子类的构造函数有哪里不对么。@1和@2一个是父类一个是子类

static静态块里的东西是初始化类的时候执行的,不是编译的时候

时间: 2024-09-19 23:52:54

初始化块和构造函数执行顺序的问题的相关文章

Java初始化块与构造器执行顺序有不明白的地方

问题描述 classRoot{static{System.out.println("Root的静态初始化块");}{System.out.println("Root的普通初始化块");}publicRoot(){System.out.println("Root的无参数的构造器");}}classMidextendsRoot{static{System.out.println("Mid的静态初始化块");}{System.out

javaee-java中构造块和成员变量的执行顺序是依据什么机制?

问题描述 java中构造块和成员变量的执行顺序是依据什么机制? 代码的执行不是应该和写的顺序无关吗 但是为什么构造块和成员变量的顺序不一样,执行的结果也不一样呢??? 求大神解答 解决方案 你的理解是有误的,成员变量的初始化值跟代码顺序有一定关系的.java创建对象时,对实例变量即类的非静态成员的初始化,主要在三个地方 1 成员变量定义时指定初始值 2 非静态代码块中指定初始值 3 构造函数中对成员变量指定初值值 这三种方式1,2执行先于构造函数3的执行,但是1,2方式的执行顺序与源程序中的排列

你是否理解&#106avascript的执行顺序?

执行 通常状况下,javascript作为一种解释性的脚本,都是从上而下顺序执行的,但是JavaScript还允许在其语句中嵌套,也就是这个样子: document.write("<script>alert(t);</scr"+"ipt>"); 注意:</script>不能写作</script>,要用字符串连接的形式来表述,否则会有语法错误,估计是因为JavaScript遇到</script>就以为脚本结束

你是否理解JavaScript的执行顺序?

javascript|执行 通常状况下,JavaScript作为一种解释性的脚本,都是从上而下顺序执行的,但是JavaScript还允许在其语句中嵌套,也就是这个样子: document.write("<script>alert(t);</scr"+"ipt>"); 注意:</script>不能写作</script>,要用字符串连接的形式来表述,否则会有语法错误,估计是因为JavaScript遇到</script

Java 中的 static 使用之静态变量&amp;#183;静态方法&amp;#183;静态初始化块

Java 中的 static 使用之静态变量 大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 static 大显身手的时候了!! Java 中被 static 修饰的成员称为静态成员或类成员.它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享.静态成员可以使用类名直接访问,也可以使用对象名进行访问.当然,鉴于他作用的特殊性更推荐用类名访问~~ 使用 static 可以修饰变量.方法和

C#小测试(一):类成员初始化与构造函数执行的顺序

看看下面这段代码,你觉得它会输出什么呢? class Foo { public Foo(string s) { Console.WriteLine("Foo constructor: {0}", s); } public void Bar(){} } class Base { readonly Foo baseFoo = new Foo("Base initializer"); public Base() { Console.WriteLine("Base

举例说明Java中代码块的执行顺序_java

前言    今天在看Android ContentProvider实现的时候,突然想到了Java类在new的过程中,静态域.静态块.非静态域.非静态块.构造函数的执行顺序问题.其实这是一个很经典的问题,非常考察对Java基础知识的掌握程度.很多面试过程中相信也有这样的问题,趁着周末有时间复习一下. 结论    这里先把整理好的结论抛给大家,然后我在写个程序来验证我们的结论.在Java类被new的过程中,执行顺序如下:     实现自身的静态属性和静态代码块.(根据代码出现的顺序决定谁先执行)  

在Java中自由块的执行顺序_java

java中的自由块分为静态的自由块和非静态的自由块. 非静态自由块的执行时间是:在执行构造函数之前. 静态自由块的执行时间是:class文件加载时执行. 非静态自由块可以多次执行,只要初始化一个对象就会执行,但是静态自由块只会在类装载的时候执行一次,一般用来初始化类的静态变量的值. 每次初始化一个对象,都会导致一次非静态块的执行. 如果涉及到继承,则是:首先执行父类的非静态块,然后是父类的构造函数,接着是自己的自由块,最后是自己的构造函数. 静态块的执行时机是在class文件装载的时候,clas

javascript的执行顺序

 JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行 如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握javascript的执行顺序,那你就犹如伯乐驾驭不了千里马,让千里马脱缰而出,四处乱窜.   那么JavaScript是怎么来进行解析的吗?它的执行顺序又是如何的呢?在了解这些之前,我们先来认识几个重要的术语:   1.代码块 JavaScript中的代码块是指由<script>