Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java中类的静态代码块、构造代码块、构造方法、普通代码块

Java中类的静态代码块、构造代码块、构造方法、普通代码块

作者头像
小诸葛
发布于 2020-04-14 07:49:37
发布于 2020-04-14 07:49:37
3.7K00
代码可运行
举报
文章被收录于专栏:方法论方法论
运行总次数:0
代码可运行

前言

Java中静态代码块、构造代码块、构造方法、普通代码块的执行顺序是一个比较常见的笔试题,合理利用其执行顺序也能方便实现项目中的某些功能需求 。

静态代码块

a.定义格式

在Java类(静态代码块不能定义在方法中)中,通过static关键字和{}声明的代码块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Person {
    static{
        System.out.println("静态代码块");
    }
}

b.执行时机

静态代码块在类加载的时候执行,并且仅执行一次,如果一个类中有多个静态代码块,将按照书写顺序执行。

c.静态代码块的作用

一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。比如一个项目启动需要加载的很多配置文件等资源,就可以都放入静态代码块中。

d.静态代码块不能访问普通成员变量,只能访问静态成员变量

构造代码块

a.定义格式

在Java类中通过{}声明的代码块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Person {
    static{
        System.out.println("静态代码块");
    }
    {
        System.out.println("构造代码块");
    }
}

b.执行时机

构造代码块在类的每次实例化优先于构造方法执行。

c.构造代码块的作用

和构造函数的作用类似,都能对对象进行初始化,并且只要创建一个对象,构造代码块都会执行一次。但是反过来,构造函数则不一定每个对象建立时都执行(多个构造函数情况下,建立对象时传入的参数不同则初始化使用对应的构造函数)。

  利用每次创建对象的时候都会提前调用一次构造代码块特性,可以做诸如统计创建对象的次数等功能。

构造方法

a.定义格式

构造方法的名称必须与类名完全相同,并且没有返回值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Person {
    public Person(){
        System.out.println("构造方法");
    }
    public Person(String arg){
        System.out.println("构造方法");
    }
}

b.执行时机

构造方法在类的每次实例化时执行。

c.特点

1.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的;

  2.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;

  3.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。

普通代码块

普通代码块和构造代码块的区别是,构造代码块是在类中定义的,而普通代码块是在方法体中定义的。且普通代码块的执行顺序和书写顺序一致。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public void sayHello(){
        {
            System.out.println("普通代码块");
        }
    }

执行顺序

静态代码块>构造代码块>构造方法>普通代码块

代码清单1-1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Person {
    static{
        System.out.println("静态代码块");
    }
    {
        System.out.println("构造代码块");
    }
    public Person(){
        System.out.println("构造方法");
    }
    public void sayHello(){
        {
            System.out.println("普通代码块");
        }
    }
    public static void main(String[] args){
        System.out.println("==========实例化a");
        Person a = new Person();
        a.sayHello();
        System.out.println("==========实例化b");
        Person b = new Person();
        b.sayHello();
    }
}

执行结果如图1-1所示:

图1-1 代码清单1-1运行结果

父类和子类执行顺序

  首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有构造代码块,如果有就执行父类的构造代码块,父类的构造代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有构造代码块,如果有就执行子类的构造代码块。子类的构造代码块执行完毕再去执行子类的构造方法。

  总之一句话,静态代码块内容先执行,接着执行父类构造代码块和构造方法,然后执行子类构造代码块和构造方法。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小诸葛的博客 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java中静态代码块、构造代码块、构造函数、普通代码块
  在Java中,静态代码块、构造代码块、构造函数、普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序。
IT可乐
2022/05/09
2K0
Java中静态代码块、构造代码块、构造函数、普通代码块
静态代码块、构造代码块以及构造函数的加载顺序
首先,静态代码块,构造代码块,和构造函数都存在于一个类中,只不过,他们执行的先后顺序和执行的次数不同。
week
2018/08/24
7560
构造代码块、静态代码块、构造方法的执行顺序
https://www.cnblogs.com/ysocean/p/8194428.html
真率
2024/07/05
1770
普通代码块 静态代码块 构造代码块......傻傻分不清
在上面分类描述中,我们已经给出了答案;接下来我们跑一跑测试代码,根据代码执行结果来验证这些答案
麦洛
2021/04/29
1K0
普通代码块 静态代码块 构造代码块......傻傻分不清
Java中静态代码块、构造代码块、构造函数、普通代码块
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
Fisherman渔夫
2019/07/31
1.7K0
Java中静态代码块、构造代码块、构造函数、普通代码块
Java中静态代码块和构造代码块
    构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
