Java中代码块的学习

关于代码块的概述:
用{ }括起来的代码,统称为代码块;
根据其位置以及声明不同:分为以下:
局部代码块: 在main()里面,给变量限定它的生命周期
构造代码块:在一个类中的成员位置中,用{ }括起来,
作用:可以将多个构造方法中的相同的代码放到构造代码块中,对对象进行初始化。在每次执行构造方法之前,先执行构造代码块.
静态代码块:在一个类的成员位置,也是用{ }包起来,但是被static修饰

作用:一般情况 它的作用给类进行初始化

这里有一道面试题:

    构造代码块,构造方法,静态代码的优先级?

    我们通过代码来看一下执行顺序:    

//定义一个Code类
class Code{
	
	//静态代码块
	static{
		int x = 1000 ;
		System.out.println(x);
	}
	
	//构造代码块
	{
		int x = 100 ;
		System.out.println(x);
	}
	//构造方法
	public Code() {
		System.out.println("code");
	}
	
	//构造代码块
	{
		int y = 200 ;
		System.out.println(y);
	}
	
	//有参构造
	public Code(int a) {
		System.out.println("code");
	}
	
	//静态代码块
	static {
		int y = 2000 ;
		System.out.println(y);
	}
}
public class CodeDemo {
	
	public static void main(String[] args) {
		
		//创建Code类的对象
		Code code = new Code() ;
		System.out.println("--------------------");
		Code code2 = new Code() ;
		System.out.println("--------------------");
		Code code3 = new Code(100) ;
	}
}

打印出的结果为:

1000
2000
100
200
code
--------------------
100
200
code
--------------------
100
200
code

由执行结果可以看出:

静态代码块>构造代码块>构造方法
静态代码:只能执行一次

构造代码块在每次执行构造方法之前都会被执行.

    code对象:由于在静态代码块里定义的x和y的值分别为1000和2000,先执行静态代码块所以先打印x和y的值,下来执行构造代码块,在构造代码块里定义x和y的值分别为100和200,所以接下来打印构造代码块中的x和y值,最后执行构造方法,所以最后才打印无参构造中的code值。

    code2对象:由于静态代码只能执行一次,所以静态代码块不再执行,又因为构造代码块在每次执行构造方法之前都会被执行,所以继续打印构造代码块中的x和y值,执行无参构造,打印无参构造中的code。

    code3对象:同code2相同,不再执行静态代码块,但顺序执行构造代码块打印x和y值,执行有参构造中的操作,打印有参构造中的code。

学习了代码块的优先级,我们来试着做道题练习一下:

/**
 * 看程序,写结果
 * @author Administrator
 *
 */
//定义一个学生类
class Student{
	static {
		System.out.println("我是静态代码块....");
	}
	
	{
		System.out.println("我是构造代码块...");
	}
	
	public Student() {
		System.out.println("我是构造方法...");
	}
}
public class StudentDemo {
	static {
		System.out.println("今天天气不错...");
	}

	public static void main(String[] args) {
		System.out.println("我是main方法....");
		Student s1 = new Student() ;
		Student s2 = new Student() ;
	}
}

它的执行结果是什么呢?

---------------------------------我是华丽的分割线------------------------------------

执行结果:

今天天气不错...
我是main方法....
我是静态代码块....
我是构造代码块...
我是构造方法...
我是构造代码块...

我是构造方法...

可以看出,代码首先由包含main方法的类开始执行,又因为静态代码块优于方法执行,所以先打印“今天天气不错...”,接下来顺序执行main方法中的打印语句,打印"我是main方法....",接下来创建Student对象s1,进入Student对象,按照静态代码块>构造代码块>构造方法的顺序执行,依次打印"我是静态代码块....""我是构造代码块...""我是构造方法...",返回main方法,接着创建Student s2对象,由于静态代码块只执行一次,所以这次依次打印"我是构造代码块...""我是构造方法..."

阅读更多

没有更多推荐了,返回首页