千家信息网

Java代码块的使用细节有哪些

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"Java代码块的使用细节有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java代码块的使用细节有哪些"吧!1.基本介绍代码块
千家信息网最后更新 2026年10月31日Java代码块的使用细节有哪些

这篇文章主要讲解了"Java代码块的使用细节有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java代码块的使用细节有哪些"吧!

1.基本介绍

代码块又称为初始化块,属于类中的成员(类的一部分),类似于方法,讲逻辑语句封装在方法体中,用{}抱起来;

但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用。

基本语法

(修饰符)(可有可无){代码};

注:

1.修饰符可选,要写只能写static

2.代码块可分为两类,使用static修饰的叫静态代码块,没有static修饰的叫普通代码块。

3.;可有可无

好处

1.相当于另一种形式的构造器,可以做初始化的操作

2.如果多个构造器中都有重复的语句,可以抽取到代码块中。

快速入门

package com.demo.codeblock_;public class codeblock01 {    public static void main(String[] args) {        movie m01=new movie("环太平洋");        movie m02=new movie("荒野大飞",66);        movie m03=new movie("无暇赴死",55,"老K");    }}class movie{    private String name;    private double price;    private String director;    {        System.out.println("电影屏幕打开。。。");        System.out.println("广告开始。。。");        System.out.println("电影开始。。。");    }    //三个构造器重载    public movie(String name) {//        System.out.println("电影屏幕打开。。。");//        System.out.println("广告开始。。。");//        System.out.println("电影开始。。。");        System.out.println("构造器movie(String name)被调用。。。");        this.name = name;    }    public movie(String name, double price) {        //        System.out.println("电影屏幕打开。。。");//        System.out.println("广告开始。。。");//        System.out.println("电影开始。。。");        System.out.println("构造器movie(String name, double price)被调用。。。");        this.name = name;        this.price = price;    }    public movie(String name, double price, String director) {        //        System.out.println("电影屏幕打开。。。");//        System.out.println("广告开始。。。");//        System.out.println("电影开始。。。");        System.out.println("构造器movie(String name, double price, String director)被调用。。。");        this.name = name;        this.price = price;        this.director = director;    }}

2.代码块细节

代码块使用注意事项和细节讨论

1)static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象,就执行。

2)类什么时候被加载[重要!]

①创建对象实例时(new)

②创建子类对象实例,父类也会被加载

③使用类的静态成员时(静态属性,静态方法)

案例演示:A 类 extends B类的静态块

3)普通的代码块,在创建对象实例时,会被隐式的调用。 被创建一次,就会调用一次。 如果只是使用类的静态成员时,普通代码块并不会执行。

