首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Class 对象在执行引擎中的初始化过程

一个 class 文件被加载到内存中需要经过 3 大步:装载、链接、初始化。...比如: public static int value = 100; 在准备阶段,JVM 会为 value 分配内存,并将其设置为 0。而真正的值 100 是在初始化阶段设置。...并且此阶段进行内存分配的仅包括类变量,而不包括实例变量(实例变量将会在对象实例化时随着对象一起分配在 Java 堆中)。...对于符号引用和直接引用,可以将其与生活中的微信聊天进行类比,在微信好友列表中,保存的是好友的名称或者别名(也就是符号引用),当我们真正给某个好友发消息时,计算机(JVM)会根据好友的名称找到对象计算机的...比如: public static int value = 100; 在准备阶段 value 被分配内存并设置为 0,在初始化阶段 value 就会被设置为 100。

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    笔记06 - Class对象在执行引擎中初始化的过程

    在内存中创建java.lang.Class对象 加载完class字节码文件之后,程序在运行过程中创建的类对象会使用这个Class类型的类对象进行创建。...隐式装载:在程序运行过程中,当碰到通过new等方式进行对象创建的时候,系统会隐式的调用ClassLoader去装载对象的class文件到内存中; 显式装载:在代码中主动调用Class.forName等方法也会触发...初始化类变量 在初始化过程中,只会初始化与类相关的静态赋值语句,也就是使用static关键字修饰的信息,而没有static修饰的语句会在实例化对象的时候才执行。...上面会触发类初始化的6种情况称为是主动引用,除了上述6种情况之外的引用方式称为被动引用,被动引用不会触发class的初始化。 最为典型的被动引用,在子类中调用父类的静态变量: ?...class初始化过程中对象的创建顺序 类对象的初始化顺序为: 静态变量/静态代码块 -> 普通代码块 -> 构造函数 1. 父类的静态变量和静态代码块 2. 子类的静态变量和静态代码块 3.

    84810

    【错误记录】Kotlin 代码运行时报错 ( 在 init 初始化块中调用还未初始化的成员属性 )

    文章目录 一、报错信息 二、问题分析 三、解决方案 该问题的本质就是 , 成员属性 在 init 初始化代码块中进行初始化 , 但是在初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常...角度分析 上述代码的执行顺序 , Kotlin 类 对象在实例化 时会执行一系列的 初始化操作 , 这些操作按照如下顺序执行 : 主构造函数 中属性赋值 类中的属性赋值 init 初始化块 中的代码执行...次构造函数 中的代码执行 首先 , 上述代码中没有主构造 函数 , 因此该项忽略 ; 然后 , 执行属性的赋值 , 代码中定义了 name 属性 , 但是没有进行赋值 ; var name: String...再后 , 执行 init 初始化块 , 其中先执行 nameFirstLetter 函数 , 在该函数中调用了 fun nameFirstLetter() = name[0] 中的 name 属性 ,...init 初始化代码块中进行初始化 , 但是在初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常 ; 三、解决方案 ---- 调换 初始化代码块 中的代码顺序 , 先给 name

    1.7K10

    赠书:Kotlin在Spring Boot中的应用

    市面上介绍使用Kotlin进行后端开发的图书和文章也比较少,袁康在大量实践的基础上,萌生了写一本书的想法,希望和更多的Java开发人员分享Kotlin在后端开发中的实践经验。...本文选自书中“Kotlin在常用中间件中的应用”一章,这一章主要介绍Kotlin在常用中间件中的应用,通过示例程序,将展示Kotlin集成Spring Boot、Redis、JPA、QueryDSL、MongoDB...读者可以掌握使用Kotlin操作常用中间件的技巧。 下面我们一起来学习了解下本章中“Kotlin集成Spring Boot”部分。...和用Java开发Spring Boot项目类似,Kotlin在main函数中启动应用,用GetMapping定义一个get接口,使用@RestController后就不用为每个方法添加@ResponseBody...本书专注于Kotlin在Spring Boot微服务开发中的实践,介绍了函数式编程思想、Kotlin的语法、Kotlin在常用中间件中的应用,以及其在微服务注册中心、微服务配置中心、微服务网关、Spring

    1.6K30

    Kotlin入门(22)适配器的简单优化

    问题出在Kotlin要求每个变量都要初始化上面,视图持有者ViewHolder作为一个内部类,目前虽然无法直接对控件对象赋值,但是从代码逻辑可以看出先从布局文件获取控件,然后才会调用各种设置方法。...lateinit,表示该属性为延迟初始化属性; 网格视图 在前面的列表视图一小节中,给出了Kotlin改写后的适配器类,通过关键字lateinit固然避免了麻烦的空校验,可是控件对象迟早要初始化的呀...翻到前面PlanetListAdapter的实现代码,认真观察发现控件对象的获取其实依赖于布局文件的视图对象view,既然如此,不妨把该视图对象作为ViewHolder的构造参数传过去,使得视图持有者在构造之时便能一块初始化内部控件...inflate(R.layout.item_grid_view, null)             holder = ViewHolder(view)             //视图持有者的内部控件对象已经在构造时一并初始化了...}     //ViewHolder中的属性在构造时初始化     inner class ViewHolder(val view: View) {         val ll_item: LinearLayout

    1.4K10

    如何让你的回调更具Kotlin风味

    很久就一直在使用Kotlin写项目,说实话到目前为止Kotlin用的是越来越顺手了(心里只能用美滋滋来形容了)。当然这次依然讲的是Kotlin,说下我这次需求开发中自己一些思考和实践。...那么今天一起来说说如何让你的回调更具kotlin风味: 1、Java中的回调实现 2、使用Kotlin来改造Java中的回调 3、进一步让你的回调更具Kotlin风味 4、Object对象表达式回调和DSL...Kotlin中回调,有不少的Kotlin的小伙伴在公众号留言向我吐槽过,感觉这样的写法是直接从Java中的翻译过来的一样,完全看不出Kotlin的优势在哪。...四、DSL配置回调基本步骤 在Kotlin的一个类中实现了DSL配置回调非常简单主要就三步: 1、定义一个回调的Builder类,并且在类中定义回调lamba表达式对象成员,最后再定义Builder类的成员函数...区别就在这里,所以在性能方面object对象表达式这种方式会更优一点,但是通过问过一些Kotlin社区的大佬们他们还是更倾向于DSL配置这种写法。

    1.6K20

    Kotlin中的协程及在Android中的应用

    Kotlin的一个协程可以理解为是运行在线程上的一个执行任务并且该任务可以在不同的线程间切换,一个线程可以同时运行多个协程。...IO 调度器中启动一个协程,但它们之间有一些区别: GlobalScope.launch(Dispatchers.IO){} 是在全局范围内启动一个协程,不受外部作用域的限制。...CoroutineScope(Dispatchers.IO).launch {} 是在指定的 CoroutineScope 中启动一个协程,通常情况下应该手动创建 CoroutineScope 对象,并确保在合适的时机取消该...最常见的,网络请求在IO线程,而页面更新在主线程。 Kotlin给我们提供了一个顶层函数withContext用于改变协程的上下文并执行一段代码。...协程启动以后,我们可以得到一个Job对象,通过Job对象我们可以检测协程的生命周期状态,并且可以操作协程(比如取消协程)。 我们可以大致把Job理解为协程本身。

    19010

    【Jetpack】DataBinding 架构组件 ④ ( 使用 @BindingAdapter 注解为布局组件绑定自定义逻辑 | 网络图片加载 | 本地图片加载 )

    ; 在 DataBinding 布局中 , 不只是机械性的显示内容 或者 拼接内容 , 还需要 进行更复杂的操作 ; 如 : 为 ImageView 组件绑定数据模型 , 传入一个 url 网络图片地址...Kotlin 中 , 定义 Java 静态方法 , 需要在 companion object 伴生对象 中 , 使用 @JvmStatic 修饰函数 ; 使用 @BindingAdapter("image...组件中 , 向 DataBinding 布局中设置 imageNetwork 数据模型的对象 ; // 设置布局文件 // 布局文件是 activity_main.xml...Kotlin 中 , 定义 Java 静态方法 , 需要在 companion object 伴生对象 中 , 使用 @JvmStatic 修饰函数 ; 使用 @BindingAdapter("image...Kotlin 中 , 定义 Java 静态方法 , 需要在 companion object 伴生对象 中 , 使用 @JvmStatic 修饰函数 ; 使用 @BindingAdapter(value

    1.1K40

    干货丨Kotlin在Spring Boot中的应用

    市面上介绍使用Kotlin进行后端开发的图书和文章也比较少,袁康在大量实践的基础上,萌生了写一本书的想法,希望和更多的Java开发人员分享Kotlin在后端开发中的实践经验。...本文选自书中“Kotlin在常用中间件中的应用”一章,这一章主要介绍Kotlin在常用中间件中的应用,通过示例程序,将展示Kotlin集成Spring Boot、Redis、JPA、QueryDSL、MongoDB...读者可以掌握使用Kotlin操作常用中间件的技巧。 下面我们一起来学习了解下本章中“Kotlin集成Spring Boot”部分。...和用Java开发Spring Boot项目类似,Kotlin在main函数中启动应用,用GetMapping定义一个get接口,使用@RestController后就不用为每个方法添加@ResponseBody...本书专注于Kotlin在Spring Boot微服务开发中的实践,介绍了函数式编程思想、Kotlin的语法、Kotlin在常用中间件中的应用,以及其在微服务注册中心、微服务配置中心、微服务网关、Spring

    1K20

    在 JavaScript 中如何克隆对象?

    name="王大冶"; console.log (name,name2); // 王大冶 前端小智 引用值 但是,如果我们对引用类型的值进行相同的操作,则我们对一个变量所做的任何更改也将反映在另一个变量中,...若要克隆对象,请使用 Object.assign() 方法,该方法会将一个或多个源对象的所有可枚举属性的值复制到目标对象,但是此方法仅对对象的一个浅拷贝。...此方法对简单对象有效,但如果对象属性是函数时无效。...我们创建了一个deepClone(object)函数,将想要克隆的对象作为参数传递给它。在函数内部,将创建一个局部变量克隆,这是一个空对象,其中将从起始对象克隆的每个属性都将添加到该对象中。...具体思路: 如果该属性不是对象,则将其简单地克隆并添加到新的克隆对象中。

    4.6K20

    Kotlin入门教程,快使用Kotlin吧

    > 2 val: 不可变常量,只能赋值一次(类似Java中的final) 常量与变量都可以没有初始化值,但是在引用前必须初始化 4、NULL检查机制 又名Kotlin的空安全,这是Kotlin独有的,在对于声明可空的参数...,而次构造函数在类体中申明; 主构造函数没有任何修饰符时可以省略constructor关键字,而次构造函数不能省略; 主构造函数不能包含任何的代码,而次构造函数可以; 主构造函数的参数可以在类体中的属性初始化代码和初始化块中使用...下面列举kotlin中常用的几个函数,用法可以参考:Kotlin中let、also、with、apply函数 1.1、let函数 let扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内...,在函数块内可以通过 this 指代该对象。...使用场景:apply一般用于一个对象实例初始化的时候,需要对对象中的属性进行赋值。

    1K10

    JAVA对象在JVM中内存分配

    如果你还不了解JVM内存模型的建议您先看下JVM内存模型 以一下代码为例,来分析下,java的实例对象在内存中的空间分配(JDK1.8)。...year = 2010; private int month = 10; private int day = 1; } 以Student类执行到main方法的最后一行时来分析java实例对象在内存中的分配情况...java对象在内存中的关系 图画的稍微有点问题,不过能说明对象在内存中的大致位置。 从图中我们可以看出,普通的java实例对象内存分配,主要在这三个区域:虚拟机栈、堆、方法区。...从变量的角度来分析 局部变量:存放在虚拟机栈中(具体应为[栈->栈帧->局部变量表]) 基本类型的值直接存在栈中。如age=10 如果是对象的实例,则只存储对象实例的引用。...如s=ref 实例变量:存放在堆中的对象实例中。如Student的实例变量 name=ref 静态变量:存放在方法区中的常量池中。如Student.class中的birthday=ref。

    1.8K120
    领券