`
hellbaby666
  • 浏览: 12083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java static块

 
阅读更多

静态块一般用于初始化类中的静态成员;而非静态块一般用于初始化类中的非静态成员;

另外,非静态块是在创建对象时自动执行的代码。

<wbr></wbr>

class Parent{
<wbr><wbr>static String name = "hello";<br><wbr><wbr>{<br><wbr><wbr><wbr><wbr>System.out.println("parent<wbr><wbr>block");<br><wbr><wbr>}<br><wbr><wbr>static {<br><wbr><wbr><wbr><wbr>System.out.println("parent static block");<br><wbr><wbr>}<br><wbr><wbr>public Parent(){<br><wbr><wbr><wbr><wbr>System.out.println("parent constructor");<br><wbr><wbr>}<br> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

class Child extends Parent{
<wbr><wbr>static String childName = "hello";<br><wbr><wbr>{<br><wbr><wbr><wbr><wbr>System.out.println("child<wbr><wbr>block");<br><wbr><wbr>}<br><wbr><wbr>static {<br><wbr><wbr><wbr><wbr>System.out.println("child static block");<br><wbr><wbr>}<br><wbr><wbr>public Child(){<br><wbr><wbr><wbr><wbr>System.out.println("child constructor");<br><wbr><wbr>}<br> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

public class StaticIniBlockOrderTest {

<wbr><wbr>public static void main(String[] args) {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>new Child();//语句(*)<br><wbr><wbr>}<br> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr></wbr></wbr>

顺序应该是这样的:父类Static->子类static->父类缺省{}->父类构造函数->子类缺省{}->子类构造函数
所以上面的例子打印顺序应该是这样的:
parent static block 父类Static
child static block 子类static
parent<wbr><wbr>block 父类缺省{}<br> parent constructor 父类构造函数<br> child<wbr><wbr>block子类缺省{}<br> child constructor子类构造函数</wbr></wbr></wbr></wbr>

问题:当执行完语句(*)时,打印结果是什么顺序?为什么?
解答:当执行完语句(*)时,打印结果是这样一个顺序:parent static block,child static block,parent<wbr><wbr>block,parent constructor,child<wbr><wbr>block,child constructor。<br> 分析:当执行new Child()时,它首先去看父类里面有没有静态代码块,如果有,它先去执行父类里面静态代码块里面的内容,当父类的静态代码块里面的内容执行完毕之后,接着去执行子类(自己这个类)里面的静态代码块,当子类的静态代码块执行完毕之后,它接着又去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法,这个就是一个对象的初始化顺序。<br><br> 总结:对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。<br><br> 注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。</wbr></wbr></wbr></wbr>

分享到:
评论

相关推荐

    Java中的Static块与静态方法

    浅析Java中静态块与静态方法的区别与联系,执行顺序。

    java static块和构造函数的实例详解

    主要介绍了java static块和构造函数的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握Java static关键字的函数方法,需要的朋友可以参考下

    java中static作用

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念……

    Java static静态初始快

    Java static修饰初始块。初级代码,仅供参考学习。

    Java中的static关键字

    细说Java中的static关键字声明的变量、方法、静态块

    java中的static变量,方法,代码块

    java中的static变量,方法,代码块 含例子和解释

    Static块---马克-to-win Java视频

    Static块 马克-to-win Java视频 静态块 静态块初始化

    java中static的作用

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块

    Static块2---马克-to-win Java视频

    Static块 2---马克-to-win Java视频 java视频 马克Java社区 马克towin

    Java中static变量作用和用法步骤

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。  被static修饰的成员变量和成员方法独立于该类的任何对象。也是说,它不...

    Java程序设计实验11-static、super、final、代码块.docx

    Java程序设计实验11-static、super、final、代码块.docxJava程序设计实验11-static、super、final、代码块.docxJava程序设计实验11-static、super、final、代码块.docxJava程序设计实验11-static、super、final、...

    static关键字简介

    类的成员变量 成员方法或者是代码块 下面我们就来说说这个 static 关键字 有时候程序员可能需要定义一个类成员 对它的使用不依赖于该类的任何对象 要创建 这样的成员 成员变量声明前必须加上关键字 static 成员声明...

    Java之static用法

    Java之static用法 在Java语言中,static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块

    java中的static{}块的实例详解

    主要介绍了java中的static{}块的实例详解的相关资料,这里提供实例来帮助大家理解该如何使用static块,需要的朋友可以参考下

    Java零基础-static关键字.md

    建议通过阅读相关的Java教材或搜索资料,进一步扩展学习与static关键字相关的高级主题,如静态代码块、静态内部类和静态导入等内容。 如有疑问,可以参考Java官方文档或向技术论坛寻求帮助,进一步加深对static...

    Java静态初始化块和对象初始化块

    NULL 博文链接:https://yuu1987.iteye.com/blog/1113142

    java 代码块与静态代码块加载顺序

    主要介绍了java 代码块与静态代码块加载顺序的相关资料,需要的朋友可以参考下

    Java static关键字详细介绍与用法总结

    主要介绍了Java中static关键字的作用和用法详细介绍,主要讲了静态方法、静态变量、静态类、static和final一块用等内容。需要的朋友可以参考下

    Java之static关键字

    Java开发之static关键字的讲解,废话不多说,直接上代码 一、模板类,里面包括:成员变量、静态变量、普通代码块、静态代码块、普通方法、静态方法、构造函数、静态内部类(包括:成员变量、静态变量、普通代码块、...

    Java下static关键字用法详解

    语句块  2. 成员变量(但是不能修饰局部变量)  3. 方法  4. 接口(内部接口)  5. 类(只能修饰在类中的类, 即静态内部类)  6. jdk 1.5 中新增的静态导入  那么static 修饰的表示什么呢? 当创建一个类时,...

Global site tag (gtag.js) - Google Analytics