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

  • 相关阅读:
    1. 第一章: Python基础语法
    6. 第二章:C#委托和事件之.net framework3.5委托扩展
    5. 第二章:C#委托和事件之事件
    4. 第二章:C#委托和事件之委托
    3. 第一章:C#面向对象编程之继承和多态
    2. 第一章:C#面向对象编程之抽象和封装
    1. 序言
    Xamarin.Forms 调用腾讯地图
    全国行政区划数据大放送——包含邮政编码-电话区号-简拼-区划路径
    【记录】自定义服务器验证控件
  • 原文地址:https://www.cnblogs.com/homle/p/14181852.html
Copyright © 2011-2022 走看看