java面向对象值类属语句块

在我们之前学习语句的时候,我们讲过一种比较特殊的语句块,那就是局部代码块。局部代码块的作用是什么呢,就是把临时使用的变量放在里面,之后执行完之后,局部代码块中定义的变量会直接被释放,这样就避免了那些我们只用一次的变量的释放。那么类当中有么有一种比较特殊的代码块么?肯定是有的,我们现在就来看下,在类方法外部定义的类的代码块都有什么作用?

代码实例:

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");
		
	}

}

  

这个就是编译之后生成的结果,初始化顺序是:静态第一、构造代码块第二、构造函数第三、局部代码块第四(很多变,分在静态还有在动态方法中论述)。

以上就是对构造代码块的讲述,构造代码块的用途,待续....

posted @ 2013-09-21 20:55  stark_javac  阅读(218)  评论(0编辑  收藏  举报