• Java 静态代码块和实例代码块


    静态代码块的使用

    示例一:

    public class StaticTest03{
        static{
            System.out.println("A");
        }
        static{
            System.out.println("B");
        }
        public static void main(String[] args){
            System.out.println("hello");
        }
        static{
            System.out.println("C");
        }
    }

    执行结果:

    静态代码块优先于main方法执行,在类加载时执行,只执行一次(这一点不同于构造方法,不用在每次创建对象时执行);
    静态代码块自上而下的执行
    具体的业务中:
    可以把记录日志的代码写到静态代码块中,只要时类加载了,记录类加载的信息

     示例二:

    public class StaticTest04{
        static int i = 12;     //静态变量
        int j = 11;    //实例变量,在调用构造方法时才会开辟内存空间
        static{
            System.out.println("i = " + i);   //静态代码块可以直接访问静态变量,都是在类加载的时候执行;
            //System.out.println("j = " + j);  //错误:无法从静态上下文中引用非静态 变量 j
            System.out.println("x = " + x);    //错误: 非法前向引用
        }
        static int x = 21;
        public static void main(String[] args){
            System.out.println("main method");
        }
    }

    结论:

    1. 静态代码块可以直接访问静态变量,都是在类加载时执行;

    2. 静态代码不能直接访问实例变量,实例变量是在构造方法调用时开辟内存空间,和静态代码不在同一时期;

    3. 静态代码块执行遵循自上而下的顺序执行,在静态代码块下的变量,不能直接访问;

    实例代码块:

    示例:

    public class InstanceTest{
        public static void main(String[] args){
            new InstanceTest();
            new InstanceTest();
            new InstanceTest("str");
            new InstanceTest("str");
        }
        {
            System.out.println("实例代码块");       //实例代码块
        }
        public InstanceTest(){
            System.out.println("无参数构造函数");
        }
        
        public InstanceTest(String a){
            System.out.println("有参数构造函数");
        }
    }

    结论:

     1. 实例代码块的格式是大括号内加代码片段;

     2. 实例代码块在每次创建对象调用构造函数之前调用;

     3. 实例代码块可能使用的场景,如果有多个构造函数,且多个构造函数前面的代码片段相同,可以考虑把这些相同的片段写到实例代码块中;

  • 相关阅读:
    获得Coclor的色值(小技巧)
    如何禁止IIS缓存静态文件(png,js,html等)(转)
    风投最关心的问题
    Repeater一行显示数据库中多行表记录
    c# int Int32 Int64 的区别
    动车实名制了
    学习,积累,10000小时定律
    映射路由器到内网ip和端口
    《轮环》故事大纲整理
    .Net读取xlsx文件Excel2007
  • 原文地址:https://www.cnblogs.com/homle/p/14181852.html
Copyright © 2020-2023  润新知