原创:转载需注明原创地址 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. 【MySQL作业】DDL 和 DML——美和易思使用 DML 新增和更新表数据应用习题

    点击打开所使用到的数据库>>> 1.添加 easyShopping 客户数据. insert into customer values('abc111','111',' 刘一鸣 ', ...

  2. SQLServer中的CTE(Common Table Expression)通用表表达式使用详解

    概述 我们经常会编写由基本的 SELECT/FROM/WHERE 类型的语句派生而来的复杂 SQL 语句.其中一种方案是需要编写在 FROM 子句内使用派生表(也称为内联视图)的 Transact-S ...

  3. shell3-循环

    常用的循环语句有3种: <1>for <2>while <3>utile 1.for语句的格式: for 变量名 in 列表: do 循环体 done 如何生成列表 ...

  4. Python_issubclass&isinstance方法和types&inspect内置模块

    issubclass&isinstance issubclass 用于判断一个类是否是一个已知类或是该已知类的子类.注意,该方法只能判断类不能判断实例化对象. class A: pass cl ...

  5. RPC框架下实现文件上传到linux服务器

    一.前端使用element -ui 的upload组件 :data 表示额外传递的参数, :header 表示设置请求头参数,如,token等, action表示后台api接口的地址 二. conto ...

  6. Mysql字符串字段判断是否包含某个字符串的方法

    方法一:like SELECT * FROM 表名 WHERE 字段名 like "%字符%"; 方法二:find_in_set() 利用mysql 字符串函数 find_in_s ...

  7. CentOS7防火墙firewalld 和 CentOS6防火墙iptables的一些配置命令

    CentOS7 防火墙 一.防火墙的开启.关闭.禁用.查看状态命令 (1)启动防火墙:systemctl start firewalld (2)关闭防火墙:systemctl stop firewal ...

  8. textarea换行符转换

    /** * @description textarea换行符转指定字符 * @param str:要放到textarea的字符串 * @param code:要转换成换行的字符,默认为',' */ e ...

  9. 【Java】Eclipse常用快捷键

    Eclipse常用快捷键 * 1.补全代码的声明:alt + / * 2.快速修复: ctrl + 1 * 3.批量导包:ctrl + shift + o * 4.使用单行注释:ctrl + / * ...

  10. flask中错误使用flask.redirect('/path')导致的框架奇怪错误

    我在首页的位置使用了如下代码: import flask @page_index.route('/') def index(): flask.redirect('/pythoncgi/') 结果站点出 ...