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
  • 相关阅读:
    Pytorch-实战之对Himmelblau函数的优化
    Pytorch-tensor的感知机,链式法则
    Pytorch-tensor的激活函数
    Pytorch-tensor的分割,属性统计
    Pytorch-tensor的转置,运算
    Pytorch-tensor维度的扩展,挤压,扩张
    Transformer代码细节
    Leetcode 1494
    格雷码
    两个正序数组的中位数
  • 原文地址:https://www.cnblogs.com/xiziyin/p/1720801.html
Copyright © 2011-2022 走看看