前言
代码块这一部分这时候才拿出来写,说实话和我今天实验室做的测试有关,因为实在是做的太差了(指在被罚款的边缘疯狂摩擦),因此我决定花费一点空闲时间来回顾以前学过的知识。
废话不多说,开干!
JAVA学习笔记——代码块有关
代码块的概念
代码块,其实很容易理解,用“{}”括起来的一段代码就被称为代码块,代码块根据位置和声明代码块的关键字的不同,可以被分为普通代码块,静态代码块,构造块以及同步代码块(学多线程的时候会讲到,而现在我还没学到那里) 四种,我认为它的难点就在于代码块的先后运行顺序。所以,我们就先来看看前三种代码块。
普通代码块
普通代码块指的就是直接在方法或是在语句中定义的代码块,例如
public class demo{
public static void main(String[] args){
{ //定义一个普通代码块
int x=30;//定义局部变量
System.out.println("普通代码块:x="+x);
}
int x=10;
System.out.println("普通代码块之外:x="+x);
}
}
/*
运行结果为
普通代码块:x=30
普通代码块之外:x=10
*/
构造代码块
构造块顾名思义,既然有构造方法,构造方法是写在类中的,那么构造块也是写在类中的,即构造代码块就是直接写在类中的代码块,例如
class Demo2{
{ //构造块
System.out.println("构造块执行啦!");
}
public Demo2(){ //构造方法
System.out.println("构造方法执行啦!");
}
}
/*
public class Demo02 {
public static void main(String[] args) {
new Demo2();
new Demo2();
new Demo2();
new Demo2();
//实例化对象四次
}
}
*/
/*
运行结果:
构造块执行啦!
构造方法执行啦!
构造块执行啦!
构造方法执行啦!
构造块执行啦!
构造方法执行啦!
构造块执行啦!
构造方法执行啦!
*/
从以上的结果可以看出来,在运行了四次实例化对象之时,可以发现构造块优先于构造方法执行,而且在每一次执行的时候都会执行构造块中的代码。
静态代码块
静态代码块,顾名思义,就是用static关键字修饰的代码块。例如
package demo;
class Demo2{
{ //构造块
System.out.println("构造块执行啦!");
}
static { //静态代码块
System.out.println("静态代码块执行了!");
}
public Demo2(){ //构造方法
System.out.println("构造方法执行啦!");
}
}
public class Demo02 {
static{
System.out.println("主方法所在类中的静态代码块");
}
public static void main(String[] args) {
new Demo2();
new Demo2();
new Demo2();
new Demo2();
}
}
/*
运行结果:
主方法所在类中的静态代码块
静态代码块执行了!
构造块执行啦!
构造方法执行啦!
构造块执行啦!
构造方法执行啦!
构造块执行啦!
构造方法执行啦!
构造块执行啦!
构造方法执行啦!
*/
由上面的程序执行结果可以看出,静态代码块优先于主方法执行,而且在类中的静态代码块优先于构造块和构造方法执行,而且无论实例化多少个对象,静态代码块只执行一次。
这样的话,在实验室的小测试中的一道题目也就迎刃而解
例题
从以上我们可以获取到信息,代码1和代码3是普通代码块,代码2和代码6是静态代码块,代码4是构造方法,代码5是方法。
new Block().show创建一个新的对象实例,同时执行show方法,根据我们上面所讲的,先是静态代码块执行,因此先输出“2,6”,然后再是构造代码块执行,输出“1,3”,构造方法执行一次,输出"4",最后再调用show方法,输出"5"
而new Block()再一次实例化对象时,由于静态代码块只执行一次,且没有调用方法,因此输出“1,3,4"
因此最后的结果是“261345134”.
没想到我竟然把static代码块和static方法的的概念记混了
总结
- 代码块有四种,分为普通代码块,构造代码块,静态代码块以及同步代码块
- 代码块的执行顺序:静态代码块>构造代码块>构造方法
使用教材:Java开发实战经典
祝大家有一个好假期
XD