在我们之前学习语句的时候,我们讲过一种比较特殊的语句块,那就是局部代码块。局部代码块的作用是什么呢,就是把临时使用的变量放在里面,之后执行完之后,局部代码块中定义的变量会直接被释放,这样就避免了那些我们只用一次的变量的释放。那么类当中有么有一种比较特殊的代码块么?肯定是有的,我们现在就来看下,在类方法外部定义的类的代码块都有什么作用?
代码实例:
class ClassScop
{
int num;
String name;
/**
*类内部的代码块开始
*/
{
System.out.println("Hello World!");
}
ClassScop(int num,String name)
{
this.num = num;
this.name = name;
}
static void sayLoud()
{
System.out.println("Say Loudly");
}
}
class ScopDemo
{
public static void main(String[] args) {
//初始化对象
ClassScop cs1 = new ClassScop(10,"Hello cs1");
ClassScop cs2 = new ClassScop(9,"Hello cs2");
}
}
这个地方,当我们new两个对象的时候,我们会发现此时类内部的代码块被调用了两次,那么调用这个类内部的代码块到底跟谁有关系呢?这个我们是不是还不清楚呢?到底是跟类有关系还是跟类的对象有关系,为了验证以上我们的推测哪个是正确的,这里我们来写个代码验证下:
class ScopDemo
{
public static void main(String[] args) {
//初始化对象
//ClassScop cs1 = new ClassScop(10,"Hello cs1");
//ClassScop cs2 = new ClassScop(9,"Hello cs2");
//因为静态变量是先于对象而存在的,如果这个跟对象有关系,此时结果就不会出现,反之则出现
ClassScop.sayLoud();
}
}
当编译运行这段代码之后,我们没有得到 hello world,所以说这个过程跟对象的构造有关系,也就是说这里说的类内方法之外的代码块,称他为构造代码块,更贴切一些。
那么我们再来思考一个问题,静态代码块--构造代码块--构造函数--局部代码块 这四个代码块产生的顺序是怎样的呢?
下面我们用一个完整的示例来猜测下:
class ClassScop
{
int num;
String name;
{
System.out.println("Hello Construct Scop!");
}
ClassScop(int num,String name)
{
this.num = num;
this.name = name;
System.out.println("Hello ClassScop");
}
static void sayLoud()
{
System.out.println("Hello Static");
}
void sayJuBu()
{
{
System.out.println("Hello Jubu");
}
}
}
class ScopDemo
{
public static void main(String[] args) {
ClassScop.sayLoud();
ClassScop s1 = new ClassScop(10,"ddd");
}
}
这个就是编译之后生成的结果,初始化顺序是:静态第一、构造代码块第二、构造函数第三、局部代码块第四(很多变,分在静态还有在动态方法中论述)。
以上就是对构造代码块的讲述,构造代码块的用途,待续....