普通代码块
定义在方法中
package 代码块;
/*
普通代码块
*/
public class Demo1 {
public static void main(String[] args) {
{
int x =10;
System.out.println("x = "+x);
}
int x=100;
System.out.println("x = "+x);
}
}
输出结果:
x = 10
x = 100
特点:可以拆分一个方法中的结构,以防止相同变量名称所带来的影响
构造代码块
package 代码块;
/*
构造块
*/
class Person{
public Person(){
System.out.println("构造方法执行");
}
{
System.out.println("构造块执行");
}
}
public class Demo2 {
public static void main(String[] args) {
new Person();
}
}
输出结果:
构造块执行
构造方法执行
特点:构造块会优先于构造方法的执行,并且每次实例化对象都会调用构造块。
静态代码块
使用static关键字定义的代码块,可分为:在非主类中定义的,和在主类中定义
在非主类中进行代码块定义
package 代码块;
/*
静态块
*/
class Person2{
public Person2(){
System.out.println("构造方法执行");
}
static{
System.out.println("静态代码块执行");
}
{
System.out.println("构造块执行");
}
}
public class Demo3 {
public static void main(String[] args) {
new Person2();
new Person2();
new Person2();
}
}
输出结果:
静态代码块执行
构造块执行
构造方法执行
构造块执行
构造方法执行
构造块执行
构造方法执行
特点:静态代码块(优先于构造块)优先执行,并且只执行一次,主要是为类中的静态属性初始化
在主类中定义
package 代码块;
public class Demo4 {
static {
System.out.println("静态代码块");
}
public static void main(String[] args) {
System.out.println("主方法");
}
}
特点:静态代码块优先于主方法执行