目录
基本介绍:代码块就是使用{} 包裹的一段代码,只不过在不同的位置,功能不一样。代码块没有方法名,没有返回,没有参数,只有方法体,代码块通过加载类或创建对象时隐式调用。
代码块基本语法:
[修饰符]{
代码片段
};
注意点:修饰符一般不写,如果写只能写static,加上static就是静态代码块,最后的分号也可以省略。
一般代码块分成三种:构造代码块、静态代码块、局部代码块。
一、构造代码块
为什么叫构造代码块呢?因为它的执行与一个类的构造函数挂钩,它定义在类的方法之外,单独一个{},它会随着构造方法的执行而执行。
public class Student {
public static void main(String[] args) {
Student student = new Student(); //执行空构造方法
System.out.println("_______________");
Student student1 = new Student(18); //执行有参构造
}
private int age;
{
System.out.println("构造代码块" ); //构造代码块
age = 100;
}
public Student(){
System.out.println("Student()" );
}
public Student(int age) {
System.out.println("Student(int age)" );
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
'}';
}
}
从运行结果可以看出,每次调用Student类的构造方法之前,都会调用构造代码执行
二、静态代码块
静态代码块,它的访问修饰符是static,它会随着类的加载执行,并且它内部的东西只存了一份。
public class Student {
public static void main(String[] args) {
Student student = new Student();
System.out.println("_______________");
Student student1 = new Student(18);
}
private int age;
static {
System.out.println("静态代码块" );
}
public Student(){
System.out.println("Student()" );
}
public Student(int age) {
System.out.println("Student(int age)" );
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
'}';
}
}
运行结果如下,它会随着类的加载而执行,并且只会执行一次
三、局部代码块
局部代码块,一般定义在方法内,它与方法中的局部变量是处于不同的代码块中,所以他们的定义互不影响,甚至可以重名。
public class Student {
public static void main(String[] args) {
test();
}
public static void test(){
int a = 1;
// 局部代码块!!
{
System.out.println("局部代码块: "+a );
int b = 2;
}
int b = 2;
}
private int age;
public Student(){
System.out.println("Student()" );
}
public Student(int age) {
System.out.println("Student(int age)" );
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
'}';
}
}
运行结果