您的位置:首页 > 编程语言

静态变量、静态代码块、变量、代码块、构造函数执行顺序

2016-03-09 19:23 411 查看
一直对着个不太理解,最近总结了下,如果有不对的,请大家给指正

执行的先后顺序(同一等级按代码的顺序执行

1.静态变量、静态代码块

2.变量、代码块

3.构造函数

<span style="font-size:18px;"><strong>public class Test2{

static String S = "静态变量";
String ss = "变量";

static{
System.out.println(S);
System.out.println("静态代码块");
}

{
System.out.println(ss);
System.out.println("代码块");
}

public Test2(){
System.out.println("构造函数");
}

public static void main(String[] args){
new Test2();
}

}</strong></span>
执行结果:

静态变量

静态代码块

变量

代码块

构造函数

public class Test3{

/*
* 执行顺序(同一等级按顺序执行)
* 1.静态变量,静态代码块
* 2.变量、代码块
* 3.构造函数
*/
public static void main(String[] args){
new Test33();
}
String ss = "变量";
static String S ="静态变量";
static{
System.out.println(S);
System.out.println("静态代码块");
}
{
System.out.println(ss);
System.out.println("代码块");
}
public Test3(){
System.out.println("构造函数");
}
}
class Test33 extends Test3{
static String s = "子类静态变量";
static
{
System.out.println(s);
System.out.println("子类静态代码块");
}
public Test33(){
System.out.println("子类构造函数");
}
String ss = "子类变量";
{
System.out.println(ss);
System.out.println("子类代码块");
}
}


执行结果:静态变量 静态代码块 子类静态变量 子类静态代码块 变量 代码块 构造函数 子类变量 子类代码块 子类构造函数

忘记从哪个网站看了这段代码了, 感觉挺好的分享给大家(关于static)

public class TestStaticCode {
private static TestStaticCode tsc = new TestStaticCode();
static{
System.out.println("4");
}
private InstanceVariable iv = new InstanceVariable();

private TestStaticCode(){
System.out.println("3");
}

public static void main(String[] args){
}
}

class InstanceVariable {
static{
System.out.println("1");
}
public InstanceVariable(){
System.out.println("2");
}
}


执行的结果是:1234

刚开始挺不理解的为啥是这个结果,后来一分析 明白了

当程序运行时, 会先加载TestStaticCode这个类,然后就执行了静态变量(tsc),tsc 去new了一个对象,

然后执行对象里面的private InstanceVariable iv = new InstanceVariable(); (因为TestStaticCode里面的static的变量和代码块是顺序执行的,所以就直接执行这段代码)

然后就进入InstanceVariable这个类,需要先加载静态的也就输出1了,因为new了一个对象会去加载构造函数也就是2,然后执行TestStaticCode的构造函数也就是3

这就是第一个静态变量,之后执行第二个静态代码块 也就是4了

希望大家多多提意见!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: