代码块的类别:
1.构造代码块 。
构造代码块的大括号必须位于
成员位置上
(类之内,方法之外)
2.局部代码块。
局部代码块的大括号位于方法之内。作用:缩短局部 变量 的生命周期,节省一点点内存。很少用
3.静态代码块。
静态代码块是静态代码块所属的类被加载到内存的时候执行的。
静态代码块的应用场景:以后主要用于准备一个项目的初始化工作。
比如:从配置文件中读取数据库用户名与密码。
构造代码块作用:
给所有对象进行统一的初始化。
构造函数的作用:给对应的对象进行初始化。
构造代码块是在创建了代码块所属类的对象的时候调用一次。
构造代码块格式:
{
构造代码块;
}
注意:构造代码块的大括号必须位于
成员位置上(类之内,方法之外)
**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016年4月14日10:28:49
* Desc:构造代码块、局部代码块
*/
class Boby
{
int id;
String name;
//构造代码块
{
System.out.println("构造代码块被执行了。。。。");
cry();
}
public Boby(){
System.out.println("无参构造方法被执行了。。。。");
// cry();
}
public Boby(int id, String name){
System.out.println("带参构造方法被执行了。。。。");
// cry();
}
public void cry(){
System.out.println("哇哇哇哇哇的哭。。。。");
}
}
class Demo38
{
public static void main(String[] args)
{
//局部代码块 作用:缩短局部 变量 的生命周期,节省一点点内存。很少用
{
new Boby();
Boby b1 = new Boby(22, "狗娃");
System.out.println(b1.id+"#"+b1.name+".....................");
new Boby(33, "鸭蛋");
}
System.out.println(b1.id+"#"+b1.name+".....................");//这里会报错,局部变量生命周期已经结束
}
}
局部代码块的大括号位于方法之内。 作用:缩短局部 变量 的生命周期,节省一点点内存。很少用

构造代码块要注意的事项:
1.java编译器编译一个java源文件的时候,会把成员变量的声明语句提至一个类的最前端。
2.成员变量的初始化工作其实都在构造函数中执行的。
3.
一旦经过java编译器编译后,那么构造代码块的代码块就会被移动到构造函数中执行的(使用javap反编译来观察编译后的结果),
是在构造方法之前执行的,构造函数中的代码是最后执行的。
4.
成员变量的显式初始化与构造代码块的代码块的代码是按当前代码的顺序执行的。
理解代码1:
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016-4-14 10:55:59
* Desc:构造代码块要注意的事项:
1.java编译器编译一个java源文件的时候,会把成员变量的声明语句提至一个类的最前端。
2.成员变量的初始化工作其实都在构造函数中执行的。
3.一旦经过java编译器编译后,那么构造代码块的代码块就会被移动到构造函数中执行的,
构造函数中的代码是最后执行的。
4.成员变量的显式初始化与构造代码块的代码块的代码是按当前代码的顺序执行的。
*/
class Demo39
{
public Demo39(){//构造函数初始化
i = 400;
}
//调试方法:调换成员变量 和 构造代码块的顺序,看看i的值
int i = 22;//成员变量显示初始化 .....注意定义成员变量的位置在这里,为什么没有报错????
//调试方法:调换成员变量 和 构造代码块的顺序,看看i的值
//构造代码块初始化
{
i = 100;
}
public static void main(String[] args)
{
Demo39 d = new Demo39();
System.out.println(d.i);
}
}
理解代码2:
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016年4月14日10:28:49
* Desc:构造代码块、局部代码块
*/
class Boby
{
int id;
String name;
//构造代码块
{
cry();
}
public Boby(){
}
public Boby(int i, String n){
id = i;
name = n;
}
public void cry(){
System.out.println(name + "哇哇哇哇哇的哭。。。。");
}
}
class Demo38
{
public static void main(String[] args)
{
Boby b1 = new Boby(22, "狗娃");
System.out.println(b1.id+"#"+b1.name+".....................");
}
}
代码2结果: