zoukankan      html  css  js  c++  java
  • 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. 实例代码块可能使用的场景,如果有多个构造函数,且多个构造函数前面的代码片段相同,可以考虑把这些相同的片段写到实例代码块中;

  • 相关阅读:
    PostThreadMessage
    WaitForSingleObject函数的使用
    CodeWarrior环境下中断使用
    Activity跳转时生命周期跟踪
    win7 VS2012+openCV-2.4.11 配置
    CodeBlocks16.01+wxWidgets3.0.2
    MFC一个类访问另一个类成员对象的成员变量值
    无法打开包括文件:'atlrx.h'的解决办法
    STM32f103的数电采集电路的TIMER定时器的使用与时序控制的程序
    STM32f103的数电采集电路的双ADC的设计与使用
  • 原文地址:https://www.cnblogs.com/homle/p/14181852.html
Copyright © 2011-2022 走看看