黑马程序员技术交流社区

标题: 初始化块的疑惑 [打印本页]

作者: 刘奇    时间: 2012-7-25 15:06
标题: 初始化块的疑惑
究竟什么是初始化块区域呢?一定要加上{}吗,如果只有一条赋值语句,也算是一个初始化快吗?
作者: 柳雷    时间: 2012-7-25 15:44
所谓初始化语块就是在一个类中对实变量作初始化的语块。他在构造对象时执行而且在构造器之前执行。
初始化语块的作用:
类体中只能定义实例变量和方法,不能直接写其它任何功能性的语句,赋值语句也不行(定义实例变量时显示初始化除外),
但因为可以有初始化块,所以可以在初始化块中写入功能性语句,通常这样的语句是用来在初始化的时候起一些作用。
另外Java中还有静态初始化块,即被static修饰的初始化块,用来对静态变量进行初始化。静态初始化块在类第一次加载时执行,而且只执行一次。

作者: 李菁    时间: 2012-7-26 01:11
其实初始化块就是构造器的补充,初始化块是不能接收任何参数的。可以在里面定义一些所有对象共有的属性、方法
Java初始化块有两种,一种是静态初始化块,另一种是非静态初始化块
静态初始化块:用static定义,当类装载到系统时执行一次
非静态初始化块:在每个对象生成时都会被执行一次,可以初始化类的实例变量
非静态初始化块会在构造函数主体代码执行之前被运行,括号里的是初始化块(所以必须有括号),里面的代码在创建java对象时执行,而且在构造器之前执行
作者: 姬仁贵    时间: 2012-7-26 06:43
本帖最后由 姬仁贵 于 2012-7-26 06:46 编辑

在Java中,有两种初始化块:静态初始化块和非静态初始化块.

静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量,即static修饰的数据成员.

非静态初始化块:在每个对象生成时都会被执行一次,可以初始化类的实例变量.

非静态初始化块会在构造函数执行时,且在构造函数主体代码执行之前被运行.
括号里的是初始化块,这里面的代码在创建java对象时执行,而且在构造器之前执行!

其实初始化块就是构造器的补充,初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块了初始化!!


初始化块与构造方法的作用很相似,他们都用于对Java对象执行指定的初始化块操作,但两者之间仍然存在着差异。具体差异在于:初始化块是一段固定的执行代码,他不能接收任何参数,因此初始化块对同一个类内的属性所进行的初始化处理完全相同;如果多个构造方法里有相同的初始化块,这些初始化代码无需接受参数,那就可以把他们放在初始化中定义。通过把多个构造方法中相同的代码提取到初始化块中定义,能更好的提高初始化块的复用,提高应用的可维护性
与构造方法类似,创建一个Java对象时,不仅会执行该类的初始化块和构造方法,系统还会一直追溯到java.lang.Object类,先执行java.lang.Object类的初始化块,执行java.lang.Object的构造方法,然后依次向下执行父类的初始化块,执行其父类的构造方法….最后才执行给类的初始化块和构造方法,返回该类的对象
如果希望类加载后对整个类执行某些初始化操作,则需要使用static关键字来修饰初始化块,使用static修饰的初始化块呗称为静态初始化块,静态初始化块是类相关的,静态初始化块必普通初始化块先执行

作者: sin    时间: 2012-7-26 10:22
初始化块就是一组一并初始化的代码,分为静态的的非静态的。就像楼上那哥们说的 就是构造器的补充




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2