教妹学Java(三十四):代码初始化块

简介: 教妹学Java(三十四):代码初始化块

三妹开学了,学的计算机软件编程。她学校离我家很近,坐公交车也就 10 站路的距离, 每逢周末她都会来找我,让我辅导她学习 Java。作为一名拥有十余年编程经验的程序员,再加上父母给我们的这份血缘关系,我觉得义不容辞。


“二哥,今天我们要学习的内容是‘代码初始化块’,对吧?”看来三妹已经提前预习了我上次留给她的作业。


“是的,三妹。代码初始化块用于初始化一些成员变量(字段)。 ”我面带着朴实无华的微笑回答着她,“通过类创建对象的时候会执行代码初始化块。”


“可以直接通过‘=’操作符对成员变量进行初始化,但通过代码初始化块可以做更多的事情,比如说打印出成员变量初始化后的值。”


----正儿八经的分割线,正文开始------------


01、代码初始化块有什么作用


在下面的例子中,我们可以直接通过 = 操作符对成员变量进行初始化:


class Bike{  

   int speed=100;  

}  


那为什么还需要代码初始化块呢?


我们可以通过代码初始化块执行一个更复杂的操作,比如为集合填充值。


/**
 * @author 微信搜「沉默王二」,回复关键字 PDF
 */
public class Bike {
    List<String> list;
    {
        list = new ArrayList<>();
        list.add("沉默王二");
        list.add("沉默王三");
    }
    public static void main(String[] args) {
        System.out.println(new Bike().list);
    }
}



如果只使用“=”操作符的话,是没办法完成集合初始化的,对吧?


02、 构造方法执行得早还是代码初始化块


来看下面这个例子:


/**
 * @author 微信搜「沉默王二」,回复关键字 PDF
 */
public class Car {
    Car() {
        System.out.println("构造方法");
    }
    {
        System.out.println("代码初始化块");
    }
    public static void main(String[] args) {
        new Car();
    }
}



程序输出的结果如下所示:


代码初始化块

构造方法


从输出结果看上去,仿佛代码初始化块执行得更早,对吧?事实上是这样子吗?


不是的,对象在初始化的时候会先调用构造方法,这是毫无疑问的,只不过,构造方法在执行的时候会把代码初始化块放在构造方法中其他代码之前,所以,先看到了“代码初始化块”,后看到了“构造方法”。




03、代码初始化块有哪些规则


代码初始化块主要有三个规则:


类实例化的时候执行代码初始化块;

实际上,代码初始化块是放在构造方法中执行的,只不过比较靠前;

代码初始化块里的执行顺序是从前到后的。

/**
 * @author 微信搜「沉默王二」,回复关键字 PDF
 */
class A {
    A () {
        System.out.println("父类构造方法");
    }
}
public class B extends A{
    B() {
        System.out.println("子类构造方法");
    }
    {
        System.out.println("代码初始化块");
    }
    public static void main(String[] args) {
        new B();
    }
}



来看一下输出结果:


父类构造方法

代码初始化块

子类构造方法



在默认情况下,子类的构造方法在执行的时候会主动去调用父类的构造方法。也就是说,其实是构造方法先执行的,再执行代码初始化块。


04、ending


“三妹,代码初始化块我们就学到这里吧,它的用法我相信你一定全部掌握了。”我揉一揉犯困的双眼,疲惫地给三妹说。


“好的,二哥,我这就去练习去。”三妹似乎意犹未尽,这种学习状态真令我感到开心。


相关文章
|
15天前
|
设计模式 Java
Java设计模式:组合模式的介绍及代码演示
组合模式是一种结构型设计模式,用于将多个对象组织成树形结构,并统一处理所有对象。例如,统计公司总人数时,可先统计各部门人数再求和。该模式包括一个通用接口、表示节点的类及其实现类。通过树形结构和节点的通用方法,组合模式使程序更易扩展和维护。
Java设计模式:组合模式的介绍及代码演示
|
5天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
17 5
|
7天前
|
Java API 开发者
探索Java中的Lambda表达式:简洁与强大的代码实践
本文深入探讨Java中Lambda表达式的定义、用法及优势,通过实例展示其如何简化代码、提升可读性,并强调在使用中需注意的兼容性和效率问题。Lambda作为Java 8的亮点功能,不仅优化了集合操作,还促进了函数式编程范式的应用,为开发者提供了更灵活的编码方式。
|
3天前
|
Java 开发者
探索Java中的Lambda表达式:简化你的代码之旅##
【8月更文挑战第62天】 Java 8的发布为开发者带来了诸多新特性,其中最引人注目的无疑是Lambda表达式。这一特性不仅让代码变得更加简洁,还极大地提升了开发的效率。本文将通过实际示例,展示如何利用Lambda表达式来优化我们的代码结构,同时探讨其背后的工作原理和性能考量。 ##
|
6天前
|
Java API 开发者
探索Java中的Lambda表达式:简化代码,提升效率
【9月更文挑战第27天】在Java 8中引入的Lambda表达式为编程带来了革命性的变化。通过简洁的语法和强大的功能,它不仅简化了代码编写过程,还显著提升了程序的执行效率。本文将深入探讨Lambda表达式的本质、用法和优势,并结合实例演示其在实际开发中的应用。无论你是Java新手还是资深开发者,都能从中获得启发,优化你的代码设计。
|
7天前
|
Java Linux Python
Linux环境下 代码java调用python出错
Linux环境下 代码java调用python出错
21 3
|
6天前
|
存储 Java 索引
使用java代码实现左右括号查找
使用java代码实现左右括号查找
|
7天前
|
算法 Java
java 概率抽奖代码实现
java 概率抽奖代码实现
|
15天前
|
Java 程序员 API
Java中的Lambda表达式:简化代码的秘密武器
在Java 8中引入的Lambda表达式是一种强大的编程工具,它可以显著简化代码,提高可读性。本文将介绍Lambda表达式的基本概念、优势以及在实际开发中的应用。通过具体示例,您将了解如何使用Lambda表达式来简化集合操作、线程编程和函数式编程。让我们一起探索这一革命性的特性,看看它是如何改变Java编程方式的。
23 4
|
16天前
|
Java 开发者
探索Java中的Lambda表达式:简化你的代码
【8月更文挑战第49天】在Java 8的发布中,Lambda表达式无疑是最令人兴奋的新特性之一。它不仅为Java开发者提供了一种更加简洁、灵活的编程方式,而且还极大地提高了代码的可读性和开发效率。本文将通过实际代码示例,展示如何利用Lambda表达式优化和重构Java代码,让你的编程之旅更加轻松愉快。
下一篇
无影云桌面