首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java代码块

Java代码块

作者头像
闲花手札
发布2021-08-24 14:43:49
发布2021-08-24 14:43:49
1.2K0
举报
文章被收录于专栏:闲花手札闲花手札

代码块

在 Java 中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程)

构造代码块

代码语言:javascript
复制
格式:
    {

    }
注意
代码语言:javascript
复制
1、用于给对象初始化,多个构造方法中相同的代码存放到一起,每次调用构造方法都会执行,并且在构造方法前执行
2、只有创建对象时调用,类不能调用
3、构造代码块可以有多个,建议只写一个
class Person {
    {
        System.out.println("Person构造代码块执行");
    }

    public Person() {
        System.out.println("Person构造方法执行");
    }
}

public class TestPerson {
    public static void main(String[] args) {
        System.out.println("main方法");
        new Person();
        new Person();
    }
}

静态代码块

代码语言:javascript
复制
格式:
    static {

    }
注意
代码语言:javascript
复制
1、用于给类进行初始化,在加载的时候就执行,并且只执行一次
2、优先级高于主函数
3、静态代码块可以有多个,顺序执行,建议只写一个
class Person {
    static {
        System.out.println("Person静态代码块执行");
    }

    public Person() {
        System.out.println("Person构造方法执行");
    }
}

public class TestPerson {
    static {
        System.out.println("静态代码块1执行");
    }

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

    static {
        System.out.println("静态代码块2执行");
    }
}

结果

代码语言:javascript
复制
静态代码块1执行
静态代码块2执行
main方法
Person静态代码块执行
Person构造方法执行
Person构造方法执行

代码块相关执行顺序

代码语言:javascript
复制
public class Father {
    public Father() {
        System.out.println("父类构造方法执行~~~");
    }

    {
        System.out.println("父类构造代码块执行~~~");
    }

    static {
        System.out.println("父类静态代码块执行~~~");
    }

    public static void function() {
        System.out.println("父类静态成员方法执行~~~");
    }
}

public class Son extends Father{
    public Son() {
        System.out.println("子类构造方法执行~~~");
    }

    {
        System.out.println("子类构造代码块执行~~~");
    }

    static {
        System.out.println("子类静态代码块执行~~~");
    }

    public static void function() {
        System.out.println("子类静态成员方法执行~~~");
    }

    public static void main(String[] args) {        
        System.out.println("main方法执行~~~");
        new Son();
    }
}

结果

代码语言:javascript
复制
父类静态代码块执行~~~
子类静态代码块执行~~~
main方法执行~~~
父类构造代码块执行~~~
父类构造方法执行~~~
子类构造代码块执行~~~
子类构造方法执行~~~

面试题

执行顺序

代码语言:javascript
复制
public class Test {
    static Test test1 = new Test();
    static Test test2 = new Test();

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

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

    public Test() {
        System.out.println("构造方法");
    }

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

结果

代码语言:javascript
复制
构造代码块
构造方法
构造代码块
构造方法
静态代码块
main方法
构造代码块
构造方法

总结

1、构造代码块用于给对象初始化,每次创建对象都会调用构造代码块,并且执行顺序在构造方法之前 2、静态代码块用于给类初始化,当类被加载的时候就会调用静态代码块(只执行一次),执行顺序在main方法之前

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码块
    • 构造代码块
      • 注意
    • 静态代码块
      • 注意
    • 代码块相关执行顺序
    • 面试题
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档