//据说这是一道阿里巴巴面试题,先以这道题为例分析下
public class Text {
public static int k = 0;
public static Text t1 = new Text("t1");
public static Text t2 = new Text("t2");
public static int i = print("i");
public static int n = 99;
public int j = print("j"); {
print("构造块");
}
static {
print("静态块");
} public Text(String str) {
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
++i;
++n;
} public static int print(String str) {
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
++n;
return ++i;
} public static void main(String args[]) {
Text t = new Text("init");
}
} //执行结果
1:j i=0 n=0
2:构造块 i=1 n=1
3:t1 i=2 n=2
4:j i=3 n=3
5:构造块 i=4 n=4
6:t2 i=5 n=5
7:i i=6 n=6
8:静态块 i=7 n=99
9:j i=8 n=100
10:构造块 i=9 n=101
11:init i=10 n=102 结果分析:
实例化Text,执行顺序如下
--public static int k = 0;无任何打印结果 --public static Text t1 = new Text("t1");给t1赋值new Text("t1"),每次实例化对象都会依次加载非静态变量,代码块(在构造函数前面加载),构造函数,
public int j = print("j");
//打印1:j i=0 n=0 此时i和n都还没赋值,初始值为0,k先自增再赋值后等于1
{
print("构造块");
}
//打印 2:构造块 i=1 n=1 第一次打印后i和n的值都为1
public Text(String str) {
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
++i;
++n;
}
//打印3:t1 i=2 n=2
//执行构造函数 --public static Text t2 = new Text("t2");
逻辑同上,实例化加载非静态变量,代码块(在构造函数前面加载),构造函数
//打印4:j i=3 n=3
//打印5:构造块 i=4 n=4
//打印6:t2 i=5 n=5 --public static int i = print("i");
//打印7:i i=6 n=6 --public static int n = 99;
//n赋值为99 -- static {
print("静态块");
}
//执行完j静态变量执行静态代码块
//打印8:静态块 i=7 n=99 --public int j = print("j"); //非静态变量
//打印9:j i=8 n=100 --{
print("构造块");
}
//打印10:构造块 i=9 n=101 --public Text(String str) {
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
++i;
++n;
}
//最后才执行main方法里面实例化调用的构造函数
//打印11:init i=10 n=102 //总结:在不存在继承关系的情况下,
//代码执行顺序:静态变量-静态代码块-非静态变量-构造块-构造函数

存在继承关系的后面找时间在补上

Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序的更多相关文章

  1. Java中静态变量、静态代码块、非静态代码块以及静态方法的加载顺序

    在研究单例设计模式的时候,用到了静态变量和静态方法的内容,出于兴趣,这里简单了解一下这四个模块在类初始化的时候的加载顺序. 经过研究发现,它们的加载顺序为: 1.非静态代码块 2.静态变量或者静态代码 ...

  2. 加载顺序 ready onload onreadystatechange

    js文件是异步加载, js是在什么时候被加载执行的   动态引入的外部 JS 文件在各浏览器中的加载顺序不一致       1/ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件):比如 ...

  3. SpringBoot系列教程之Bean加载顺序之错误使用姿势辟谣

    在网上查询 Bean 的加载顺序时,看到了大量的文章中使用@Order注解的方式来控制 bean 的加载顺序,不知道写这些的博文的同学自己有没有实际的验证过,本文希望通过指出这些错误的使用姿势,让观文 ...

  4. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块等的加载顺序

    转自:http://blog.csdn.net/mrzhoug/article/details/51581994 一.在Java中,使用”{}”括起来的代码称为代码块,代码块可以分为以下四种: 1.普 ...

  5. Java---类加载机制,构造方法,静态变量,(静态)代码块,父类,变量加载顺序

    直接上代码: 代码1: public class ConstroctTest { private static ConstroctTest test = new ConstroctTest(); // ...

  6. (转)面试题--JAVA中静态块、静态变量加载顺序详解

    public class Test { //1.第一步,准备加载类 public static void main(String[] args) { new Test(); //4.第四步,new一个 ...

  7. spring boot入门笔记(四) - 多环境配置、加载顺序、静态资源映射

    1.多环境配置 先描述下以前的开发流程:从SVN把项目下载到本地,各种修改配置文件,启动成功:完成功能后上传到公司的测试服务器,修改各种配置文件,启动成功:最后到上线的日子里,把新功能中涉及到的文件打 ...

  8. jsp页面中的代码执行加载顺序介绍

    1. java是在服务器端运行的代码,jsp在服务器的servlet里运行,而javascript和html都是在浏览器端运行的代码.所以加载执行顺序是是java>jsp>js. 2. j ...

  9. Java学习笔记之——this关键字、非静态成员属性和静态成员属性的区别、类的加载顺序

    一.this关键字 1.代表当前类的对象 2.通过” . ”调用成员属性和成员方法 3.通过this可以区分成员属性和参数 参数名和属性名相同的情况,默认是参数名 二.非静态成员属性和静态成员属性的区 ...

随机推荐

  1. C#:枚举

    1. 枚举的综合运用 public enum Color { yellow, blue, green } class Program { static void Main(string[] args) ...

  2. oracle查看对象信息

    1.查看某用户下所有对象的信息: SELECT owner, object_type, status, COUNT(*) count# FROM all_objects where owner='xx ...

  3. Neo4j图数据库管理系统开发笔记之一:Neo4j Java 工具包

    1 应用开发概述 基于数据传输效率以及接口自定义等特殊性需求,我们暂时放弃使用Neo4j服务器版本,而是在Neo4j嵌入式版本的基础上进行一些封装性的开发.封装的重点,是解决Neo4j嵌入式版本Emb ...

  4. shell 判断语句

    1.字符串判断 str1 = str2 当两个串有相同内容.长度时为真str1 != str2 当串str1和str2不等时为真-n str1 当串的长度大于0时为真(串非空)-z str1 当串的长 ...

  5. STM32 KEIL不能输入仿真引脚端口error 65: access violation at 0x40021000 : no 'read' permission

    使用MDK自己创建一个STM32F103ZE核的项目 加入源码后编译,正常,在线仿真单步执行出现如下问题 error 65: access violation at 0x40021000 : no ' ...

  6. linux(64位的系统)下nasm进行汇编链接时出现的问题

    出现问题: $nasm -f elf hello.asm -o hello.o $ld -s hello.o -o hello ld: i386 architecture of input file ...

  7. RPM包制作教程

    一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package M ...

  8. 博客代码美化(SyntaxHighlighter)

    这篇博文主要讲解自己使用SyntaxHighlighter对代码进行美工中遇见的问题以及如何使用SyntaxHighlighter? 首先来看看SyntaxHighlighter对代码美工的效果吧! ...

  9. MySQL Database on Azure新功能

    本月中国版的MySQL Database on Azure发布了两项新功能: 1.主从复制——只读实例 在这之前Azure上的MySQL数据库也是支持主从复制的,但是只能作为on-premises部署 ...

  10. 数据库_MYSQL

     数据库简介 数据库分类:关系型数据库.非关系型数据库 常用的关系型数据库有:orcale .mysql .sql server等等 常用的非关系型数据库有: Memcached.redis.mong ...