zoukankan      html  css  js  c++  java
  • 静态块与静态变量

    本题注意如下几点:
    1、每调用一次构造方法,则执行一次构造块
    2、静态块只在类加载的时候加载一次
    3、有多个静态变量或块时,按声明顺序加载

    先看一段代码,说出执行结果

    public class Test3 {
        public static Test3 t3=new Test3();
        public static Test3 t4=new Test3();
        {
            System.out.println("城管的构造块");
        }
        static{
            System.out.println("城管的静态块");
        }
        public static void main(String[] args) {
            Test3 t=new Test3();
    
        }
    
    }

    开始时JVM加载B.class,对所有的静态成员进行声明,t1 t2被初始化为默认值,为null,又因为t1 t2需要被显式初始化,所以对t1进行显式初始化,初始化代码块→构造函数(没有就是调用默认的构造函数),咦!静态代码块咋不初始化?因为在开始时已经对static部分进行了初始化,虽然只对static变量进行了初始化,但在初始化t1时也不会再执行static块了,因为JVM认为这是第二次加载类B了,所以static会在t1初始化时被忽略掉,所以直接初始化非static部分,也就是构造块部分(输出''构造块'')接着构造函数(无输出)。接着对t2进行初始化过程同t1相同(输出'构造块'),此时就对所有的static变量都完成了初始化,接着就执行static块部分(输出'静态块'),接着执行,main方法,同样也,new了对象,调用构造函数输出('构造块')

  • 相关阅读:
    ehcache memcache redis 三大缓存男高音
    tomcat启用压缩的方式
    Linux rpm 命令参数使用详解[介绍和应用]
    rpm常用命令及rpm参数介绍
    RPM 命令大全
    BZOJ2298: [HAOI2011]problem a(带权区间覆盖DP)
    BZOJ2037: [Sdoi2008]Sue的小球(区间DP)
    HDU3507 Print Article(斜率优化DP)
    线性代数学习笔记(几何版)
    HDU 2065 "红色病毒"问题(生成函数)
  • 原文地址:https://www.cnblogs.com/lbloveab/p/7261343.html
Copyright © 2011-2022 走看看