前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA中类内容的先后加载顺序

JAVA中类内容的先后加载顺序

作者头像
余生大大
发布2022-11-02 15:28:23
5890
发布2022-11-02 15:28:23
举报
文章被收录于专栏:余生大大

目录

1. 类内容的几个概念

a. 静态代码块

b. 构造代码块

c. 构造函数

d. 普通代码块

2. 类实例化的执行顺序

a. 代码

b. 执行结果


1. 类内容的几个概念

a. 静态代码块

  • 静态代码块在类被加载的时候执行,并且只执行一次,它的优先级是最高的,在构造代码块和构造函数和main方法之前。如果有多个静态代码块,按代码编写的顺序执行。
  • 静态代码块只能在类里,不能在方法里,对于静态方法:在类加载的时候,静态方法也已经加载了,但是我们必须要通过类名或者对象名才能访问,也就是说相比于静态代码块,静态代码块是主动运行的,而静态方法是被动运行的。
  • 静态代码块不能访问普通变量。

b. 构造代码块

  • 构造代码块在创建对象时被调用,每次创建对象都会调用一次,但是优先于构造函数执行。
  • 只要创建对象,构造代码块都会执行一次,构造函数可能存在多个的问题,不一定都会执行固定一个

c. 构造函数

  •        (1)构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;
  •   (2)构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。
  •   (3)构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
  •   (4)默认先调用父类的无参构造函数

d. 普通代码块

  • 普通代码块是在方法体中定义的。且普通代码块的执行顺序和书写顺序一致。

2. 类实例化的执行顺序

a. 代码

JVM代码:

代码语言:javascript
复制
public class JVM {

    JVM(){
        System.out.println(" JVM的无参构造函数  "+count);
    }

    // 静态变量
    public static int count;

    {
        System.out.println(" JVM的构造代码块  "+count);
    }

    static {
        System.out.println(" JVM的静态代码块  "+count);
    }
}

JVMParent代码:

代码语言:javascript
复制
public class JVMParent extends JVM{


    JVMParent(){
        System.out.println(" JVMParent的无参构造函数  "+count);
    }

    // 静态变量
    public static int count;

    {
        System.out.println(" JVMParent的构造代码块  "+count);
    }

    static {
        System.out.println(" JVMParent的静态代码块  "+count);
    }

    JVMParent(String str){
        System.out.println(" JVMParent的有参构造函数  "+str+"  "+count);
    }
}

JVMSons代码:

代码语言:javascript
复制
public class JVMSons extends JVMParent{


    public static void main(String[] args) {
        System.out.println("main");
        new JVMSons();
    }



    static {
        System.out.println(" JVMSons的静态代码块  ");
    }

    JVMSons(){
        System.out.println(" JVMSons的无参构造函数  ");
    }

    JVMSons(String str){
        System.out.println(" JVMSons的有参构造函数  "+str);
    }

    {
        System.out.println(" JVMSons的构造代码块  ");
    }

}

父子关系:

b. 执行结果

根据上面的代码可以看到,我们的main方法、构造代码块、静态代码块都是没有顺序的放置,但是在输出结果里可以看到他们的执行是有固定顺序的,看下图

在开发过程中可以根据具体业务去定义如何使用静态代码块、构造方法块、构造函数

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 类内容的几个概念
    • a. 静态代码块
      • b. 构造代码块
        • c. 构造函数
          • d. 普通代码块
          • 2. 类实例化的执行顺序
            • a. 代码
              • b. 执行结果
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档