首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )

    属性 字段 总结 II . 属性声明 III . 属性初始化器 IV . get / set 属性访问器 V . 属性幕后字段 field VI . 变量和常量的区别 VII ....属性 字段 总结 ---- 属性与字段总结 : ① 完整的属性声明格式如下 : var / val [: ] [= 初始化器>] [] [] ② 属性初始化器 : 就是为属性赋予一个初始值 ; ③ 属性访问器 : 即 属性的 getter 和 setter 方法 ; ④ 属性幕后字段 : 属性的实际值存储在 field 幕后字段中...属性与字段 : ① 类属性本质 : 类中定义的属性是一系列方法和代码块的集合 , 如 属性初始化器 , 属性访问器 , 属性声明等 , 这不是一个字段 ; ② 没有字段概念 : 在 Kotlin 语言中不能声明字段..., 只能声明属性 , 声明一个属性 , 附带声明了该属性的一系列方法和初始化代码等 ; ③ 幕后字段引入 : 在类中肯定是有一个字段用于存储属性的值 , 这个字段就是幕后字段 , 每个属性都有一个默认的幕后字段

    1.3K10

    CA1810:以内联方式初始化引用类型的静态字段

    访问任何静态成员或创建该类型的实例时,将触发静态初始化。 但是,如果声明一个类型的变量,但不使用它,则不会触发静态初始化;这在初始化会更改全局状态的情况下非常重要。...静态初始化可以保证在访问任何静态字段之前的某个时间发生,但不能在调用静态方法或实例构造函数之前发生。 请注意,在声明类型的变量后,可能会随时发生静态初始化。 静态构造函数检查会降低性能。...通常,静态构造函数仅用于初始化静态字段,在这种情况下,必须确保仅在首次访问静态字段之前发生静态初始化。 beforefieldinit 行为适用于这些类型和大多数其他类型。...仅当静态初始化影响全局状态并且满足以下任一条件时,它才是不适当的: 影响全局状态的成本非常昂贵,如果不使用该类型,则不需要这样做。 可以在不访问该类型的任何静态字段的情况下访问全局状态效果。...NoStaticConstructor extends [mscorlib]System.Object { } // end of class NoStaticConstructor 相关规则 CA2207:以内联方式初始化值类型的静态字段

    62900

    为什么应该尽可能避免在静态构造函数中初始化静态字段?

    Foo和Bar这两个类的静态字段都定义了一个名为_value的静态字段,它们均通过调用静态方法Initialize返回的值进行初始化。..._value并没有初始化;但是当我们调用Bar的Invoke方法时,Initialize方法会率先被调用来初始化静态字段。...从这个例子来说,由于整个应用并没有使用到Foo和Bar的静态字段,所以针对它们的初始化是没有必要的。所以我们说以内联方式对静态字段进行初始化的Foo具有更好的性能。...,所以我们自行定义的专门用来初始化静态字段的静态构造函数是完全没有必要的。...不但没有必要,还可能带来性能问题,应该改成以内联的形式对静态字段进行初始化。

    18810

    虚拟机的类加载机制1 类加载的时机

    并无强制规范,但对于初始化阶段,有且只有以下5种情况必须立即对类进行初始化 遇到new、getstatic(读取一个类的静态字段)、putstatic或invokestatic(设置一个类的静态字段)这...666 原因分析 本示例看似满足初始化时机的第一条:当要获取某一个类的静态字段的时候若该类尚未初始化,则对该类进行初始化 但由于这个静态成员变量属于父类,子类只是间接调用父类中的静态字段,因此子类调用...value属于间接引用,而父类调用value属于直接引用 对于静态字段,只有直接定义这个字段的类才会被初始化,通过其子类引用父类中定义的静态字段,只会触发父类的初始化!...输出结果 hello world 原因分析 本示例看似满足类初始化时机的第一个条件:获取一个类静态成员变量的时候若类尚未初始化则初始化类....但ConstClass类的静态字段被final修饰,是一个常量 被final修饰的常量在Java代码编译的过程中就会被放入它被引用的class文件的常量池中(这里是NotInitialization的常量池

    543100

    面试官:Spring Boot 的启动原理是什么?

    所以预热缓存的时机应该发生在 入口流量开启之前,比较合适的机会是在 Bean初始化的阶段。虽然 在Bean初始化时 Spring尚未完成启动,但是调用 Bean预热缓存也是可以的。...因为Spring尚未启动完成,包括 Spring Event尚未就绪!10.项目中在 init-method 方法中注册 MQ消费组是否合理?什么是合理的时机?init 开启 MQ 流量非常不合理。...因为Spring尚未启动完成,包括 Spring Event尚未就绪!11.Spring还未完全启动,在 PostConstruct 中调用 getBeanByAnnotation能否获得准确的结果?...虽然未启动完成,但是Spring执行该getBeanByAnnotation方法时,会率先检查 Bean定义,如果Bean定义对应的 Bean尚未初始化,则初始化这些Bean。...图片Autowired 何时装配Bean的依赖在Bean实例化之后,但初始化之前,AutowiredAnnotationBeanPostProcessor 会注入Autowired字段。

    7700

    Java 类加载过程

    在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口; 加载阶段和连接阶段(Linking)的部分内容(如一部分字节码文件格式验证动作)是交叉进行的,加载阶段尚未完成...这里所说的初始值“通常情况”下是数据类型的零值,假设一个类变量的定义为: public static int value=123; 那变量value在准备阶段过后的初始值为0而不是123.因为这时候尚未开始执行任何...至于“特殊情况”是指:public static final int value=123,即当类字段的字段属性是ConstantValue时,会在准备阶段初始化为指定的值,所以标注为final之后,value...解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。...初始化 类初始化阶段是类加载过程的最后一步,到了初始化阶段,才真正开始执行类中定义的java程序代码。

    67320

    JVM-类加载的时机

    有且仅有 5 种情况必须立即对类进行“初始化”:在遇到 new、putstatic、getstatic、invokestatic 字节码指令时,如果类尚未初始化,则需要先触发其初始化。...对类进行反射调用时,如果类还没有初始化,则需要先触发其初始化。初始化一个类时,如果其父类还没有初始化,则需要先初始化父类。...被动引用演示 Demo Demo1/** * 被动引用 Demo1: * 通过子类引用父类的静态字段,不会导致子类初始化。...}}对于静态字段,只有直接定义这个字段的类才会被初始化,因此通过其子类来引用父类中定义的静态字段,只会触发父类的初始化而不会触发子类的初始化。...当一个类在初始化时,要求其父类全部都已经初始化过了,但是一个接口在初始化时,并不要求其父接口全部都完成了初始化,当真正用到父接口的时候才会初始化。

    15810

    小米二面:JVM 触发类加载的条件有哪些?我说 new 的时候加载,然后他对我笑了笑......

    访问类的静态字段或静态方法 访问类的静态字段或静态方法时,也会触发类的加载和初始化。...System.out.println(MyClass.staticVar); // 触发 MyClass 的加载 MyClass.staticMethod(); 常量不会触发类加载:如果静态字段是...初始化类的子类时,先初始化父类 当初始化一个类时,如果它的父类尚未初始化,JVM 会先初始化父类。...Parent { static { System.out.println("子类初始化"); } } // 先输出"父类初始化",再输出"子类初始化" Child obj...通过子类引用父类的静态字段 如果子类只引用父类的静态字段,JVM 只会初始化父类,而不会初始化子类。

    8710

    Java反射原理

    被动引用不会导致初始化,但往往也是需要加载的,我们举一些例子: 使用类加载器的loadClass()方法,不做类的初始化工作 类型.class字面量 子类访问父类的静态字段(不会导致子类初始化,会导致父类初始化...仅当initialize参数为true且之前尚未初始化时,才初始化该类。 * 如果name表示原始类型或void,则将尝试在名称为name的未命名包中定位用户定义的类。...如果尚未初始化该类,则将其初始化。 * 请注意,此方法传播由null构造函数引发的任何异常,包括已检查的异常。使用此方法有效地绕过了编译时异常检查,否则该检查将由编译器执行。...* 如果构造函数的声明类是非静态上下文中的内部类,则构造函数的第一个参数必须是封闭实例 * 如果所需的访问和参数检查成功,并且实例化将继续,则构造函数的声明类(如果尚未初始化)将被初始化。...* 如果基础方法是静态的,则声明该方法的类在尚未初始化的情况下被初始化。 * 如果方法正常完成,它返回的值将返回给invoke的调用方;如果该值具有基元类型,则首先将其适当地包装在对象中。

    6.7K40

    ActiveReports 区域报表中的事件介绍

    使用此事件来初始化运行报表时需要的任何对象或者变量。还可以使用此事件设置子报表控件一个新的子报表实例。一旦该事件处理完成,不要动态的向报表动态地添加项目。...使用它像报表的字段集合添加自定义字段。自定义字段可以被添加到一个绑定的报表(一个使用数据控件连接并获取记录的报表)或者一个非绑定态报表(一个不依赖数据控件获取记录的报表)。...使用该事件来初始化运行一个非绑定报表时,每个页面需要的任何变量。 PageEnd 该事件在一页呈现之后触发。使用该事件来更新运行一个非绑定报表时,每个页面需要的任何变量。...绑定到报表的数据集在DataInitialize事件触发后填充字段集合。(在一个非绑定报表中,此时字段集合尚未设置。) 2. 触发FetchData事件,让用户有机会修改字段集合。 3....同时下一个页面的PageStart,其他的Header事件以及有可能存在的FetchData事件在该页的明细区域尚未呈现之前,提前触发。

    1.3K70

    09-类加载的过程

    加载阶段与连接阶段的部分内容交叉进行,加载阶段尚未完成,连接阶段可能已经开始了。但这两个阶段的开始时间仍然保持着固定的先后顺序。...是数据类型的零值(0, null…),假设一个类变量的定义为: public static int value = 123; 那么变量 value 在准备阶段过后的初始值为 0 而不是 123,因为这时候尚未开始执行任何...存在“特殊情况”:如果类字段的字段属性表中存在 ConstantValue 属性,那么在准备阶段 value 就会被初始化为 ConstantValue 属性所指定的值,假设上面类变量 value 的定义变为...初始化 类初始化阶段是类加载过程的最后一步,是执行类构造器 () 方法的过程。...如果多个线程同时去初始化一个类,那么只会有一个线程去执行这个类的 () 方法。

    10210

    Java虚拟机类加载机制

    ok~解释一下:对于静态字段,只有直接定义这个字段的类才会被初始化,因此通过其子类来引用父类中定义的静态字段,只会触发父类的初始化而不会触发子类的初始化。 上面就牵涉到了虚拟机类加载机制。...在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口; 加载阶段和连接阶段(Linking)的部分内容(如一部分字节码文件格式验证动作)是交叉进行的,加载阶段尚未完成...,这里所说的初始值“通常情况”下是数据类型的零值,假设一个类变量的定义为: public static int value=123; 那变量value在准备阶段过后的初始值为0而不是123.因为这时候尚未开始执行任何...至于“特殊情况”是指:public static final int value=123,即当类字段的字段属性是ConstantValue时,会在准备阶段初始化为指定的值,所以标注为final之后,value...开篇已经举了一个范例:通过子类引用付了的静态字段,不会导致子类初始化。 这里再举两个例子。 1.

    37420
    领券