zoukankan      html  css  js  c++  java
  • Class和的初始化

    刚好看到了think in java的第14章 class和反射,看到个demo很有意思。

    具体讲:

    当".class"来创建对Class对象的引用时,不会自动地初始化该Class对象,

    同时包含了3个步骤

    1、加载

    2、链接

    3、初始化,如果该类具有超类,则对其进行初始化,执行静态初始化器和静态初始化块

    初始化被延迟到了对静态方法或者非常数静态域进行首次引用时才执行

    代码
    package jdk.reflect;

    import java.util.Random;

    /**
    *
    @author <a href="mailto:czy88840616@gmail.com">czy</a>
    *
    @since 2010-4-25 21:11:02
    */
    public class ClassInitialization {
    public static Random rand = new Random(47);

    public static void main(String[] args) throws ClassNotFoundException {
    //在使用.class创建对Class的引用的时候,不会自动初始化Class对象,所以不会触发static块
    Class initable = Initable.class;
    System.out.println(
    "after creating Initable ref");

    //调用了类的常数静态域,所以不会触发static块
    System.out.println(Initable.staticFinal);
    //调用了非常数静态域,会触发static块
    System.out.println(Initable.staticFinal2);
    //没有fianl
    System.out.println(Initable2.staticNonFinal);
    //class.forname会触发初始化
    Class initable3 = Class.forName("jdk.reflect.Initable3");

    System.out.println(
    "after creating initable3 ref");

    System.out.println(Initable3.staticNonFinal);
    }
    }

    class Initable {
    static final int staticFinal = 47;

    static final int staticFinal2= ClassInitialization.rand.nextInt(1000);

    static {
    System.out.println(
    "Initializing Initable");
    }
    }

    class Initable2 {
    static int staticNonFinal = 147;

    static {
    System.out.println(
    "Initializing Initable2");
    }
    }

    class Initable3 {
    static int staticNonFinal = 74;
    static {
    System.out.println(
    "Initializing Initable3");
    }
    }

    结果:

    after creating Initable ref
    47
    Initializing Initable
    258
    Initializing Initable2
    147
    Initializing Initable3
    after creating initable3 ref
    74
  • 相关阅读:
    let和const====均参考阮大神的es6入门
    面向对象封装
    记忆函数
    PHP面试题一[转]
    TDSSNIClient 初始化失败,出现错误 0x7e,状态代码 0x60。
    针对hasp加密狗服务器客户机ip不在同一个网段的解决方案
    sql 语句用isnull函数的用法
    如何用JS获取键盘上任意按键的值?兼容FireFox和IE js获取键盘ASCII码?js键盘事件全面控制
    adobe captivate 5.5 中文教程
    档案软件演示版下载安装说明书
  • 原文地址:https://www.cnblogs.com/xiziyin/p/1720801.html
Copyright © 2011-2022 走看看