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

重新初始化的类是否与初始类位于相同的内存位置?

重新初始化的类与初始类不会位于相同的内存位置。

当我们重新初始化一个类时,会创建一个新的对象实例,该实例会分配新的内存空间来存储对象的数据。这是因为重新初始化意味着我们要创建一个全新的对象,而不是对原始对象进行修改。

在面向对象编程中,类是对象的模板,用于创建对象的实例。每个对象实例都有自己的内存空间来存储其属性和方法。当我们重新初始化一个类时,会创建一个新的对象实例,该实例会在内存中分配新的空间。

重新初始化的类与初始类之间可能存在一些关联,比如继承关系或者引用关系。但是它们在内存中的位置是不同的,它们是两个独立的对象实例。

总结: 重新初始化的类与初始类不会位于相同的内存位置。重新初始化会创建一个新的对象实例,该实例会在内存中分配新的空间来存储对象的数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

类成员的初始化与赋值

首先,我们来普及一个尽人皆知的简单事实:如果一个变量在定义的时候未被初始化,那么它的值会根据具体的存储位置或被处理成0,或被处理成随机值。...因此,在学习编程的初期,教导者一般都会告诉我们要谨慎对待初始变量,而对于类来说,最保险的做法是在每一个构造函数中,对每一个成员数据进行恰如其分的初始化。 这么简单的事情,还需要注意什么吗? ?...以上两种做法显然都可以使得在类对象调用构造函数之后,保证 x 和 y 的值都是确定的数,但我们要牢记的是,初始化(initialization)和普通的赋值(assignment)语句是有区别的,他们的区别是...事实上,类的成员数据在构造函数中被赋值之前,已经被系统进行过一次 default 的初始化,因此赋值语句相当于抹掉了先前初始化的执行效果,使得系统做了一次无用功。...rr) // 使用初始化列表来赋初值 { } 另外要注意一点,类中的初始化次序是固定的:首先初始化基类(如果有的话),然后按照类中声明的次序初始化派生类的每一个成员。

1.1K20

Java的,与类的初始化顺序

,变量初始化,调用父类的构造器等操作收敛到方法中,收敛顺序(这里只讨论非静态变量和语句块)为:  1....父类变量初始化  2. 父类语句块  3. 父类构造函数  4. 子类变量初始化  5. 子类语句块  6....子类构造函数 所谓收敛到方法中的意思就是,将这些操作放入到中去执行 Java在编译之后会在字节码文件中生成方法,称之为类构造器,类构造器同实例构造器一样,也会将静态语句块,静态变量初始化,收敛到方法中...父类静态变量初始化  2. 父类静态语句块  3. 子类静态变量初始化  4. 子类静态语句块 方法是在类加载过程中执行的,而是在对象实例化执行的,所以一定比先执行。...父类静态变量初始化  2. 父类静态语句块  3. 子类静态变量初始化  4. 子类静态语句块  5. 父类变量初始化  6. 父类语句块  7. 父类构造函数  8.

