突然有点不清晰,那么就把他整清晰
1.构造函数
这个不用多讲
2.普通代码块
普通代码块:在方法或语句中出现的{}就称为普通代码块。
普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”
说白了就是类中的方法的代码
3.构造代码快
//构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
相当于这个类的一些初始化动作
public class Text { { int x =1; System.out.println("xcqw 构造代码块1x"+x); } public Text() { System.out.println("xcqw text构造函数"); } { int x =2; System.out.println("xcqw 构造代码块2x"+x); } }
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Text text = new Text(); } }
xcqw 构造代码块1x1
xcqw 构造代码块2x2
xcqw text构造函数
4 静态代码块
//静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。 每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。//如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
//注意:1 静态代码块不能存在于任何方法体内。2 静态代码块 不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
public class Text { { int x =1; System.out.println("xcqw2 构造代码块1x"+x); } public Text() { System.out.println("xcqw2 text构造函数"); } static{ System.out.println("xcqw2 静态代码块"); } { int x =2; System.out.println("xcqw2 构造代码块2x"+x); } }
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Text text = new Text(); } }
结果: 静态代码块只会执行一次 不管 new几次对象都是一样
xcqw2 静态代码块
xcqw2 构造代码块1x1
xcqw2 构造代码块2x2
xcqw2 text构造函数
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("xcqw oncreate"); Text text = new Text(); Text text1 = new Text(); }
结果 : 可以看出静态代码块只执行了一次
// xcqw oncreate
// xcqw2 静态代码块
// xcqw2 构造代码块1x1
// xcqw2 构造代码块2x2
// xcqw2 text构造函数
// xcqw2 构造代码块1x1
// xcqw2 构造代码块2x2
// xcqw2 text构造函数
最终结果 :
静态代码块(一次) 先于 构造代码块(new几次就有几次) 先于 构造函数(new几次就有几次) 先于普通代码块(每次调用方法都会调用)