`

Java编程之构造代码块

    博客分类:
  • Java
阅读更多

       最近工作不忙,闲来无事,就看看书,今天遇到了构造代码块让我一顿好奇。构造函数倒是了解一些,构造代码块还是第一次听说,那么到底什么是构造代码块?

      其实,构造代码块是代码块的一种类型。代码块是指用大括号把多行代码封装在一起,形成一个独立的数据体,实现特定算法的代码集合。一般来说,代码块是不能单独运行,必须要有运行主体。在Java中一共有四种类型的代码块,即:

      1、普通代码块:就是在方法后面使用“{}”括起来的代码片段,它不能单独运行,必须通过方法名调用执行。

      2、静态代码块:在类中使用static修饰,并使用“{}”括起来的代码片段,用于静态变量的初始化或对象创建前的环境初始化。

      3、同步代码块:使用synchronized关键字修饰,并使用“{}”括起来的代码片段,它表示同一时间只能有一个线程进入到该方法中,是一种多线程保护机制。

      4、构造代码块:在类中没有任何前缀或后缀,并使用“{}”括起来的代码片段。

 

      从这个命名就可以看出构造代码块和构造函数肯定有一定的关系,那么究竟是什么关系呢?在回答这个问题之前,我们先要知道Java编译器是如何处理构造代码块的,下面通过一个实例来说明:

public class DemoA {
	//构造代码块
	{
		System.out.println("执行构造代码块");
	}
	
	public DemoA(){
		System.out.println("执行无参构造函数");
	}
	
	public DemoA(String str){
		System.out.println("执行有参构造函数,参数:" + str);
	}
	
	public static void main(String args[]){
		new DemoA();
		new DemoA("construct code block");
	}
}

运行这个demo后,在控制台输出的信息如下:

执行构造代码块

执行无参构造函数

执行构造代码块

执行有参构造函数,参数:construct code block

 

       从我用红色标出来的打印信息可以看出,Java编译器在处理构造代码块的时候,是直接把它插在每个构造函数的最前面,执行完构造代码块里面的内容后,再执行构造函数中的内容。

根据这个实例,就可以很好的回答构造代码块与构造函数之间的关系:构造代码块会在每个构造函数内首先执行,这里需要注意的是构造代码块不是在构造函数之前先执行,它是依托构造函数执行的

      DemoA这个实例说明了构造代码块与构造函数之间的关系,那有没有特例呢?还是通过一个实例来证明,这个实例的作用统计一个类的实例数量。

public class CountObjectInstanceNum {
    public static void main(String[] args){
    	new Base();
    	new Base("AAA");
    	new Base(100);
    	System.out.println("The number of object instance is " + Base.getNumOfObjects());
    }
}

class Base{
	//对象计数器
	private static int numOfObjects = 0;
	
	{
		//构造代码块,计算产生的对象数量
		numOfObjects++ ;
	}
	
	public Base(){
		System.out.println("I am a constructor without parameter");
	}
	
	public Base(String str){
		//有参构造函数调用无参构造函数	
		this();
		System.out.println("I am a constructor with having parameter: " + str);
	}
	
	public Base(int m){
		System.out.println("I am a constructor with having parameter: " + m);
	}
	
	public static int getNumOfObjects(){
		return numOfObjects;
	}
}

这个实例运行结构如下:

I am a constructor without parameter

I am a constructor without parameter

I am a constructor with having parameter: AAA

I am a constructor with having parameter: 100

The number of object instance is 3

 

       根据DemoA这个实例得出的结论,CountObjectInstanceNum统计出来的实例应该是4 ,而红色标出的却是3。这就说明了上面所提出的结论是存在特例的情况的,即:如果遇到this关键字(也就是构造函数调用自身其他的构造函数时)则不插入构造代码块。

       如果是super关键字呢,在构造代码块的处理上,super方法没有任何特殊的地方,编译器只会把构造代码块插入到super关键字方法之后执行,有兴趣的朋友可以试试。

分享到:
评论

相关推荐

    Java构造代码块,静态代码块原理与用法实例分析

    Java构造代码块、静态代码块原理与用法实例分析 Java构造代码块和静态代码块是Java中两种特殊的代码块,它们的运行机制和应用场景...了解构造代码块和静态代码块的原理和用法可以帮助我们更好地使用Java语言进行编程。

    Java 中普通代码块,构造代码块,静态代码块区别及代码示例

    Java编程语言中有三种类型的代码块,它们分别是普通代码块、构造代码块和静态代码块,每种都有其特定的用途和执行顺序。 1. **普通代码块**: 普通代码块(也称为局部代码块)是在方法或者类的成员变量声明之间...

    【IT十八掌徐培成】Java基础第04天-05.构造代码块-构造函数-javabean-pojo.zip

    总结一下,这个课程涵盖了Java编程中的重要概念:构造代码块提供了统一初始化对象的方式,构造函数用于创建和初始化对象,JavaBean和POJO则定义了对象如何封装数据和交互的标准。理解并熟练掌握这些概念,对于进行...

    java中的静态代码块、构造代码块、构造方法详解

    在Java编程语言中,类的初始化过程涉及到几个关键的概念,包括静态代码块、构造代码块和构造方法。这些概念在创建对象和管理类的状态时起着至关重要的作用。以下是关于这三个概念的详细解释: 1. **静态代码块**: ...

    100个java编程实例源代码

    Java编程语言作为世界上最受欢迎的编程语言之一,以其跨平台、面向对象的特点深受程序员喜爱。"100个Java编程实例源代码"集合提供了一个全面的学习资源,覆盖了从基础概念到高级特性的广泛主题,旨在帮助初学者和有...

    java程序设计课本代码

    《Java程序设计课本代码》这个资源包含了学习Java编程的基础到进阶的实例代码,是针对“Java程序设计”课程的配套材料。通过这些代码,我们可以深入理解Java语言的关键概念、语法以及编程技巧。 首先,Java是一种...

    深入浅析Java中普通代码块、构造代码块与静态代码块

    Java编程语言中有三种类型的代码块:普通代码块、构造代码块和静态代码块,它们各自在不同的场景下发挥着重要作用。下面将详细解释这三种代码块的特性、执行顺序以及它们在程序运行过程中的作用。 1. **普通代码块*...

    java编程艺术代码

    1. **基础语法**:Java编程艺术的代码示例涵盖了基础语法,包括数据类型(如整型、浮点型、字符型和布尔型)、变量声明、运算符以及流程控制语句(如if-else、switch、for、while等)。 2. **类与对象**:Java是一...

    Java的静态代码块、非静态代码块、构造函数

    Java编程语言中,静态代码块、非静态代码块和构造函数是面向对象设计的重要组成部分,它们在类的初始化和对象创建过程中起到关键作用。本文将深入探讨这些概念,以及它们在实际开发中的应用。 首先,我们来理解静态...

    《Java编程基础》-曹静-源代码

    理解类的构造方法、成员变量和方法,以及封装、继承和多态这三大面向对象特性,是Java编程的关键。同时,异常处理是保证程序健壮性的重要手段,通过try-catch-finally语句,可以捕获并处理运行时可能出现的错误。 ...

    Java 普通代码块静态代码块执行顺序(实例讲解)

    在Java编程语言中,了解代码块的执行顺序对于编写高效且无错的代码至关重要。这里我们将深入探讨Java中的普通代码块(实例初始化块)和静态代码块的执行顺序,并通过实例来阐述这一概念。 首先,我们需要明白两种...

    经典java小程序源代码合集

    这个"经典java小程序源代码合集"包含了多种实用的小程序和小游戏,是学习和理解Java编程理念、语法以及实际应用的宝贵资源。下面将详细讨论这个合集中可能涵盖的知识点。 1. **基础语法与数据类型**:Java的基础...

    java程序设计教程(第五版)源代码

    Java编程语言是面向对象的、跨平台的编程语言,广泛应用于企业级应用开发、移动应用开发(如Android)以及各种互联网软件。《Java程序设计教程(第五版)》的源代码提供了丰富的实例,有助于深入理解Java的核心概念...

    最全的资源-Java编程的逻辑

    Java编程的逻辑是软件开发领域中的核心概念,它关乎如何用Java语言来构造高效、可维护的程序。在这个最全的资源中,我们能够深入理解Java编程的基本原理和高级技巧,帮助开发者提升技能水平。 首先,Java编程的基础...

    Java程序练习附带源代码

    在这个“Java程序练习附带源代码”的压缩包中,你将找到一系列用于学习和实践Java编程的小型示例项目。这些源代码是深入理解Java语言特性和编程技巧的宝贵资源。 首先,让我们探讨Java程序设计的基础。Java的核心...

    java源程序代码(包含java个层次知识)

    这个名为"java源程序代码(包含java个层次知识)"的压缩包文件提供了丰富的学习资源,帮助初学者从零开始掌握Java编程。让我们深入探讨一下这个压缩包中可能包含的Java学习内容。 首先,"java+demo"这样的文件名...

    java语法大全,java语法,java编程基础,java入门

    在“java编程基础”部分,会详细介绍如何编写和运行Java程序,包括JDK的安装、环境变量配置,以及使用IDE(如Eclipse、IntelliJ IDEA)进行开发。此外,还会讲解面向对象编程(OOP)的基本原则,如封装、继承和多态...

    JAVA 编程宝典全部源代码.zip

    这个ZIP压缩包包含了该书的所有源代码实例,为读者提供了亲手实践的机会,以便更好地理解和掌握Java编程技术。下面将详细阐述这些源代码中可能包含的知识点,以及如何通过它们来提升你的编程技能。 1. **基础语法**...

    静态代码块

    ### 静态代码块与构造代码块的区别 在Java编程语言中,代码块是一种用于对对象或类进行初始化的有效手段。根据它们的作用域和执行时机的不同,代码块可以分为几种类型,其中最常见的两种是静态代码块(static code ...

    java 静态块实例块构造器调用

    Java编程语言中,类的初始化过程涉及到静态块(static block)、实例块(instance block)以及构造器(constructor)。这些块的执行顺序对于理解和编写复杂的Java程序至关重要,特别是在涉及继承关系时。下面我们将...

Global site tag (gtag.js) - Google Analytics