一、Java中的4种代码块
1. 普通代码块
直接在一个方法中出现的{}就称为普通代码块,例子程序如下:
public class CodeDemo01 {
public static void main(String[] args) {
// 普通代码块
{
int x = 10;
System.out.println("x=" + x);
}
int x = 100;
System.out.println("x=" + x);
}
}
2. 构造代码块
直接在类中定义的没有加static关键字的代码块{}称为构造代码块,例子程序如下:
public class CodeDemo02 {
public CodeDemo02() {
System.out.println("========这是构造方法=========");
}
// 这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
{
System.out.println("=========这是构造块!=========");
}
public static void main(String[] args) {
new CodeDemo02();
}
}
3. 静态代码块
使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化,例子程序如下:
public class CodeDemo03 {
static {
System.out.println("这是主类中的静态代码块!");
}
public static void main(String[] args) {
new Demo();
}
}
class Demo {
static {
System.out.println("这是Demo类中的静态代码块!");
}
{
System.out.println("这是Demo类中的构造块!");
}
public Demo() {
System.out.println("这是构造方法!");
}
}
静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
4. 同步代码块
同步代码块主要出现在多线程中。
二、举例
准确说块是一个作用域,就是里面的变量之类的数据的作用范围。
其中,static{}块中的语句是属于类的本身,不属于类中的任何方法,所以在类加载的时候就开始执行。
非静态块中的变量在{ }外是不可见的。
看以下一个例子,仔细分析为什么有这样的结果:
public class TestSegment {
public void m() {
System.out.println("mmmm");// 不调用时,不能自动执行
}
public static void main(String[] args) {
System.out.println("main");
}
static {// 静态块
{ // 非静态块
int i = 11111; // 此处i不影响括号外界的i
System.out.println("ddd" + i);
}
int i = 222222; // 在此i与前面不重名
System.out.println("sss" + i);
}
}
输出结果:
ddd11111
sss222222
main