Java四种代码块

在java中用{}括起来的称为代码块,代码块可分为以下四种:

一.简介

   1.普通代码块:

      类中方法的方法体

   2.构造代码块:

      构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行

   3.静态代码块:

      用static{}包裹起来的代码片段,只会执行一次。静态代码块优先于构造块执行。

   4.同步代码块:

        使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数       据的不一致性。同步代码块需要写在方法中。

二.静态代码块和构造代码块的异同点

   相同点:都是JVM加载类后且在构造函数执行之前执行,在类中可定义多个,一般在代码块中对一些static变量进行赋值。

   不同点:静态代码块在非静态代码块之前执行。静态代码块只在第一次new时执行一次,之后不在执行。而非静态代码块每new一次就执行一次。

三.示例

    普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般语句的执行顺序由他们在代码中出现的次序决定,先出现先执行。

[java] view plain copy
  1. public class Test {  
  2.     public static void main(String[] args) {  
  3.         {  
  4.             int x = 3;  
  5.             System.out.println("普通代码块内的变量x=" + x);  
  6.         }  
  7.         int x = 1;  
  8.         System.out.println("主方法内的变量x=" + x);  
  9.         {  
  10.             int y = 7;  
  11.             System.out.println("普通代码块内的变量y=" + y);  
  12.         }  
  13.     }  
  14. }  
  15. /* 
  16.  * 运行结果   普通代码块内的变量x=3 
  17.  *            主方法内的变量x=1  
  18.  *            普通代码块内的变量y=7 
  19.  */  

 

       构造代码块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。如果存在多个构造代码块,执行顺序由他们在代码中出现的次序决定,先出现先执行。

[java] view plain copy
  1. public class Test1 {  
  2.     {  
  3.         System.out.println("第一构造块");  
  4.     }  
  5.   
  6.     public Test1(int i) {  
  7.         System.out.println("第" + i + "次调用" + "构造方法");  
  8.     }  
  9.   
  10.     {  
  11.         System.out.println("第二构造块");  
  12.     }  
  13.   
  14.     public static void main(String[] args) {  
  15.         new Test1(0);  
  16.         new Test1(1);  
  17.         new Test1(2);  
  18.   
  19.     }  
  20. }  
  21.   
  22. /* 
  23.  * 执行结果  第一构造块 
  24.  *           第二构造块 
  25.  *           第0次调用构造方法 
  26.  *           第一构造块 
  27.  *           第二构造块 
  28.  *           第1次调用构造方法 
  29.  *           第一构造块 
  30.  *           第二构造块 
  31.  *           第2次调用构造方法 
  32.  */  

        静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
      注意:1 .静态代码块不能存在于任何方法体内。

                2 .静态代码块不能直接访问实例变量和实例方法,需要通过类的实例对象来访问。

[java] view plain copy
  1. public class Test3 {  
  2.     public static String STATIC_FIELD = "静态属性";  
  3.   
  4.     // 静态块  
  5.     static {  
  6.         System.out.println(STATIC_FIELD);  
  7.         System.out.println("静态代码块1");  
  8.     }  
  9.   
  10.     public String field = "非静态属性";  
  11.   
  12.     // 非静态块  
  13.     {  
  14.         System.out.println(field);  
  15.         System.out.println("非静态代码块2");  
  16.     }  
  17.   
  18.     public InitOderTest() {  
  19.         System.out.println("无参构造函数");  
  20.     }  
  21.   
  22.     public static void main(String[] args) {  
  23.         InitOderTest test = new InitOderTest();  
  24.     }  
  25.   
  26.     // 非静态块  
  27.     {  
  28.         System.out.println(field);  
  29.         System.out.println("非静态代码块1");  
  30.     }  
  31.     // 静态块  
  32.     static {  
  33.         System.out.println(STATIC_FIELD);  
  34.         System.out.println("静态代码块2");  
  35.     }  
  36.       
  37. }  
  38. /* 
  39.  * 运行结果  静态属性 
  40.  *           静态代码块1 
  41.  *           静态属性 
  42.  *           静态代码块2 
  43.  *           非静态属性 
  44.  *           非静态代码块2 
  45.  *           非静态属性 
  46.  *           非静态代码块1 
  47.  *           无参构造函数 
  48.  */  
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36838191/article/details/79953208
上一篇Apache Commons工具集简介
下一篇java中的匿名内部类总结
想对作者说点什么? 我来说一句

验证图片代码块

2013年06月29日 2KB 下载

没有更多推荐了,返回首页

关闭
关闭