緣來
2020/01/02
1.2K0
java构造方法,构造代码块,静态代码块的执行顺序
每周聚焦
2025/03/07
950
java构造方法,构造代码块,静态代码块的执行顺序
关于java中普通代码块、构造代码块与静态代码块
public static void main(String[] args) { /*普通代码块: *直接定义在在方法或语句中出现”{普通代码的执行语句}“的就称为普通代码块。 *普通代码块执行顺序由他们在代码中出现的次序决定--“先出现先执行” * */ {   System.out.println("这里是普通代码块A"); } //new A(); {   System.out.println("这里是普通代码块B"); } }
指尖改变世界
2018/08/31
1.4K0
关于java中普通代码块、构造代码块与静态代码块
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑
各位小伙伴大家好,我是A哥。如果问:Java的三大特性是什么?你顺口就能答出:封装、继承、多态。如果继续问:你真的了解Java中的继承吗?
YourBatman
2022/05/06
1K0
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑
Java代码块
在 Java 中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程)
闲花手札
2021/08/24
9020
【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析
//执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。 其中静态代码块只执行一次。构造代码块在每次创建对象是都会执行。 1 普通代码块 1 //普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行” 2 public class CodeBlock01{ 3 public static void main(String[] args){ 4 5
Angel_Kitty
2018/04/09
9600
(转) Java 静态代码块和非静态代码块
Java中的静态代码块是在虚拟机加载类的时候,就执行的,而且只执行一次。如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
Dar_Alpha
2018/09/03
1.2K0
【面试题】Java中子类和父类静态代码块、非静态代码块、构造函数的执行顺序总结一览表
在面试的时候,有时候我们会被问到这样的问题:子类A继承父类B,A a = new A();则父类B的构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块执行的先后顺序是什么?
凯哥Java
2022/12/02
6890
【面试题】Java中子类和父类静态代码块、非静态代码块、构造函数的执行顺序总结一览表
java从入门到精通四(面向对象上,类与对象的实现,代码块的执行顺序)
面向对象的方法主要是把事物对象化,包括属性和行为。而面向对象编程则比较贴近生活的实际,也就说,在程序中的编程,力图对描述的事物在现实中的形态保持一致。为了做到这一点,我们java中也就有类和对象的概念。类是对一类事物的抽象,类下就有若干对象,对象用于描述类中事物的个体。说来光看定义还是比较抽象,不容易理解。我们在下面的编程实践中可以大致理解这种思维模式。
兰舟千帆
2022/07/16
7980
java从入门到精通四(面向对象上,类与对象的实现,代码块的执行顺序)
Java代码块执行顺序初探
Java继承中对构造函数是不继承的,只是显式或者隐式调用,并且必须是在构造函数第一行。这里是隐式调用了super()。
WindCoder
2018/09/19
2.7K0
【小家java】类中静态代码块、构造代码块、静态变量、成员变量执行顺序和继承逻辑
诚如各位所知,java的三大特性:封装、继承、多态。其中继承,是java中最有学问的一点也是最相对来说最难理解的一些东西,本文针对于此,做一些实例分析,希望能够帮助大家理解java中的继承机制
YourBatman
2019/09/03
1.5K0
【小家java】类中静态代码块、构造代码块、静态变量、成员变量执行顺序和继承逻辑
代码块总结
这种形式的程序段我们将其称之为代码块,所谓代码块就是用大括号({})将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法。一般来说代码块是不能单独运行的,它必须要有运行主体。在Java中代码块主要分为四种:
栋先生
2018/09/29
8570
Java基础系列5:Java代码的执行顺序
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。
说故事的五公子
2019/11/14
7860
一文整懂 Java 中静态代码块 / 初始块 / 构造方法的执行顺序
“ 相信,刷过面试题应该都碰到过很多题,关于类继承后 Java 中静态代码块 / 初始块 / 构造方法的执行顺序问题,每每记一下又忘了,那么,今天来用不多的时间复习一下”
拾荒者的笔记
2020/05/25
9040
静态代码块、非静态代码块、构造函数三者执行顺序
主要探讨一下关于静态代码块,非静态代码块,构造函数的执行顺序。 如有错误,欢迎指出。
HaC
2020/12/30
5170
推荐阅读
相关推荐
Java中静态代码块、构造代码块、构造函数、普通代码块
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验