`
qilixiang012
  • 浏览: 202953 次
文章分类
社区版块
存档分类
最新评论

java 初始化块的认识

 
阅读更多

在Java程序中,类的定义和方法的定义都必须放在一个“块”中,而条件语句,循环语句中的代码通常也放在一个“块”中。

所谓“块”,就是用{和}所包含的代码块,它们在逻辑上常常是一个整体。初始化块,独立于方法体和构造函数之外,可以看成是一个没有参数,没有返回值,没有方法名的特殊方法。

初始化块主要用于对象的初始化操作,在创建对象时调用,可以用于完成初始化属性值,加载其他类等功能。初始化块和构造函数的功能相同,都可以在创建对象时完成一些初始化操,一般情况下,构造方法初始化和初始化块初始化可以通用。初始化块与构造方法区别:

构造方法在初始化时可以通过参数接收外界传入的值,而初始化块则不能。

初始化块的执行顺序在构造方法之前。如果构造方法多次重载,此时可以考虑将构造方法中通用的代码提到初始化块中定义。

public class Test {

public static void main(String[] args){

A a1 = new A();

A a2 = new A("");

}

}

class A {

{System.out.println("初始化块");}

public A(){System.out.println("无参的构造函数");}

public A(Stringname){System.out.println("带参数的构造函数");}

}

运行结果:

初始化块

无参的构造函数

初始化块

带参数的构造函数

与静态代码块的区别:

(1)静态的初始化块比非静态的初始化块执行的要早。静态初始化块的执行实际需要注意,它是在类加载器第一次加载该类时调用,不一定非要创建对象才触发(见下面代码所示)。

public class Test {

static {

System.out.println("加载Test类,执行静态代码块");

}

public static void main(String[] args){

System.out.println("加载类Test完毕,执行main函数");

}

}

运行结果:

加载Test类,执行静态代码块

加载类Test完毕,执行main函数

(2)静态初始化块只执行一次,非静态的初始化块可执行多次。


感谢金丝燕大学校长

分享到:
评论

相关推荐

    Java类中各成员初始化的顺序

    了解java中类各个成员的初始化顺序是非常重要的,这样你可以对类有全局的认识。不说太多,直接看下面的例子 class Father { static{ System. out.println("父类静态代码块初始化" ); } { System. out.println...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    创建对象包括声明、实例化和初始化三方面的内容。通常的格式为 : 1. 声明对象 对象声明实际上是给对象命名,也称定义一个实例变量。对象声明的一般格式为: type name 其中,type 是一个类的类名,用它声明的对象将...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    8.2 import语句:化繁为简 200 8.2.1 import语句 200 8.2.2 一网打尽包中所有类 201 8.2.3 import语句带来的小问题 202 8.2.4 默认引入的包 204 8.3 命名习惯大回顾 204 8.4 Java中的注释 205 8.4.1 使用双...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    8.2 import语句:化繁为简 200 8.2.1 import语句 200 8.2.2 一网打尽包中所有类 201 8.2.3 import语句带来的小问题 202 8.2.4 默认引入的包 204 8.3 命名习惯大回顾 204 8.4 Java中的注释 205 8.4.1 使用双...

    JAVA面试题最全集

    对于java流的认识 28.简单描述一下awt与swing区别。 29.简述java编程中事件处理模式。 30.你编写过applet吗?applet的安全权限如何?试列举java application或者applet中与servlet/jsp通信可以采用的方式。 31...

    嵌入式设计及linux驱动开发指南——基于ARM9处理器.pdf

    9.8.1 OHCI驱动初始化 9.8.2 与USBD连接 9.8.3 OHCI根HUB 9.9 扫描仪设备驱动程序 9.9.1 USBD接口 9.9.2 文件系统接口 9.10 USB主机驱动在S3C2410X平台的实现 9.10.1 USB主机控制器简介 9.10.2 驱动程序的...

    ORACLE9i_优化设计与系统调整

    §2.4.2.2 参数设置与初始化文件: 54 §2.4.2.3 在控制实用程序运行中设置跟踪参数 56 §2.4.2.4 服务器/客户包跟踪 57 §2.4.2.5 评估NET跟踪信息 58 §2.4.2.6 使用跟踪助理(Trace Assistant)检查跟踪文件 60 第...

    二十三种设计模式【PDF版】

    状态是编程中经常碰到的实例,将状态对象化,设立状态变换器,便可在状态中轻松切换. 设计模式之 Memento(注释状态?) 很简单一个模式,就是在内存中保留原来数据的拷贝. 设计模式之 Interpreter(解释器) 主要用来对...

    在一小时内学会 C#(txt版本)

    正如其名字说的,一旦它们已经进行了写操作、直接初始化或在构造函数中对其进行了赋值,readonly 数据成员就只能对其进行读取。readonly 和 const 数据成员不同之处在于 const 要求你在声明时进行直接初始化。看下面...

    c#学习笔记.txt

    在类中,必须初始化实例对象. 使用 new 运算符创建结构对象时,将创建该结构对象,并且调用适当的构造函数。与类不同的是,结构的实例化可以不使用 new 运算符。如果不使用 new,那么在初始化所有字段之前,字段将...

    C语言入门经典(第4版)--源代码及课后练习答案

    2.3.4 变量的初始化 28 2.3.5 算术语句 28 2.4 变量与内存 34 2.5 整数变量类型 35 2.5.1 无符号的整数类型 35 2.5.2 使用整数类型 36 2.5.3 指定整数常量 37 2.6 浮点数 38 2.7 浮点数变量 38 2.8 使用...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段47讲、ClassLoader初始化阶段详细介绍clinit.mp4 │ 高并发编程第二阶段48讲、JVM内置三大类加载器的详细介绍.mp4 │ 高并发编程第二阶段49讲、自定义类加载器ClassLoader顺便问候了一下...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段47讲、ClassLoader初始化阶段详细介绍clinit.mp4 │ 高并发编程第二阶段48讲、JVM内置三大类加载器的详细介绍.mp4 │ 高并发编程第二阶段49讲、自定义类加载器ClassLoader顺便问候了一下...

    C#微软培训资料

    18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间成员速查.269 参 考 资 料 .300 <<page 4>> page begin==================...

Global site tag (gtag.js) - Google Analytics