package com.demo.codeblock_;public class codeblock02 {    public static void main(String[] args) {        //类被加载的情况举例        //1.创建对象时new        //AA aa=new AA();        //2.创建子类对象实例,父类也会被加载,而且,父类先被加载,子类后被加载        AA aa01=new AA();        //3.使用类的静态成员时        System.out.println(cat.n);        DD d1=new DD();        DD d2=new DD();    }}class DD{    static {        System.out.println("DD的静态代码被执行1次");    }}class animal{    static {        System.out.println("animal的静态代码被执行");    }}class cat extends animal{    public static int n=888;    //静态代码块    static {        System.out.println("cat的静态代码块被执行");    }}class BB {    static {        System.out.println("BB的静态代码被执行");    }}class AA extends BB{    static {        System.out.println("AA的静态代码被执行");    }}

类的调用顺序

创建一个对象时,在一个类调用顺序:(重点、难点)

①调用静态代码块和静态属性初始化 ( 注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用)

②调用普通代码块和普通属性的初始化 ( 注意:普通代码块和普 通属性初始化调用的优先级一样,如果有多个普通代码块和多 不普通属性初始化,则按定义顺序调用)

③调用构造方法。

实例

package com.demo.codeblock_;public class codeblock03 {    public static void main(String[] args) {        A a=new A();    }}class A{    public A(){        System.out.println("A的无参构造被调用");    }    int n2=getn2();    {//普通代码块        System.out.println("A的普通代码块被调用");    }    int getn2(){        System.out.println("getn2被调用");        return 99;    }    private static int n=getn();    static {        System.out.println("A的静态代码被调用");    }    public static int getn(){        System.out.println("getn被调用");        return 100;    }}

代码块细节2

构造器的最前面其实隐含了 super(和调用普通代码块,新写一个类演示静态相关的代码块,属性初始化,在类加载时,就执行完毕

,因此是优先于构造器和普通代码块执行的

class A {public AO{super0://调用普通代码块_System.out.println("ok");}}

实例

package com.demo.codeblock_;public class codeblock04 {    public static void main(String[] args) {        B b=new B();    }}class AA{    {        System.out.println("AA的普通代码块");    }    public AA(){        //1.super()        //2.调用本类的普通代码块        System.out.println("AA的构造器被调用");    }}class B extends AA{    {        System.out.println("B的普通代码块");    }    public B(){        //1.super()        //2.调用本类的普通代码块        System.out.println("B的构造器被调用");    }}

代码块细节2

我们看一下创建一个子类对象时(继承关系),他们的静态代码块,静态属性初 始化,普通代码块,普通属性初始化,构造方法的调用顺序如下:

1.父类的静态代码块和静态属性(优先级一样,按定义顺序热行

2.子类的静态代码块和静态属性(优先级一样,按定义顺序执行)

3.父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)

4.父类的构造方法

5.子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)

6.子类的构造方法

7.静态代码块只能直接调用静态成员(静态属性和静态方法),普通代码块可以调 用任意成员。

实例

package com.demo.codeblock_;public class codeblock05 {    public static void main(String[] args) {        //老师说明        //(1) 进行类的加载        //1.1 先加载 父类 A02 1.2 再加载 B02        //(2) 创建对象        //2.1 从子类的构造器开始        //new B02();//对象        new C02();    }}class A02 { //父类    private static int n1 = getVal01();    static {        System.out.println("A02的一个静态代码块..");//(2)    }    {        System.out.println("A02的第一个普通代码块..");//(5)    }    public int n3 = getVal02();//普通属性的初始化    public static int getVal01() {        System.out.println("getVal01");//(1)        return 10;    }    public int getVal02() {        System.out.println("getVal02");//(6)        return 10;    }    public A02() {//构造器        //隐藏        //super()        //普通代码和普通属性的初始化......        System.out.println("A02的构造器");//(7)    }}class C02 {    private int n1 = 100;    private static  int n2 = 200;    private void m1() {    }    private static void m2() {    }    static {        //静态代码块,只能调用静态成员        //System.out.println(n1);错误        System.out.println(n2);//ok        //m1();//错误        m2();    }    {        //普通代码块,可以使用任意成员        System.out.println(n1);        System.out.println(n2);//ok        m1();        m2();    }}class B02 extends A02 { //    private static int n3 = getVal03();    static {        System.out.println("B02的一个静态代码块..");//(4)    }    public int n5 = getVal04();    {        System.out.println("B02的第一个普通代码块..");//(9)    }    public static int getVal03() {        System.out.println("getVal03");//(3)        return 10;    }    public int getVal04() {        System.out.println("getVal04");//(8)        return 10;    }    //一定要慢慢的去品..    public B02() {//构造器        //隐藏了        //super()        //普通代码块和普通属性的初始化...        System.out.println("B02的构造器");//(10)        // TODO Auto-generated constructor stub    }}

感谢各位的阅读,以上就是"Java代码块的使用细节有哪些"的内容了,经过本文的学习后,相信大家对Java代码块的使用细节有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

代码 静态 普通 属性 构造器 对象 方法 顺序 细节 子类 成员 电影 实例 优先级 多个 屏幕 广告 学习 可有可无 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中国互联网科技股 科技互联网公司logo 火传媒上海互联网科技 广州紫鲸互联网科技 互联网科技素材视频竖屏 宝灵互联网科技有限公司 花神(南京)互联网科技有限公司 湖南一路畅行互联网科技 江阴互联网智能科技产品进口 华中科技大学互联网的牛人 四川互联网展示科技馆设计 富国互联网金融科技混合基金 互联网高科技行业有哪些企业 互联网科技平台产品运营 陕西九四连强互联网科技有限公司 众联互联网络科技 10位科技互联网大佬 平安好医生打造互联网科技医疗 互联网科技创业计划的风险分析 互联网的黑科技实验室 互联网科技媒体 深圳卡尔迅互联网科技有限公司怎么样 知域互联网科技有限公司大骗子 互联网5g黑科技有哪些 中国互联网公司排名锤子科技 互联网在线教育科技创业 上海京穆互联网科技有限公司 东营紫格互联网科技 昆明中奇联合互联网科技 互联网科技对化妆品行业
0