zoukankan      html  css  js  c++  java
  • 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("
    ");
            }
        }
    }
  • 相关阅读:
    Server SQL Modes
    Java 8 New Features
    Spring Boot 企业级应用开发实战 刘伟东-2018年3月第一版
    一步一步学Spring Boot 2 微服务项目实战
    Springboot揭秘-快速构建微服务体系-王福强-2016年5月第一次印刷
    深圳宝安图书馆官网错误 HTTP Status 500
    Springboot
    linux 操作 mysql 指定端口登录 以及启动 停止
    PHP 基础
    Magento 总结
  • 原文地址:https://www.cnblogs.com/chichung/p/10209153.html
Copyright © 2011-2022 走看看