java代码块

来源:互联网 发布:小强软件测试 编辑:程序博客网 时间:2024/04/26 15:07

代码块是指使用“{}”括起来的一段代码,根据位置不同,代码块可以分为四种:普通代码块、构造块、静态代码块、同步代码块


一.普通代码块

直接定义在方法中的代码块称为普通代码块

public class Test1{ public static void main(String args[]){  {  // 普通代码块   int x = 30 ; // 就属于一个局部变量   System.out.println("普通代码块 --> x = " + x) ;  }  int x = 100 ;  // 与局部变量名称相同  System.out.println("代码块之外 --> x = " + x) ; }};

运行结果:
普通代码块 --> x = 30
代码块之外 --> x = 100

二. 构造块

构造块将代码块直接定义在类中,如下:

class Test2{ { // 直接在类中编写代码块,称为构造块  System.out.println("1、构造块。") ; } public Test2(){ // 定义构造方法  System.out.println("2、构造方法。") ; }};public class Test2Main{ public static void main(String args[]){  new Test2() ;  // 实例化对象  new Test2() ;  // 实例化对象 }};

运行结果:
1、构造块。
2、构造方法。
1、构造块。
2、构造方法。

构造块优先于构造方法执行,且执行多次,只要一有实例化对象产生,就执行构造块中的内容。

三.静态代码块



直接使用static关键字声明就称为静态代码块.

class Test3{ { // 直接在类中编写代码块,称为构造块  System.out.println("1、构造块。") ; } static{ // 使用static,称为静态代码块  System.out.println("0、静态代码块") ; } public Test3(){ // 定义构造方法  System.out.println("2、构造方法。") ; }};public class Test3Main{ static{  // 在主方法所在的类中定义静态块  System.out.println("在主方法所在类中定义的代码块") ; } public static void main(String args[]){  new Test3() ;  // 实例化对象  new Test3() ;  // 实例化对象 }};



运行结果:
在主方法所在类中定义的代码块
0、静态代码块
1、构造块。
2、构造方法。
1、构造块。
2、构造方法。

静态块优先于主方法执行,如果在普通类中定义的静态块,优先于构造块执行,不管不多少个实例化对象产生,静态代码块只执行一次,静态代码块的主要功能就是为静态发生初始化。

四.同步代码块


同步代码块用于多线程中,解决线程同步问题

    /*          JAVA对于多线程的安全问题提供了专业的解决方式          就是同步代码块          synchronized(对象)//这个对象可以为任意对象     {         需要被同步的代码     }          对象如同锁,持有锁的线程可以在同步中执行     没持有锁的线程即使获取CPU的执行权,也进不去               同步的前提:     1,必须要有两个或者两个以上的线程     2,必须是多个线程使用同一个锁              必须保证同步中只能有一个线程在运行          好处:解决了多线程的安全问题          弊端:多个线程需要判断锁,较为消耗资源     */            class Tick implements Runnable      {          private int tick = 50;                Object obj = new Object();//申请一个对象                public void run()          {                    while(true)              {                  synchronized(obj)                  {                      if(tick > 0)                      {                          //try{Thread.sleep(40);}catch(Exception e){}                          System.out.println( Thread.currentThread().getName() + " sail --" + tick--);                      }                     }              }          }      }            class TickDemo      {          public static void main(String []args)          {              Tick t = new Tick();                    Thread t1 = new Thread(t);              Thread t2 = new Thread(t);              Thread t3 = new Thread(t);              Thread t4 = new Thread(t);                    t1.start();              t2.start();              t3.start();              t4.start();                }      }  


0 0
原创粉丝点击