资讯专栏INFORMATION COLUMN

静态代码块在类被加载时自动执行的理解

opengps / 3659人阅读

摘要:对静态代码块执行时机的认识类的生命周期包括加载验证准备解析初始化使用卸载等七个阶段,其中验证准备和解析三个部分统称为连接。初始化的时候会包含静态代码块的执行和静态变量的赋值初始化在装载时不是必须触发的,保证在初次主动使用对象前会触发。

对静态代码块执行时机的认识

类的生命周期包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸载(Unloading)等七个阶段,其中验证、准备和解析三个部分统称为连接(Linking)。而类的加载指的就是从加载到初始化这五个阶段。

初始化的时候会包含静态代码块的执行和静态变量的赋值

初始化在装载时不是必须触发的,保证在初次主动使用对象前会触发。

例:

class A{
    static{
        System.out.print("1");
    }
    
    public A(){
        System.out.print("2");
    }
}

class B extends A{
    static{
        System.out.print("a");
    }
    
    public B(){
        System.out.print("b");
    }
}


public class Hello {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    A ab = new B();
    ab = new B();
}

}

输出结果: 1a2b2b

静态代码块和非静态代码块的区别

静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次;

非静态代码块,在创建对象的时候(即new一个对象的时候)执行,每次创建对象都会执行一次

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65279.html

相关文章

  • 6.java 代码

    摘要:构造块优先于构造函数执行,如果存在多个构造代码块,则执行顺序按照定义的顺序依次执行。静态代码块在中使用关键字声明的代码块。同步代码块需要写在方法中。 代码块 在java中用{}括起来的称为代码块,代码块可分为以下四种: 普通代码块 构造代码块 静态代码块 同步代码块 普通代码块 在方法或语句中出现的{}就称为普通代码块。普通代码块和一般语句的执行顺序由他们在代码中出现的次序决定,先...

    tuantuan 评论0 收藏0
  • 什么是面向对象?

    摘要:第一章面向对象小白是一门完全面向对象的编程语言嗯什么是面向过程什么又是面向对象呢大佬在我们正式进入学习这部分前,了解一下面向过程和面向对象这两个概念,对于我们接下来的学习有很大的好处。这一部分我们会在面向对象学习结束后进行系统的整理和总结。 showImg(https://segmentfault.com/img/remote/1460000019303357); 第一章 面向对象 小...

    DirtyMind 评论0 收藏0
  • Java面试 | 002

    摘要:与的差异为解释性语言而为编译型语言。为面向对象语言,则兼具面向过程和面向过程编程的特点。就垃圾回收而言,中有析构函数,而则是方法。提供了分布式对象的等库。公众号猫说现架构设计码农兼创业技术顾问,不羁平庸,热爱开源,杂谈程序人生与不定期干货。 本博客 猫叔的博客,转载请申明出处 前言 本系列为猫叔综合整理的Java面试题系列,如有雷同不胜荣幸。 Java与C/C++的差异? 1、jav...

    megatron 评论0 收藏0
  • 设计模式:单例模式 (关于饿汉式和懒汉式)

    摘要:在写单例模式的代码之前,我们先简单了解一下两个知识点,关于类的加载顺序和关键字。懒汉和饿汉在程序编写上,一般将单例模式分为两种,分别是饿汉式和懒汉式,饿汉式在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。 定义 单例模式是比较常见的一种设计模式,目的是保证一个类只能有一个实例,而且自行实例化并向整个系统提供这个实例,避免频繁创建对象,节约内存。 单例模式的应用场景很多, 比如...

    Darkgel 评论0 收藏0
  • java面向对象(上)

    摘要:根据出现的位置,作为对象的默认引用有两种情形构造器中引用该构造器正在初始化的对象。在构造器中代表该构造器正在初始化的对象。用于限定该对象调用它从父类得到的实例变量和方法。 子类继承父类就可以继承到父类的成员变量和方法。如果访问控制允许,子类实例可以直接调用父类里定义的方法。 如果多个重载的构造器里包含了相同的初始化代码,则可以把这些初始化代码放置在普通代码块里完成,初始化块总在构...

    liaosilzu2007 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<