代码块
代码码块的定义与使用
根据代码出现是位置以及关键字,分为以下四种代码块:
- 普通代码块
- 构造快
- 静态块
- 同步代码块
普通代码跨块(定义在方法中的代码块)
public class Test{
public static void main(String[] args) {
{ //直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x = " +x);
}
int x = 100 ;
System.out.println("x = " +x);
}
}
public class Test{
public static void main(String[] args) {
int x = 100 ;
{ //直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x = " +x);
}
System.out.println("x = " +x);
}
}
构造块
- 定义在类中的代码块,不加任何修饰符
- 在对象产生时,优先于构造方法执行,有几个对象产生,就调用几次构造块,用于在构造方法执行前完成一些属性的初始化操作
class Person{
public Person(){
System.out.println("2.Person类的构造方法");
}
{
//定义在类中,不加任何修饰符,构造块
System.out.println("1.Person类的构造块");
}
}
public class Test{
public static void main(String[] args) {
new Person();
new Person();
}
}
静态代码块
非主类中的静态代码块
在类加载时执行(什么时候用到这个类),优先于构造块执行,无论有多少对象产生,只会调用一次
class Person{
public Person(){
System.out.println("2.Person类的构造方法");
}
{
//定义在类中,不加任何修饰符,构造块
System.out.println("1.Person类的构造块");
}
static {
//定义在非主类中的静态块
System.out.println("3.Person类的静态块");
}
}
public class Test{
public static void main(String[] args) {
new Person();
new Person();
}
}
主类中的静态代码块
主类中的静态块优先于主方法执行,其他和非主类相同
public class Test{
public Test(){
System.out.println("2.Test的构造方法");
}
{
System.out.println("1.Test的构造块");
}
static{
System.out.println("3.Test的静态块");
}
public static void main(String[] args) {
System.out.println("--start--");
new Test();
new Test();
System.out.println("--end--");
}
}