原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11451040.html 

版本:Java8

直接上代码:

public class StaticMain {

    public static int i = 200;

    {
i = 100;
} public static void main(String[] args){
System.out.println(i);
}
}

结果:

继续上代码:

public class StaticMain {

    {
i = 100;
} public static int i = 200; public static void main(String[] args){
System.out.println(i);
}
}

结果:

继续上代码:

public class StaticMain {

    {
i = 100;
System.out.println(i + " : static");
} public static int i = 200; public static void main(String[] args){
System.out.println(i + " : main");
}
}

结果:

继续上代码:

public class StaticMain {

    public static int i = 200;

    {
i = 100;
System.out.println(i + " : static");
} public static void main(String[] args){
System.out.println(i + " : main");
}
}

结果:

继续上代码:

public class StaticMain {

    public static int i;

    {
i = 100;
System.out.println(i + " : static");
} public static void main(String[] args){
System.out.println(i + " : main");
}
}

结果:

继续上代码:

public class StaticMain {

    public static int i;

    {
i = 100;
System.out.println(StaticMain.i + " : static");
} public static void main(String[] args){
System.out.println(StaticMain.i + " : main");
}
}

结果:

接下来改变一下:

继续上代码:

public class StaticMain {

    public static int i;

    {
i = 100;
System.out.println(StaticMain.i + " : static");
} public static void main(String[] args){
StaticMain staticMain = new StaticMain();
System.out.println(StaticMain.i + " : main");
}
}

结果:

继续上代码:

public class StaticMain {

    public static int i = 200;

    {
i = 100;
System.out.println(StaticMain.i + " : static");
} public static void main(String[] args){
StaticMain staticMain = new StaticMain();
System.out.println(StaticMain.i + " : main");
}
}

结果:

继续上代码:

public class StaticMain {

    {
i = 100;
System.out.println(StaticMain.i + " : static");
} public static int i = 200; public static void main(String[] args){
StaticMain staticMain = new StaticMain();
System.out.println(StaticMain.i + " : main");
}
}

结果:

结论: 静态块中的变量是先拿到定义再在后续拿到实际变量之后再进行后续对变量的操作的; 如果不初始化静态块所属类,静态块将不会因为他的所属类的调用而被加载.

附:类初始化时的顺序: 

   1、类内容(静态变量、静态初始化块) => 实例内容(变量、初始化块、构造器)
   2、父类的(静态变量、静态初始化块)=> 子类的(静态变量、静态初始化块)=> 父类的(变量、初始化块、构造器)=> 子类的(变量、初始化块、构造器)

结束

Static块和类加载顺序的更多相关文章

  1. java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)

     java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...

  2. Java 的类加载顺序

    Java 的类加载顺序 一.加载顺序:先父类后子类,先静态后普通 1.父类的静态成员变量初始化 2.父类的静态代码块 3.子类的静态成员变量初始化 4.子类的静态代码块 5.父类的普通成员变量初始化 ...

  3. Java 中(静态)变量、(静态)代码块的执行顺序

    Java 中(静态)变量.(静态)代码块的执行顺序 非原创 本文讨论 Java 中(静态)变量.(静态)代码块的执行顺序 首先创建 3 个类 1.Foo 类 public class Foo { pu ...

  4. Java(静态)变量和(静态)代码块的执行顺序

    本文讨论Java中(静态)变量.(静态)代码块的执行顺序 首先创建3个类: 1.Foo类,用于打印变量 public class Foo { public Foo(String word) { Sys ...

  5. java的static块及相关内容

    原文地址:http://blog.csdn.NET/lubiaopan/article/details/4802430     感谢原作者! static{}(即static块),会在类被加载的时候执 ...

  6. Java面试--类加载顺序

    类什么时候就行初始化: 1)创建类的实例,也就是new一个对象  2)访问某个类或接口的静态变量,或者对该静态变量赋值  3)调用类的静态方法  4)反射(Class.forName(“com.fan ...

  7. Java类加载顺序练习题

    一.题目 public class Test { public static Test t1 = new Test();// 标记1 // 普通代码块 { System.out.println(&qu ...

  8. tomcat6类加载器与类加载顺序

    tomcat6.0.32 com.dyyx.ShareUtils//返回系统当前时间public static String now(); package com.dyyx;import java.t ...

  9. java的static块执行时机

    一.误区:简单认为JAVA静态代码块在类被加载时就会自动执行.证错如下: class MyClass1 { static {//静态块 System.out.println("static  ...

随机推荐

  1. UML 基本模型元素

    目录 1. 结构模型元素 (1)类(class) (2)接口(interface) (3)协作(collaboration) (4)用例(use case) (5)活动类(active class) ...

  2. PHP 的扩展类型及安装方式

    扩展类型 底层扩展(基于C语言): PECL 上层扩展(基于PHP 语言): PEAR Composer PECL # 查找扩展 $ pecl search extname # 安装扩展 $ pecl ...

  3. Sentry 企业级数据安全解决方案 - Relay 项目配置

    内容整理自官方文档 系列 Sentry 企业级数据安全解决方案 - Relay 入门 Sentry 企业级数据安全解决方案 - Relay 运行模式 Sentry 企业级数据安全解决方案 - Rela ...

  4. iOS微信支付无法直接返回APP的问题

    最近新测个项目,发现在IOS手机的APP上使用微信支付无法直接返回APP. 咨询微信客服,了解到无法直接返回APP的原因是收款配置的APPID为合作商家的APPID,而不是公司APP的APPID. 当 ...

  5. Dubbo服务 上传文件解决方案以及Hessian协议

    ​ 协议支持 Dubbo支持多种协议,如下所示: Dubbo协议 Hessian协议 HTTP协议 RMI协议 WebService协议 Thrift协议 Memcached协议 Redis协议 在通 ...

  6. ubuntu的一些常用操作

    查看当前正在运行的操作系统版本 $ cat /etc/issue 查看操作系统详细信息 $ sudo lsb_release -a 查看内核版本号 $ uname -r 卸载软件(不保留配置文件) $ ...

  7. react中antd+css Module一起使用

    antd 和 css modules 不能混用,针对antd的css 单独写一条loader的规则,不开启 css modules. 使用 exclude 和 include 配置参考(https:/ ...

  8. 攻防世界-进阶-[re1-100]

    一.收集程序信息 64位的ELF文件,没有壳 二.放入IDA 使用64位IDA打开文件,先进行静态分析查看伪代码,进入main函数 通过这段可以得知输入的内容存储到了input中(这里我将bufwri ...

  9. POJ2115C Looooops

    http://poj.org/problem?id=2115 k位储存特点,一旦溢出,那么就到第二个循环开始返回0重新计数.问题实际转化成a+cx=b(mod 2^k)跑多少圈能够重合.因为是k位无符 ...

  10. python2.7发送邮件失败之——代码问题

    使用python2.7发送邮件,代码如下: from email.header import Headerfrom email.mime.text import MIMETextimport smtp ...