静态代码块
static{
//静态代码块
}
注意事项;
- 静态代码块在类加载的时候就执行了,并且只执行一次,次序优于主函数。
- 静态代码块中的变量也是局部变量
- 静态代码块的主要作用是给类初始化的
- 静态代码块之间也是顺序执行
public class Test1 {
static int a = 10;
static {
a++;
}
public static void main(String[] args) {
a *= 5;
System.out.println(a); // 5
}
static {
a = a/10;
}
}
实例代码块
{
//实例代码块
}
注意事项:
- 实例代码块在对象实例时执行,并且执行次序优于构造方法
- 实例代码块的主要作用是给对象初始化的
执行次序
对于一个类来说
静态代码块 > 实例代码块 > 构造方法
public class Test1 {
Test1(){
System.out.println("构造方法");
}
{
System.out.println("实例代码块");
}
static {
System.out.println("静态代码块");
}
public static void main(String[] args) {
Test1 a = new Test1();
}
}
对于有继承关系的类
父类静态代码块 > 子类静态代码块 > 父类实例代码块 > 父类构造方法 > 子类实例代码块 > 子类构造方法
class A{
A(){
System.out.println("父类构造方法");
}
{
System.out.println("父类实例代码块");
}
static{
System.out.println("父类静态代码");
}
}
class B extends A {
B(){
System.out.println("子类构造方法");
}
{
System.out.println("子类实例代码块");
}
static{
System.out.println("子类静态代码");
}
}
public class Test1 {
static {
System.out.println("主函数静态代码块");
}
public static void main(String[] args) {
B b = new B();
}
}