Java中的代码块

Java中的代码块

Java 中的代码块共有四种:

一、static代码块:

static代码块只能存在于类中不能存在于方法中,因为此代码块在类加载时第一个加载,优先于类中的各个static方法(包括main函数)及类的初始化,且只加载一次。

实例:

public class Test{

     public Test() {
          System.out.println("[构造器]");
     }
     static {
          System.out.println("[静态代码块]");
     }
     public static void main (String[] args)  {
          System.out.println("[main函数块]");
          Test test=new Test();
          Test test1=new Test();
     }

}
执行结果为:

[静态代码块]

[main函数块]

[构造器]

[构造器]

二、不带static修饰的类代码块

不带static修饰的类代码块成为普通类代码块,它在静态代码块及静态main函数代码块之后,在类调用初始化构造函数之前运行,每初始化一次实例就调用一次。

实例:

public class Test{

     public Test() {
          System.out.println("[构造器]");
     }

     {
          System.out.println("[构造代码块]");
     }

     static {
          System.out.println("[静态代码块]");
     }
     public static void main (String[] args) throws {
          System.out.println("[mian函数块]");
         <span style="font-family: Arial, Helvetica, sans-serif;"> Test test=new Test();</span><pre name="code" class="java">          Test test1=new Test();
}

 

执行结果为:

[静态代码块]

[main函数块]

[构造代码块]

[构造器]

[构造代码块]

[构造器]


三、普通方法中的代码块

普通方法中的代码块与其他的方法中的代码没有什么区别

public class Test{

     public Test() {
          System.out.println("[构造器]");
     }

     {
          System.out.println("[构造代码块]");
     }

     static {
          System.out.println("[静态代码块]");
     }

     public void ss(){
          System.out.println("[普通函数]");
          {
               System.out.println("[普通函数块]");
          }
     }
     public static void main (String[] args) {
          System.out.println("[mian函数块]");
<span style="white-space:pre">	</span>  Test test=new Test();
          Test test1=new Test();
          test.ss();
   
     }
}
输出结果:

[静态代码块]

[mian函数块]

[构造代码块]

[构造器]

[构造代码块]

[构造器]

[普通函数]

[普通函数块]

四、同步代码块(用于多线程中)

同步代码块是用于方法中,通过synchronized关键字对指定的代码块加锁,在一个线程运行此块代码的时候,其他线程不能运行此代码块,只有当该线程运行完此代码块后其它线程才可执行此代码块。

实例:

1、不带synchronized实例:

public static void main (String[] args) {
          new Thread(){
               public void run(){
                    while(true){
                         System.out.print("kkkkkkk");
                         System.out.println("[lock1开始]");
                    }
               }
          }.start();
          new Thread(){
               public void run(){
                    while(true){
                         System.out.print("++++++++++");
                         System.out.println("[lock2开始]");
                    }
               }
          }.start();
     }
在运行此代码时会有两个线程穿插运行:

kkkkkkk[lock1开始]
kkkkkkk[lock1开始]
kkkkkkk[lock1开始]
kkkkkkk[lock1开始]
kkkkkkk++++++++++[lock2开始]
++++++++++[lock2开始]
++++++++++[lock2开始]
++++++++++[lock2开始]

2、加上synchronized之后的实例:

public static void main (String[] args){
        
          final Object lock=new Object();

          new Thread(){
               public void run(){
                    while(true){
                         synchronized (lock) {
                              System.out.print("kkkkkkk");
                              System.out.println("[lock1开始]");
                         }
                    }
               }
          }.start();
          new Thread(){
               public void run(){
                    while(true){
                         synchronized (lock) {
                              System.out.print("++++++++++");
                              System.out.println("[lock2开始]");
                         }
                    }
               }
          }.start();

     }

运行此代码不会有两个线程穿插运行的情况

++++++++++[lock2开始]
++++++++++[lock2开始]
++++++++++[lock2开始]
kkkkkkk[lock1开始]
kkkkkkk[lock1开始]
kkkkkkk[lock1开始]
kkkkkkk[lock1开始]
kkkkkkk[lock1开始]
kkkkkkk[lock1开始]
++++++++++[lock2开始]
++++++++++[lock2开始]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值