java关于代码块 , 动态代码块 , 静态代码块 , 静态方法 , 构造函数的执行顺序
来源:互联网 发布:linux git新建仓库 编辑:程序博客网 时间:2024/06/05 08:46
package com.lanou.Test;public class Static_Main { public static void main(String[] args) { staticFunection(); } static Static_Main st = new Static_Main(); { System.out.println("2"); } static { System.out.println("1"); } public Static_Main() { System.out.println("3"); System.out.println("a =" + a + ", b=" + b); } public static void staticFunection() { System.out.println("4"); System.out.println("静态方法内部: b=" + b); } int a = 110; static int b = 112;}23a =110, b=014静态方法内部: b=112在执行时也是按照顺序执行 , 如果将变量放在最前面 , 那么第一个初始化时就会初始化变量 , 那么b就会被赋值 .
1.类的生命周期是:加载->验证->准备->解析->初始化->使用->卸载,只有在准备阶段和初始化阶段才会涉及类变量的初始化和赋值,因此只针对这两个阶段进行分析;
2.类的准备阶段需要做是为类变量分配内存并设置默认值,因此类变量st为null、b为0;(需要注意的是如果类变量是final在加载阶段就已经完成了初始化,可以把b设置为final试试);3.类的初始化阶段需要做是执行类构造器(类构造器是编译器收集所有静态语句块和类变量的赋值语句按语句在源码中的顺序合并生成类构造器,对象的构造方法是init,类的构造方法是cinit,可以在堆栈信息中看到),因此先执行第一条静态变量的赋值语句即st = new StaticTest (),此时会进行对象的初始化,对象的初始化是先初始化成员变量再执行构造方法,因此打印2->设置a为110->执行构造方法(打印3,此时a已经赋值为110,但是b只是设置了默认值0,并未完成赋值动作),等对象的初始化完成后继续执行之前的类构造器的语句,接下来就不详细说了,按照语句在源码中的顺序执行即可;
但是还有一种情况是 : 如果开始不去在类中定义静态的对象,将对象的创建放在主函数中
static Static_Main st = new Static_Main();那么代码的执行顺序就完全不一样;
package com.lanou.Test;public class Static_Main {public static void main(String[] args) {new Static_Main();staticFunection();}// static Static_Main st = new Static_Main();{System.out.println("2");}static {System.out.println("1");}public Static_Main() {// TODO Auto-generated constructor stubSystem.out.println("3");System.out.println("a =" + a + ", b=" + b);}public static void staticFunection() {System.out.println("4");System.out.println("静态方法内部: b=" + b);}int a = 110;static int b = 112;}123a =110, b=1124静态方法内部: b=112在这个执行过程中 , 对象的实例化在主函数中执行, 那么代码的执行顺序就是按照顺序 : 静态代码块 --->主函数内部代码的顺序执行--->(如果 new 了对象)动态代码块 --->构造函数-->其他方法
---> 构造函数
这也是按照顺序执行的 , 因为主函数是入口 .
并且对变量的赋值, 在其执行完静态函数时已经赋值完毕
阅读全文
0 0
- java关于代码块 , 动态代码块 , 静态代码块 , 静态方法 , 构造函数的执行顺序
- Java静态代码块、静态函数、动态代码块、构造函数等的执行顺序
- java 静态代码块,构造代码块,构造方法,普通代码块的执行顺序
- java 静态代码块 代码块 构造函数执行顺序
- 静态代码块,代码块,构造函数的执行顺序
- 静态代码块、代码块、构造方法的执行顺序
- java一般代码块,构造块,构造函数,静态代码块的执行顺序实践
- 关于java代码中静态代码块、非静态构造代码块以及构造方法的执行顺序
- java 静态代码块、静态变量、成员变量、构造代码块、构造方法的执行顺序
- java 静态属性 静态代码块 静态方法声明 构造块 构造函数 动态属性 执行顺序
- java中代码块的执行顺序--静态代码块,构造器,普通代码块,构造块,main主函数
- 关于静态变量,静态代码块,实例变量,实例代码块,构造函数的执行顺序
- 静态代码块、构造代码块、构造方法执行顺序
- 静态代码块,构造代码块,构造方法执行顺序
- 关于类中静态块,静态方法,构造代码块,构造方法的执行顺序
- 举例说明java中静态代码块、非静态代码块、构造函数的执行顺序
- Java中静态代码块、非静态代码块和构造函数的执行顺序
- Java中静态代码块、非静态代码块、构造函数的执行顺序与作用
- 文章标题
- [翻译]Python中如何使用*args和**kwargs
- Oaecle 命令行基础操作篇(1)
- BZOJ2959: 长跑
- SpringMVC框架实现文件、资源的上传和下载
- java关于代码块 , 动态代码块 , 静态代码块 , 静态方法 , 构造函数的执行顺序
- java的反射机制
- c++注释规范
- CSU 1963 斜率DP
- hinernate中的Component组合映射
- 简单快捷建立自己的caffe工程
- 第1篇 进程和线程
- python虚拟环境的配置
- 文件、文件系统、关于文件的函数