java构造函数 代码块 静态代码块_静态代码块、非静态代码块、构造函数的执行顺序...

class="java" name="code">

public class ExA {

static {

System.out.println("父类--静态代码块");

}

public ExA() {

System.out.println("父类--构造函数");

}

{

System.out.println("父类--非静态代码块");

}

public static void main(String[] args) {

new ExB();

}

}

class ExB extends ExA {

static {

System.out.println("子类--静态代码块");

}

{

System.out.println("子类--非静态代码块");

}

public ExB() {

System.out.println("子类--构造函数");

}

}

执行结果

=====

父类--静态代码块

子类--静态代码块

父类--非静态代码块

父类--构造函数

子类--非静态代码块

子类--构造函数

可是静态代码块真的会一定在非静态代码块之前执行吗?

下面这段代码

public class ExA {

private static ExA a = new ExA();

static {

System.out.println("父类--静态代码块");

}

public ExA() {

System.out.println("父类--构造函数");

}

{

System.out.println("父类--非静态代码块");

}

public static void main(String[] args) {

new ExB();

}

}

class ExB extends ExA {

private static ExB b = new ExB();

static {

System.out.println("子类--静态代码块");

}

{

System.out.println("子类--非静态代码块");

}

public ExB() {

System.out.println("子类--构造函数");

}

}

执行结果

=====

父类--非静态代码块

父类--构造函数

父类--静态代码块

父类--非静态代码块

父类--构造函数

子类--非静态代码块

子类--构造函数

子类--静态代码块

父类--非静态代码块

父类--构造函数

子类--非静态代码块

子类--构造函数

=====

可以发现非静态代码块并不是一定在静态代码块之后执行的。

我认为此时private static ExA a = new ExA()是静态变量。而java里面静态变量与静态代码块是按代码先后顺序执行。所以就导致非静态代码块在静态代码块之前执行。


http://www.niftyadmin.cn/n/712255.html

相关文章

编译glibc2.19

有些软件可能要求系统的 Glibc 高于某个版本才可以正常运行。如果您的 Glibc 低于要求的版本,为了运行这些软件,您就不得不升级您的 Glibc 了 。您可以寻找已经编译好的 rpm 包或者使用源代码的方式升级 Glibc。下载glibcwget http://ftp.gnu.org/gnu/g…

VMware快照的工作原理(转)

VMware中的快照是对VMDK在某个时间点的“拷贝”,这个“拷贝”并不是对VMDK文件的复制,而是保持磁盘文件和系统内存在该时间点的状态,以便在出现故障后虚拟机能够恢复到该时间点。如果对某个虚拟机创建了多个快照,那么就可以有多个…

ios开发返回按钮消失_关于iOS导航栏返回按钮问题的解决方法

最近遇到一个关于导航栏返回按钮的问题,因为之前项目里面都是用的系统默认的返回按钮样式所以没有想过要去更改,后来有需要将返回按钮箭头旁边的文字去掉,同时将该返回按钮的点击事件重新定义。一开始尝试自定义按钮然后设置为leftBarButtonI…

java本地调用调试_远程调用cmd更新本地jar

/*** 重启完成更新*/publicboolean restart() {log.info("restart");String command "cmd /c start C:\\rct\\winsw\\rct\\update.bat";//测试String distName "dist";String jarName "rct-demo-1.0.jar";String bat;if (type.equals…

Toast实现源码解析

说明 本篇文章用于介绍Android中Toast的实现原理。和简单实现一个自定义的Toast. Toast实现 一般常用Toast格式为: Toast.makeText(context,"text.",Toast.LENGTH_LONG).show(); 就此,对Toast做一个了解.首先,Toast调用来了一个静态方法makeTe…

java fastjson解析json_java JSON解析库Alibaba Fastjson用法详解

本文实例讲述了java JSON解析库Alibaba Fastjson用法。分享给大家供大家参考,具体如下:Json是一种轻量级的数据交换格式,应该在一个程序员的开发生涯中是常接触的。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写…

二元函数泰勒公式例题_高数031泰勒公式求极限 真香!

今天我们来看看泰勒公式的一些综合应用,先来如何利用泰勒公式求极限,有一些极限十分复杂难看,对函数密集恐惧症患者刺激巨大,这时候看似复杂的泰勒展开反而会将其巧妙化简,让问题迎刃而解。并且在原则上,任…

LVS-DR负载均衡-03

LB端脚本 # vim /usr/local/sbin/lvs-dr.sh #!/bin/bash#description : start LVS OF DIRECTORSERVER #GW192.168.28.253#WEBSITE DIRECTOR VIP WEB_VIP192.168.28.111 WEB_RIP1192.168.28.134 WEB_RIP2192.168.28.135 . /etc/rc.d/init.d/functions logger $0 called with $1 …