静态变量、静态代码块、变量、代码块、构造函数执行顺序
2016-03-09 19:23
411 查看
一直对着个不太理解,最近总结了下,如果有不对的,请大家给指正
执行的先后顺序(同一等级按代码的顺序执行)
1.静态变量、静态代码块
2.变量、代码块
3.构造函数
静态变量
静态代码块
变量
代码块
构造函数
执行结果:静态变量 静态代码块 子类静态变量 子类静态代码块 变量 代码块 构造函数 子类变量 子类代码块 子类构造函数
忘记从哪个网站看了这段代码了, 感觉挺好的分享给大家(关于static)
执行的结果是:1234
刚开始挺不理解的为啥是这个结果,后来一分析 明白了
当程序运行时, 会先加载TestStaticCode这个类,然后就执行了静态变量(tsc),tsc 去new了一个对象,
然后执行对象里面的private InstanceVariable iv = new InstanceVariable(); (因为TestStaticCode里面的static的变量和代码块是顺序执行的,所以就直接执行这段代码)
然后就进入InstanceVariable这个类,需要先加载静态的也就输出1了,因为new了一个对象会去加载构造函数也就是2,然后执行TestStaticCode的构造函数也就是3
这就是第一个静态变量,之后执行第二个静态代码块 也就是4了
希望大家多多提意见!!!
执行的先后顺序(同一等级按代码的顺序执行)
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了
希望大家多多提意见!!!
相关文章推荐
- python图像处理2
- 在PHP中利用wsdl创建标准webservice的实现代码 SoapDiscovery.class.php
- 七天学会ASP.NET MVC(1-3)源代码下载
- Java学习之Java实现CallBack功能
- 详解C语言中volatile关键字
- php 文件上传图片
- Java虚拟机类加载机制——案例分析
- Java虚拟机类加载机制——案例分析
- C++ 关于最长公共子串问题
- 2016蓝桥杯假期任务之《字串统计》
- Java中equals和==的区别
- 一个CXF集成SPRING的WEBSERVICE完整实例
- Spring的依赖注入IoC
- java部分源码分析——LinkedList
- Java基础 Day14 泛型
- C#和Java交互整合
- 比较好的PHP开源项目
- spring与spring MVC的区别
- Matlab中axes函数解析
- python程序打包!!!!