首页
学习
活动
专区
工具
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.

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

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

    53420

    关于对象创建初始化

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

    1.7K60

    关于对象创建初始化

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

    81850

    【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.5K10

    子类继承父,父初始化

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

    1.9K30

    JVM 初始化机制

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

    32630

    JVM 初始化机制

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

    42220

    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环境下,使用Anaconda3python3.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 中初始化过程

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

    66820

    Java初始化和清理

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

    91220

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

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

    39520

    JVM | 初始化及新建过程

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

    68820

    成员初始化和赋值内幕

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

    40520

    AS3.0中初始化顺序

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

    67740
    领券