Java代码块执行顺序问题

目录

一、知识基础

二、魔鬼实战 


一、知识基础

1.静态块:


  
  
  1. static{
  2. System.out. println( "This is a 静态块");
  3. }
  • 执行时间:类加载时只执行一次,时间上优先于主函数 ;
  • 存储区域:静态代码块中声明的变量或对象以及静态变量和对象的句柄存在于方法区中;

2.普通块:


  
  
  1. {
  2. System.out. println( "This is a 普通块");
  3. }
  • 执行时间:每次new对象时运行,会先执行普通块, 再执行构造方法;
  • 执行目的:普通块用于统一初始化所有该类对象,构造函数用于初始化当前对象;

3. 变量和赋值是拆分执行的:即先执行句柄信息声明变量,再执行赋值语句;看这个例子输出啥?


  
  
  1. public class StudentLink {
  2. {
  3. System. out.println( this.n);
  4. n= 100;
  5. System. out.println( this.n);
  6. }
  7. private int n = 99;
  8. public static void main(String[] args) {
  9. StudentLink test = new StudentLink();
  10. System. out.println(test.n);
  11. }
  12. }






输出:


  
  
  1. 0
  2. 100
  3. 99

二、魔鬼实战 

然后基于上面的规律,看懂这个例子:


  
  
  1. package com.myr.test;
  2. public class InitializeDemo {
  3. private static int k = 1;
  4. private static InitializeDemo t1 = new InitializeDemo( "t1");
  5. private static InitializeDemo t2 = new InitializeDemo( "t2");
  6. private static int i = print( "i");
  7. static{
  8. print( "静态块");
  9. n= 100;
  10. }
  11. private static int n = 99;
  12. {
  13. print( "枸造块");
  14. j= 100;
  15. }
  16. private int j = print( "j");
  17. public static int print(String str) { //静态方法只有调用的时候才执行
  18. System. out. println((k++) + ":"+ str + " i="+i+ " n="+ n);
  19. ++n;
  20. return ++i;
  21. }
  22. public InitializeDemo(String str) {
  23. System. out.println((k++) + ":"+ str+ " i="+i+ " n="+ n);
  24. ++i;
  25. ++n;
  26. }
  27. public static void main(String[] args) {
  28. InitializeDemo n = new InitializeDemo( "初始化");
  29. }
  30. }






输出:


  
  
  1. 1 :枸造块 i= 0 n= 0
  2. 2 :j i= 1 n= 1
  3. 3 :t1 i= 2 n= 2
  4. 4 :枸造块 i= 3 n= 3
  5. 5 :j i= 4 n= 4
  6. 6 :t2 i= 5 n= 5
  7. 7 :i i= 6 n= 6
  8. 8 :静态块 i= 7 n= 7
  9. 9 :枸造块 i= 8 n= 99
  10. 10 :j i= 9 n= 100
  11. 11 :初始化 i= 10 n= 101
发布了23 篇原创文章 · 获赞 0 · 访问量 2947

猜你喜欢

转载自blog.csdn.net/kris_lh123/article/details/101149257
今日推荐