Java中关于static语句块的理解

一、static块会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法。

实例一

public class A{
String name;
public A(String name){
this.name = name;
} //静态块
static{
System.out.println("static语句块执行");
} public static void main(String args[]){
A a = new A("张三");
A b = new A("李四");
A c = new A("王五");
}
}

程序运行后只输出了一条“static语句块执行”语句,因为在Java虚拟机的生命周期中一个类只被加载一次,又因为静态块是伴随A类加载执行的,所以不管构建多少次A类的实例对象,静态块都会被执行且只执行一次。


实例二

class A{
public A(){
System.out.println("A在构造体内");
}
{System.out.println("A在普通块内");}
static{
System.out.println("A在static静态块内");
}
}

public class B extends A{
public B(){
System.out.println("B在构造体内");
}
{System.out.println("B在普通块内");}
static{
System.out.println("B在static静态块内");
} public static void main(String args[]){
new B();
}
}

输出结果如下:

A在static静态块内
B在static静态块内
A在普通块内
A在构造体内
B在普通块内
B在构造体内

二、Java 静态语句块、语句块、构造函数的执行顺序

class Parent{    
  static String name = "hello";    
   
  {    
      System.out.println("3 parent block");    
  }    
  static {    
      System.out.println("1 parent static block");    
  }    
   
  public Parent(){    
      System.out.println("4 parent constructor");    
  }    
}    
   
class Child extends Parent{    
  static String childName = "hello";    
   
  {    
      System.out.println("5 child block");    
  }    
  static {    
      System.out.println("2 child static block");    
  }  
   
  public Child(){    
      System.out.println("6 child constructor");    
  }    
}    
   
public class StaticIniBlockOrderTest {    
   
  public static void main(String[] args) {    
      new Child();//语句(*)    
  }    
}    

结果:

1 parent static block 2 child static block 3 parent block 4 parent constructor 5 child block 6 child constructor

执行 顺序:

1)执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容;

2)当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构 造方法;

3)父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。

总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。 而且子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。

Java中关于static语句块的理解的更多相关文章

  1. java中的static代码块为什么只执行一次

    原因在最后,这是其中的一个小例子. 如: SessionFactory负责保存和使用所有配置信息,消耗内存资源非常大 所以一个web项目要保证只创建一个SessionFactory 那么在使用hibe ...

  2. 转 java中static{}语句块详解

    原文地址:http://blog.csdn.net/lubiaopan/article/details/4802430     感谢原作者! static{}(即static块),会在类被加载的时候执 ...

  3. java中static{}语句块详解

    static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法,下面我们详细的讨论一下该语句块的特性及应用. 一.在程序的一次执行过程中,stati ...

  4. 关于java的static语句块

    声明:转载请注明出处 static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法,下面我们详细的讨论一下该语句块的特性及应用. 一.在程序的一次 ...

  5. Java static{}语句块详解

    [转自] http://blog.csdn.net/lubiaopan/article/details/4802430 static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一 ...

  6. static 语句块

    static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法,下面我们详细的讨论一下该语句块的特性及应用. 一.在程序的一次执行过程中,stati ...

  7. Java 中的 static 使用之静态初始化块

    Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意: ...

  8. (转)Java中的static关键字解析

    转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...

  9. Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

随机推荐

  1. 解决WIN7远程登录提示无法保存凭据的问题

    事由:今天到公司,想起手上还有点小东西没有改动完,就打算连上server进行小改动.结果发现昨天还能好好的远程连接server的WIN7,今天突然间不能远程登录了~ 无奈~悲催~ 我仅仅能猜是不是有什 ...

  2. Peer To Peer——对等网络

    今年的考试.大问题没怎么出现. 就是考英语第二天的下午,发生网络阻塞的现象,不影响大局.可是事出有因,我们还是须要看看是什么影响到了考生抽题.最后查了一圈,发现其它几场的英语考试听力都是19M大小,而 ...

  3. .Net MVC小尝试

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  4. BFC的布局规则和触发条件

    1   .BFC的含义 :          Block Formatting Contexts(BFC)                                      块级元素格式化上下 ...

  5. windows下gopath设置

    下载了go语言的安装包, 然后安装, 装完了需要设置三个地方: 1. 在windows的PATH变量中添加go的可执行文件所在的目录: PATH=C:\Go\bin;其他设置; 2. 设置 GOROO ...

  6. angular路由(自带路由篇)

    一.angular路由是什么? 为了实现SPA多视图的切换的效果,其原理可简述为每个 URL 都有对应的视图和控制器.所以当我们给url后面拼上不同的参数就能通过路由实现不同视图的切换. 二.文件总览 ...

  7. 洛谷——P1311 选择客栈

    https://www.luogu.org/problem/show?pid=1311 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰 ...

  8. Drupal 关于节点(nodes)的理解

    在 Drupal 构建的站点中.全部的内容都是以节点形式存储的,一个节点能够是公布的不论什么一个内容,比方说一个单面(page).一个投票(Poll).一篇文章(article).论坛主题(forum ...

  9. Uniform Server

    Uniform Server http://www.uniformserver.com/ https://sourceforge.net/projects/miniserver/files/ Unif ...

  10. actionmode-ActionMode以及它的menu使用

    下图左边效果为Context Menu右边效果为ActionMode. ActionMode 其实就是替换在actionbar的位置上显示的一个控件.它跟actionbar一样,也是一种导航作用.只不 ...