• java中的代码块


    代码块分类:

    (1)局部代码块

    (2)构造代码块

    (3)静态代码块

    (4)同步代码块

    1.局部代码块

    局部代码块主要用来控制变量的生命周期。

    1 public class MyTest1 {
    2     public static void main(String[] args){
    3         {
    4             int a = 1;
    5             System.out.println(a);
    6         }
    7         System.out.println(a);  // 报错
    8     }
    9 }

    3-6行就是局部代码块,int a只在这个代码块里面有效。

    2.构造代码块

    构造代码块的作用是在创建对象时,需要实现其它附加东西时,需要用到的。

    (1)无构造代码块时的书写:

    public class MyTestDemo {
        public static void main(String[] args){
            MyTest1 m1 = new MyTest1();
            MyTest1 m2 = new MyTest1("小明",18);
        }
    }
    
    class MyTest1 {
        String name;
        int age;
    
        public MyTest1() {
            System.out.println("我是附加的功能");
        }
    
        public MyTest1(String name, int age) {
            this.name = name;
            this.age = age;
            System.out.println("我是附加的功能");
        }
    }

    这两个构造方法明显有重复的部分,使用构造代码块就可以把重复的部分抽取出来。

    (2)有构造代码块时的书写

    public class MyTestDemo {
        public static void main(String[] args){
            MyTest1 m1 = new MyTest1();
            MyTest1 m2 = new MyTest1("小明",18);
        }
    }
    
    class MyTest1 {
        String name;
        int age;
    
        {
            System.out.println("我是附加的功能");
        }
    
        public MyTest1() {}
    
        public MyTest1(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }

     注意:构造代码块优先于构造方法里面的代码执行!

    3.静态代码块

    随着类的加载而加载,只加载一次。一般应用于:加载类时需要做的一些初始化,比如加载驱动。

    public class MyTestDemo {
        public static void main(String[] args){
            MyTest1 m1 = new MyTest1();
            MyTest1 m2 = new MyTest1("小明",18);
        }
    }
    
    class MyTest1 {
        String name;
        int age;
    
        static {
            System.out.println("加载驱动");
        }
    
        public MyTest1() {
        }
    
        public MyTest1(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }

    4.同步代码块

    保证在多线程的情况下,先执行完一个方法的完整代码,才会切换线程。

    public class Demo4 {
        public static void main(String[] args) {
            Demo d = new Demo();
    
            new Thread() {
                @Override
                public void run(){
                    while (true){
                        d.print1();
                    }
                }
            }.start();
    
            new Thread() {
                @Override
                public void run(){
                    while (true){
                        d.print2();
                    }
                }
            }.start();
        }
    }
    
    class Demo{
        Object o = new Object();
        public void print1(){
            synchronized (o){                            // synchronized ()传入一个对象即可,相当于一把锁
                    System.out.print("我");
                    System.out.print("好");
                    System.out.print("饿");
                    System.out.print("啊");
                    System.out.print("
    ");
            }
        }
    
        public void print2(){
            synchronized (o){                             // synchronized () 传入的对象要和上面的一样
                    System.out.print("想");
                    System.out.print("吃");
                    System.out.print("汉");
                    System.out.print("堡");
                    System.out.print("包");
                    System.out.print("
    ");
            }
        }
    }
  • 相关阅读:
    关于Linux启动时挂载rootfs的几种方式【转】
    文件子系统-(rootfs)根文件系统挂载流程03【转】
    linux根文件系统挂载过程【转】
    linux的initrd机制和initramfs机制之根文件挂载流程:代码分析【转】
    ramdisk配置、解压、创建rootfs、启动简单分析【转】
    linux文件系统初始化过程(4)---加载initrd(中)【转】
    Linux内核学习:EXT4 文件系统在 Linux 内核系统中的读写过程【转】
    Flyway数据库版本管理工具的使用
    RabbitMQ消息发送与接收
    RabbitMQ简介以及安装
  • 原文地址:https://www.cnblogs.com/chichung/p/10209153.html
Copyright © 2020-2023  润新知