31600
  • 构造方法、类的初始化块以及类字段的初始化顺序

    多构造函数 类的初始化块 ​ 如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?...,在实际开发中不要这样写代码,应该尽量保证一个字段只初始化一次! ​...如果使用上面定义的类,思考一下代码的输出结果: public static void main(String[] args) { InitializeBlockClass obj = new...} 规律(类字段的初始化顺序) 执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。 执行类的构造函数。...类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

    54420

    关于类的对象创建与初始化

    这里很多人会有疑惑,虚拟机保证子类对象的初始化操作之前,先完成父类的初始化动作,那么如果没有创建父类对象,父类的初始化动作操作的对象是谁?...粗糙点来说,我们父类的初始化动作指的就是,调用父类的 方法,以及实例代码块,完成对继承而来的父类成员属性的初始化过程。...而如果是 super 的话,将直接从父类开始查找匹配的字段属性,没有找到的话一样会递归向上继续查询。 完整的初始化过程 下面我们以两道面试题,加深一下对于对象的创建与初始化的相关细节理解。...最后调用 new 指令,于堆上分配内存,并开始实例初始化操作,调用自身构造器之前会首先调用一下父类 A 的构造器保证对 A 的初始化,于是打印了字符「2」,接着调用字节的构造器,打印字符「b」。...有关类对象的创建与初始化过程,这两道题目算是很好的检验了,其实这些初始化过程并不复杂,只需要你理解清楚各个步骤的初始化顺序即可。

    82250

    关于类的对象创建与初始化

    这里很多人会有疑惑,虚拟机保证子类对象的初始化操作之前,先完成父类的初始化动作,那么如果没有创建父类对象,父类的初始化动作操作的对象是谁?...粗糙点来说,我们父类的初始化动作指的就是,调用父类的 方法,以及实例代码块,完成对继承而来的父类成员属性的初始化过程。...而如果是 super 的话,将直接从父类开始查找匹配的字段属性,没有找到的话一样会递归向上继续查询。 完整的初始化过程 下面我们以两道面试题,加深一下对于对象的创建与初始化的相关细节理解。...最后调用 new 指令,于堆上分配内存,并开始实例初始化操作,调用自身构造器之前会首先调用一下父类 A 的构造器保证对 A 的初始化,于是打印了字符「2」,接着调用字节的构造器,打印字符「b」。...有关类对象的创建与初始化过程,这两道题目算是很好的检验了,其实这些初始化过程并不复杂,只需要你理解清楚各个步骤的初始化顺序即可。

    1.7K60

    【Kotlin】类的初始化 ④ ( lateinit 延迟初始化 | ::属性名称.isInitialized 检查属性是否初始化 | lazy 惰性初始化 )

    文章目录 一、lateinit 延迟初始化 ( ::属性名称.isInitialized 检查属性是否初始化 ) 二、lazy 惰性初始化 一、lateinit 延迟初始化 ( ::属性名称.isInitialized...检查属性是否初始化 ) ---- 在定义属性时 , 可以使用 lateinit 关键字 设置该属性的 延迟初始化 , 在 实例对象 创建时不进行初始化 , 在使用该属性之前对其进行初始化即可 ; 对于...lateinit 延迟初始化 的属性 , 在使用前可以执行 ::属性名称.isInitialized 检查 , 查看该属性是否进行了初始化操作 ; 代码示例 : class Hello{ lateinit...name 属性值为 Tom 二、lazy 惰性初始化 ---- lazy 惰性初始化 的 属性初始化操作 是 提前定义好的 , 在 调用之前 自动进行初始化操作 , 如果不调用 , 则不进行初始化...; lateinit 延迟初始化 的 属性初始化操作 , 需要 手动进行初始化 , 如果忘了初始化直接调用就会报错 ; 代码示例 : class Hello{ val name by lazy

    1.6K10

    JVM 的类初始化机制

    类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。...在这个阶段,JVM 会为类的成员变量分配内存空间并且赋予默认初始值,需要注意的是这个阶段不会执行任何代码,而只是根据变量类型决定初始值。...第一次是说只在第一次时才会有初始化过程,以后就不需要了,可以理解为每个类有且仅有一次初始化的机会。那么什么是主动调用呢?...final的与在编译期确定的常量表达式) 当调用 API 中的某些反射方法时 子类被初始化 被设定为 JVM 启动时的启动类(具有main方法的类) 本文后面会给出一个示例用于说明主动调用的被动调用区别...所有有了开始的: 接着对t2进行赋值,过程与t1相同 之后到了 static 的 i 与 n: 到现在为止,所有的static的成员变量已经赋值完成,接下来就到了 static

    42520

    子类继承父类,父类的初始化

    从外部看,似乎新类拥有与基础类相同的接口,而且可包含一些额外的方法和字段。但继承并非仅仅简单地复制基础类的接口了事。创建衍生类的一个对象时,它在其中包含了基础类的一个“子对象”。...这个子对象就象我们根据基础类本身创建了它的一个对象。从外部看,基础类的子对象已封装到衍生类的对象里了。...当然,基础类子对象应该正确地初始化,而且只有一种方法能保证这一点:在构建器中执行初始化,通过调用基础类构建器,后者有足够的能力和权限来执行对基础类的初始化。...个人总结: super关键字必须写在构造方法的方法体内的非注释代码的首行 子类进行初始化,必须调用父类的构造方法,如果父类的所有构造方法都用private修饰了的话,则无法继承,编译报错....衍生类构造方法调用父类的构造方法,如果父类是无参构造方法,那么编译器会为衍生类的构造方法首行加上super()。 编译器会强迫我们在衍生类构建器的主体中首先设置对基础类构建器的调用。

    1.9K30

    JVM 的类初始化机制

    在这个阶段,JVM 会为类的成员变量分配内存空间并且赋予默认初始值,需要注意的是这个阶段不会执行任何代码,而只是根据变量类型决定初始值。...第一次是说只在第一次时才会有初始化过程,以后就不需要了,可以理解为每个类有且仅有一次初始化的机会。那么什么是主动调用呢?...final的与在编译期确定的常量表达式) 当调用 API 中的某些反射方法时 子类被初始化 被设定为 JVM 启动时的启动类(具有main方法的类) 本文后面会给出一个示例用于说明主动调用的被动调用区别...所有有了开始的: 接着对t2进行赋值,过程与t1相同 之后到了 static 的 i 与 n: 到现在为止,所有的static的成员变量已经赋值完成,接下来就到了 static 代码块 至此,所有的 static...部分赋值完毕,接下来是非 static 的 j 所有属性都赋值完毕,最后是构造块与构造函数 经过上面这9步,Alibaba这个类的初始化过程就算完成了。

    33230

    Java类的加载方式、类的初始化、类的执行方式

    在我们使用一个类之前,JVM需要先将该类的字节码文件(.class文件)从磁盘、网络或其他来源加载到内存中,并对字节码进行解析生成对应的Class对象,这就是类加载器的功能。...我们可以利用类加载器,实现类的动态加载。 class的装载包括3个步骤:加载(loading),连接(link),初始化(initialize) ?...3由用户指定类加载器。如果需要在当前类路径以外寻找类,则只能采用第3种方式。即第3种方式加载的类与当前类分属不同的命名空间。...初始化:只有在使用时类才会被初始化。...1 初始化,也就是new时候会初始化类 2 访问类或者接口中的静态变量或者对其赋值 3 调用类的静态方法 4 反射(Class.forName("com.geminno");) 5 初始化它的子类

    1.2K00

    python类的初始化方法_python初始化列表

    我发现这是个很多人开始TensorFlow之旅普遍遇到的问题,而且是很多人尝试了网上很多方法都未解决的问题。...【遇到问题】 我是在Windows环境下,使用Anaconda3的python3.6.5环境,安装TensorFlow最简单的CPU版本(自己的搓平板电脑不支持GPU): 管理员身份运行Anaconda...create_module File “”, line 205, in _call_with_frames_removed ImportError: DLL load failed: 动态链接库(DLL)初始化例程失败...根本原因是自己的电脑不新,CPU尽管是Intel的,但不新也许太老不主流了,TensorFlow的新版本已不打算继续支持这种CPU了。...所以我尝试1.3版本的TensorFlow是OK的,但最新的1.8版本就报错了(1.4版本会有个warning)。

    1K20

    Java类的初始化和清理

    C++ 的解决方法看起来是最简单且最符合逻辑的,所以 Java 中使用了同样的方式:构造器名称与类名相同。在初始化过程中自动调用构造器方法是有意义的。...构造器保证了对象在你使用它之前进行了正确的初始化。 构造器方法名与类名相同,不需要符合首字母小写的编程风格。...的确,如果你发现代码中出现了大量的 static 方法,就该重新考虑自己的设计了。然而,static 的概念很实用,许多时候都要用到它。至于它是否真的"面向对象",就留给理论家去讨论吧。...所以对于与垃圾回收有关的任何行为来说(尤其是 finalize() 方法),它们也必须同内存及其回收有关。 但这是否意味着如果对象中包括其他对象,finalize() 方法就应该明确释放那些对象呢?...这种初始化方式简单直观,但有个限制:类 InitialValues 的每个对象都有相同的初值,有时这的确是我们需要的,但有时却需要更大的灵活性。

    92820

    Java 中类的初始化过程

    先来一张 JVM 中的内存模型 。 ? 在Java 虚拟机原理这本书中介绍了类会被初始化的 5 种情况 。...2 对类进行反射调用时 。 3 当其父类没有被初始化时,要初始化父类 。 4 当虚拟机启动时,用户需要指定一个包含 main 方法的类,虚拟机会优先初始化这个类。...的方法句柄,并且这个方法句柄所对应的类没有进行过初始化,则需要先触发其初始化。...,这里并没有触发 SuperClass 类的初始化 。...接口的初始化和类的初始化类似 ,区别在于 5 种情况的第三种 :子类的初始化过程中其父类必须先初始化 ,但接口初始化时不要求其父接口也进行初始化 ,只有在用到父接口时 ,才会去初始化 。

    67220

    Java学习笔记-全栈-Java基础-04-内存分析、类初始化与类加载

    (类信息(代码)、静态变量、静态方法、字符串常量等) 此时可以解释为什么字符串是不可变对象,当类加载的时候,字符串已经被放在method area中,对于相同字符串内容的对象(如String a="Hello...类解析之后,符号引用替换为直接引用,与String Pool引用值保持一致。 三、类加载过程 1....初始化(重要) 1.执行类构造器()方法的过程:由编译器自动收集类中的所有类变量和静态语句块 2.初始化一个类时,若其父类还没有进行初始化,则先对其父类发起初始化(继承树回溯初始化)...3.JVM会保证类构造器()在多线程中被正确加锁和同步 4.当访问一个Java类的静态域时,只有真正声明这个域的类才会被初始化 对于初始化的解释 初始化的过程非常重要,需要明确其中的每一步...类的被动引用 类的被动引用不会发生类的初始化 访问静态域时,真正声明这个域的类才会被初始化(通过子类引用父类的静态变量,不会导致子类初始化,参照上面代码) 通过数组定义类引用,不会导致类的初始化 引用常量不会触发初始化

    39720

    类成员初始化和赋值的内幕

    定义一个变量,就是在内存中为你定义的这个变量开辟一段内存空间,如果这个变量没有初始化,那么系统会随机给这个变量赋一个值,这个值我一般称它为"垃圾数"。...没有初始化的变量我认为它是没有意义的,是在浪费内存,就比如人刚出生的时候上帝需要给他赋予点东西,比如条件反射,比如哭,比如吮吸........这样人的意义得以体现。...对于类的成员来说,我们最好的做法就是在构造函数中对每一个类成员进行初始化。...在类对象调用构造函数的时候,以上两种方式都可以确保 a 和 b 的值是可以确定的,但是初始化和赋值两种方式是有区别的: 初始化发生的时机肯定比赋值早。...另外,类成员的初始化的顺序的固定的:如果有基类的话,先初始化基类,然后按照类中声明的顺序去初始化派生类中的类成员。

    40720

    AS3.0中类初始化的顺序

    我做了一个比较,java中有静态初始化块的概念(as3中是没有的),格式如下: static { //TODO…. } 关于java中类的初始化顺序,我想只要随便搜索一下,将有超过十万的结果出来 这里侧重点在...,类中的变量才被初始化 运行的结果显示如下: 父类--静态变量 子类--静态变量 父类--变量 父类--构造器 子类--变量 子类--构造器 ?...as3中类的初始化顺序与java基本上是相同(除了as3中没有静态块的概念外): (1)当类被加载时,该类的静态属性和方法会被初始化 (2)初始化成员变量 (3)调用构造器 而java中: ?...运行的结果: 父类--静态变量 父类--静态初始化块 子类--静态变量 子类--静态初始化块 父类--变量 父类--初始化块 父类--构造器 子类--变量 子类--初始化块 子类--构造器...如果去除”静态初始化块” 那么java与as3的类加载顺序表现上是一致的

    67940

    JVM | 类的初始化及新建过程

    本文知识点 类的状态变化 方法 实例对象的创建 类的状态变化 类的初始化主要经历加载->链接(验证,准备,解析)->初始化这些阶段,与JVM中相对应的状态如下图所示 instanceKlass.hpp...验证: 类或接口的二进制信息是否正确, 方法的访问控制, 变量是否初始化等....通常来说, 只要我们写代码时ide不报错, 基本上就没什么问题, 但有些会自己构造.class文件,交由jvm运行, 所以要验证各种正确性 准备: 在类的准备阶段,将为类静态变量分配内存空间,和赋初始值...解析: 如上所述, 把class文件中的静态变量池和jvm内部的运行池给关联起来, 把符号引用换成直接引用 源码位置如下图所示: clinit 方法 clinit方法是初始化的关键所在 这个方法, 我们在..., 它只能在类型初始化阶段被虚拟机隐式调用,全程只调用一次 如果有继承的话,会先初始化父类 其源码如下: 如上图所示,有多个步骤,每个步骤的注释也十分清晰, 强烈建议小伙伴们把源码拉下来阅读一下 其实父类优先于子类初始化

    69620
    领券