java入门(十八) | OOP(五)之构造代码块和局部代码块
构造代码块和局部代码块
{
代码...
}
1.1 构造代码块
- 在类的内部,方法外部的代码块
- 通常用于抽取构造方法中的共性代码
- 每次调用构造方法前都会调用构造代码块
- 优先于构造方法加载
package cn.qile.block;
//测试代码块
public class Test1_Block {
public static void main(String[] args) {
//创建对象测试
//1、如果有构造代码块,创建对象时发生两件事:先执行构造代码块再执行构造方法
Block b = new Block();
Block b2 = new Block("jack");
}
}
//创建Block类
class Block{
//2、构造代码块:位置是在类里方法外
String country ;
{
//3、构造代码块中可以提供所有构造方法的共性功能
country="中国人";
System.out.println("构造代码块");
}
//构造方法
public Block() {
System.out.println("无参构造:"+country);
}
public Block(String n) {
System.out.println("含参构造:"+n+"是"+country);
}
}
1.2 局部代码块
- 在方法里的代码块
- 通常用于控制变量的作用范围,出了括号就失效
- 变量的方法越小越好,成员变量会有线程安全问题
package cn.qile.block;
//测试代码块
public class Test2_Block {
public static void main(String[] args) {
//创建对象测试
//1、如果有构造代码块,创建对象时发生两件事:先执行构造代码块再执行构造方法
Block b = new Block();
b.eat();//方法调用时,才触发局部代码块
Block b2 = new Block("jack");
}
}
//创建Block类
class Block{
//2、构造代码块:位置是在类里方法外
String country ;
{
//3、构造代码块中可以提供所有构造方法的共性功能
country="中国人";
System.out.println("构造代码块");
}
//构造方法
public Block() {
System.out.println("无参构造:"+country);
}
public Block(String n) {
System.out.println("含参构造:"+n+"是"+country);
}
//提供普通方法
public void eat() {
//局部代码块:位置是在方法里 + 主要用来控制变量的作用范围
{
int i = 10;
System.out.println("局部代码块:"+i+"个"+country);
}
}
}
总结:
代码块加载顺序:构造代码块 -> 构造方法 -> 局部大码块
构造代码块:每次创建对象都会执行构造方法,在执行构造方法前会执行构造代码块
局部代码块:存在方法里,只有调用方法才会执行