1、普通代码块
普通代码块就是在方法或者是在语句中用{}定义的代码块
普通代码块和方法中其它语句的执行顺序与其出现的顺序一致:即先出现先执行。
package com.wrh.codeblock;
public class CommonCodeBlock {
public static void main(String[] args) {
//普通代码块的研究
{
System.out.println("方法中的普通代码块1");
}
System.out.println("主方法非代码块{}修饰的语句");
{
System.out.println("方法中的普通代码块2");
}
}
}
/*
* 运行结果如下:
方法中的普通代码块1
主方法非代码块{}修饰的语句
方法中的普通代码块2
* */
2、自由代码块
package com.wrh.codeblock;
//自由代码块的研究
//自由代码块就是在类中用{}定义的代码块
//执行顺序在new对象调用构造方法之前执行。但如果在一个类中有几个自由代码块,则其执行顺序与其出现的顺序一致:即先出现先执行。
//且每新建一个对象,都会执行一次。
public class freedomCodeBlock {
{
System.out.println("自由代码块2被运行");//故意将2写在前面
}
public freedomCodeBlock(){
System.out.println("构造函数被执行");
}
{
System.out.println("自由代码块1被执行");
}
public static void main(String[] args) {
System.out.println("main 方法中在创建对象前的第一条语句被执行");
new freedomCodeBlock();
new freedomCodeBlock();
}
}
/*
* 运行结果如下
main 方法中在创建对象前的第一条语句被执行
自由代码块2被运行
自由代码块1被执行
构造函数被执行
自由代码块2被运行
自由代码块1被执行
构造函数被执行
* */
3、static代码块
静态代码块是在类中这样定义的:static{},即是在自由代码块前面用static修饰的
package com.wrh.codeblock;
//静态代码块的研究
//
//静态代码块的是在JVM进行类加载时被执行的,且只执行一次。即其执行时间是最早最早的。
//如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
//注意:1 静态代码块不能存在于任何方法体内。
//2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
public class StaticCodeBlock {
static{
System.out.println("静态代码块--------1-------被执行");
}
{
System.out.println("自由代码块-----1-----被执行");
}
static{
System.out.println("静态代码块--------2-------被执行");
}
public StaticCodeBlock(){
System.out.println("构造函数被执行");
}
{
System.out.println("自由代码块-----2-----被执行");
}
public static void main(String[] args) {
System.out.println(" main 方法中在new对象之前的第一条语句被执行。");
new StaticCodeBlock();
new StaticCodeBlock();
}
}
/*
*运行结果如下:
静态代码块--------1-------被执行
静态代码块--------2-------被执行
main 方法中在new对象之前的第一条语句被执行。
自由代码块-----1-----被执行
自由代码块-----2-----被执行
构造函数被执行
自由代码块-----1-----被执行
自由代码块-----2-----被执行
构造函数被执行
* */