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

java类的初始化和对象的创建顺序

学习java编程思想--类的初始化p146 类的加载顺序 * 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类 * 2类初始化先初始化static成员变量和static...---> * 2先初始化父类的static成员变量和static * 3再初始化本类的static成员变量和static * 类加载之后,对象创建开始 * 1先加载父类的非静态成员变量(静态成员变量在类初始化的时候已经加载...,非静态成员变量要随对象的创建而初始化) * 2先加载父类的构造函数 * 3再加载本类的非静态成员变量 * 4再加载本类的构造函数 * 总体: * -->表示顺序 * 父类-->子类 * 静态-->...非静态 * 类-->对象 * static随类的加载而加载 * 非static成员变量随对象的创建而加载 * 成员变量先于构造器加载 1 package com.test.java.classs;...成员变量和static 10 * 类加载之后,对象创建开始加载 11 * 1先加载父类的非静态成员变量(静态成员变量在类初始化的时候已经加载,非静态成员变量要随对象的创建而初始化) 12 * 2先加载父类的构造函数

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

    深入理解Java对象的创建过程:类的初始化与实例化

    参考链接: Java中的初始化程序块Initializer Block 摘要:    在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。...本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象的创建过程。 ...本文的姊妹篇《 JVM类加载机制概述:加载时机与加载过程》主要介绍了类的初始化时机和初始化过程,本文在此基础上,进一步阐述了一个Java对象创建的真实过程。 ...使用Clone方法创建对象    无论何时我们调用一个对象的clone方法,JVM都会帮我们创建一个新的、一样的对象,特别需要说明的是,用clone方法创建对象的过程中并不会调用任何构造函数。...正因为如此,Java才可以使得一个对象在初始化之前其所有的超类都被初始化完成,并保证创建一个完整的对象出来。

    2.7K10

    java从入门到精通四(面向对象上,类与对象的实现,代码块的执行顺序)

    下面我们介绍java的面向对象 面向对象 一 :面向对象的概念 二、类与对象 三、类与对象的编程实现 1.设计类 java中类的种类 内部类 抽象类 接口类 object类 2:对象的分析 3:类方法...三、类与对象的编程实现 1.设计类 java中类的种类 这里浅谈一下java类的种类 我们取典型的 内部类 1:成员内部类 所谓成员内部类,那么就说明了该类的级别等同于成员变量和方法,属于同一级别...其实根据这两个也可以分类方法,用static 修饰的叫做静态方法,没有的则叫非静态方法。 静态方法是可以直接访问而不是实例化自身访问。静态方法只需要初始化一次。...(6)构造方法可以有多个,但参数不一样,称为构造方法的重载 (7)在构造方法中调用另一个构造方法,使用this(…),该句代码必须在第一句。 (8)构造方法之间的调用,必须要有出口。...但是反过来,构造函数则不一定每个对象建立时都执行(多个构造函数情况下,建立对象时传入的参数不同则初始化使用对应的构造函数)。

    76420

    深入理解Java对象的创建过程:类的初始化与实例化

    摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。...本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象的创建过程。...使用Clone方法创建对象 无论何时我们调用一个对象的clone方法,JVM都会帮我们创建一个新的、一样的对象,特别需要说明的是,用clone方法创建对象的过程中并不会调用任何构造函数。...在Java对象初始化过程中,主要涉及三种执行对象初始化的结构,分别是 实例变量初始化、实例代码块初始化 以及 构造函数初始化。...正因为如此,Java才可以使得一个对象在初始化之前其所有的超类都被初始化完成,并保证创建一个完整的对象出来。

    3.1K51

    java 虚拟机内存划分,类加载过程以及对象的初始化

    涉及关键词: 虚拟机运行时内存 java内存划分 类加载顺序  类加载时机  类加载步骤  对象初始化顺序  构造代码块顺序 构造方法 顺序 内存区域   java内存图  堆 方法区 虚拟机栈 本地方法栈...加载/验证/准备/初始化/卸载 5个阶段顺序是确定的 解析不确定,可能在初始化阶段之后,为了支持java的运行时绑定 加载时机 1) new关键字实例化对象/读取或者配置类的静态字段/调用类的静态方法...实例变量将会在对象实例化时随着对象一起分配在java堆中 基本数据类型的初始化 ?...>()方法在多线程环境中能够被正确的加锁同步 从加载到对象初始化全过程 一加载时机 1) new关键字实例化对象/读取或者配置类的静态字段/调用类的静态方法 2) java.lang.reflect...;(特殊情况是上面提到的static变量用new 对象赋值)     初始化代码块总会早于构造方法的执行   9.继承结构中除非有特殊情况,否则顺序一般都是下面这样子的     先执行静态的初始化

    81330

    《Java从入门到失业》第四章:类和对象(4.3):一个完整的例子带你深入类和对象

    4.3.2源文件与类   接下来,我们开始编写这些类。第一个知识点来了,在Java中,如何编写多个类?...事实上,在Java中,关于源文件和类,有如下约定: 一个源文件中可以有一个或多个类 一个源文件中可以没有公有类 当一个源文件中有多个类的时候,最多只能有一个类被public修饰,即只能有一个公有类 当源文件中有公有类时...我们编写麻将类的时候,知道如何编写一个简单的构造器,用来构造一个对象,同时对对象的属性进行初始化。...如果我们编写了任何带参数的构造器,Java则不会再提供默认构造器。 一般的,我们都会在构造器中对类的属性进行初始化,但是有时候我们可能也不会初始化。...用这种方式有一个很大的好处,就是对于构造对象的公共代码可以只需要编写一次。这种方式在实际工作运用中会经常用到。这里需要注意的是,调用另一个构造器的代码必须放在第一句。

    99020

    JAVA进阶2 深入理解面向对象

    定义类  [修饰符] class 类名 {     零到多个构造器定义..    ...Java语言通过在一个类里保存另一个 Java语言是纯粹的面向对象的程序设计语言,这主要表现为Java完全支持面向对象的三种基本特征:继承、封装、多态。...根据this出现位置的不同,this作为对象的默认引用有两种情形:  构造器中引用该构造器正在初始化的对象在方法中引用调用该方法的对象 this关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或...3.11.4 继承与组合  初始化块 初始化块是Java类里可出现的第4种成员,一个类里可以有多个初始化块,相同类型的初始化块之间有顺序:前面定义的初始化块先执行,后面定义的初始化后执行  public...本文学习资源来自《疯狂Java讲义》。UML部分摘自一本书忘了名称,如有侵权请告知,我将立刻予以删除。

    49420

    【Java面试复习经典】传智播客Java就业班入学测试题及答案解析(2014年版)

    下列有关类、对象和实例的叙述,正确的是哪一项?(D) A. 类就是对象,对象就是类,实例是对象的另一个名称,三者没有差别 B....对象是类的抽象,类是对象的具体化,实例是对象的另一个名称 C. 类是对象的抽象,对象是类的具体化,实例是类的另一个名称 D....类是对象的抽象,对象是类的具体化,实例是对象的另一个名称 ------------------------------------------------------------------------...下列关于类的继承的描述,正确的有(BD) A. 一个类可以同时继承多个父类 B. 一个类可以具有多个子类 C....关于继承, 以下说法正确的是:(ACD) A.Java中只支持单继承, 一个类只能继承一个类, 但是可以有多个子类 B.一个类如果没有自己写的无参构造方法, 那么子类将无法继承

    1.8K20

    每个java初学者都应该搞懂的问题

    a和b的值其实是两个不同的内存地址的值,所以使用"=="操作符,结果会是 false。诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。...也就说,多次调用上面的构造器创建多个对象,他们的String类型属性s都指向同一个对象。 上面的结论还基于这样一个事实:对于字符串常量,如果内容相同,JAVA认为它们代表同一个String对象。...而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同。 至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多JAVA标准类库中的类都是不可变的。...在多线程的操作中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它声明为final,意图使得它“永远不变”。...其实那是徒劳的。 问题五:到底要怎么样初始化! 本问题讨论变量的初始化,所以先来看一下JAVA中有哪些种类的变量。 1. 类的属性,或者叫值域 2. 方法里的局部变量 3.

    38831

    Java必须理解的六大基础问题

    a和b的值其实是两个不同的内存地址的值,所以使用"=="操作符,结果会是false。诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。...也就说,多次调用上面的构造器创建多个对象,他们的String类型属性s都指向同一个对象。 上面的结论还基于这样一个事实:对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。...而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同。 至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。...在多线程的操作中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它声明为final,意图使得它“永远不变”。...其实那是徒劳的。 问题五:到底要怎么样初始化! 本问题讨论变量的初始化,所以先来看一下Java中有哪些种类的变量。 1. 类的属性,或者叫值域  2. 方法里的局部变量  3.

    26940

    Java 中文官方教程 2022 版(三)

    如果一个类有多个构造函数,它们必须具有不同的签名。Java 编译器根据参数的数量和类型区分构造函数。...记住,一个程序可以有多个引用指向同一个对象;在对象有资格进行垃圾收集之前,所有对对象的引用都必须被丢弃。 Java 运行时环境有一个垃圾收集器,定期释放不再被引用的对象使用的内存。...第四列表示所有类是否可以访问该成员。 访问级别以两种方式影响你。首先,当你使用来自其他来源的类时,例如 Java 平台中的类,访问级别确定你自己的类可以使用那些类的成员。...按照惯例,常量值的名称以大写字母拼写。如果名称由多个单词组成,则单词之间用下划线(_)分隔。...编译器将初始化块复制到每个构造函数中。

    34000

    Core Java 并发:理解并发概念

    来自:唐尤华 https://dzone.com/refcardz/core-java-concurrency 1. 简介 从诞生开始,Java 就支持线程、锁等关键的并发概念。...package 包含了一组类,它们用类似 volatile 的无锁方式支持单个值的原子复合操作。...可以通过以下方式安全地发布: 静态初始化器。只有一个线程可以初始化静态变量,因为类的初始化在获取排他锁条件下完成。...要成为不可变对象: 所有字段都标记 final 所有字段必须是可变或不可变的对象,注意不要改变对象作用域,否则构造后不能改变对象状态 this 引用在构造对象时不要泄露 类标记 final,子类无法重载改变类的行为...活跃度 8.1 死锁 有多个线程,每个线程都在等待另一个线程持有的资源,形成一个获取资源的线程循环,这时会发生死锁。

    82420

    Java IAQ:很少被回答的问题

    首先,考虑到如果来自两个不同类的对象可以相等的话。在你说“不!一定不会!”...其中的内容是这样的:头信息占用了两个字大小,一个字指向了对象所属的类,另一个字指向了实例的变量。即使Object没有实例变量,Java也会为其分配一字大小的空间。...你可以选择用“Fortran式”的方法来解决这个问题:用三个数组来存储x、y和z坐标,而不是用Point对象。你可以一个管理一批Point的类,而不必为单个点定义Point类。...你尽可以说Java中没有全局函数,但我认为这样说更精确:Java中全局作用域的函数是存在的,只不过它们必须被定义到一个类里,并且称之为“静态方法C.f”而不是“函数f”。 自动数据类型转换被废止了。...每个Java程序员都应该知道,当你这样做的时候: int[] a = {0, 1, 2}; int[] b = a; b[0] = 99; 那a[0]也会变成99,因为a和b都是同一个对象的指针(或引用

    62220

    Swift vs. Kotlin 漫谈系列之类与继承

    (通过其他次构造函数)委托给主构造函数,委托到同一个类的另一个构造函数用 this 关键字,你们应该也有这个限制吧。...伴生对象的成员可通过只使用类名作为限定符来调用,伴生对象的成员看起来像 Java 的静态成员,在运行时他们仍然是真实对象的实例成员。...: Person) { parent.children.add(this) } } 如果类有主构造函数的话,次构造函数必须直接或间接(通过其他次构造函数)委托给主构造函数,委托到同一个类的另一个构造函数用...伴生对象 Kotlin 中可以用 object 关键字直接定义一个对象,在类内部,我们可以用 companion 为类声明一个伴生对象。...伴生对象的成员可通过只使用类名作为限定符来调用,伴生对象的成员看起来像 Java 的静态成员,在运行时他们仍然是真实对象的实例成员。

    3.7K40

    【Python100天学习笔记】Day8 面向对象编程基础

    按照这种编程理念,程序中的数据和操作数据的函数是一个逻辑上的整体,我们称之为“对象”,而我们解决问题的方式就是创建出需要的对象并向对象发出各种各样的消息,多个对象的协同工作最终可以让我们构造出复杂的系统来解决现实中的问题...类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例。这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的东西。...def study(self, course_name): print('%s正在学习%s.' % (self.name, course_name)) # PEP 8要求标识符的名字用全小写多个单词用下划线连接...=0, second=0): """初始化方法 :param hour: 时 :param minute: 分 :param second...参考答案: from math import sqrt class Point(object): def __init__(self, x=0, y=0): """初始化方法

    27620

    译 - Spring 核心技术之 Spring 容器扩展点

    如果你想要在 Spring 容器完成容器初始化,配置和初始化 Bean 之后实现一些定制的逻辑,你可以通过插入一个或者多个定制的 BeanPostProcessor实现。...一些 SpringAOP 基础结构的类就是用通过 bean 后置处理器实现的,以便提供代理包装的逻辑。...实际值来自于另一个以标准化 Java Properties 格式的文件: jdbc.driverClassName=org.hsqldb.jdbcDriver jdbc.url=jdbc:hsqldb:...你可以通过设置配置对象的 systemPropertiesMode 属性定制这个行为,以下是它所支持的三个整数值: never(0):从不检查系统属性。...如果你有复杂的初始化代码,使用 Java 代码 好于冗长的 XML 配置,你可以创建自己的 FactoryBean,在这个类里写复杂的实例化,并且将定制的 FactoryBean 插入到容器中。

    61330

    Java基础11 对象引用

    aPerson存在于内存的栈(stack)中。 当我们用等号赋值时,是将右侧new在堆中创建对象的地址赋予给对象引用。...一个对象可以有多个引用 (一个人可以放多个风筝)。当程序通过某个引用修改对象时,通过其他引用也可以看到该修改。...Human Object有三个引用: 来自栈的aPerson和dummyPerson,以及另一个对象的数据成员president。而Club Object没有引用。...实际上,我们传递的参数,一个是基本类型的变量,另一个为对象的引用。 基本类型变量的值传递,意味着变量本身被复制,并传递给Java方法。Java方法对变量的修改不会影响到原变量。...引用的值传递,意味着对象的地址被复制,并传递给Java方法。Java方法根据该引用的访问将会影响对象。 在这里有另一个值得一提的情况: 我们在方法内部使用new创建对象,并将该对象的引用返回。

    78880

    《Effective Java 》系列一

    image.png 目录 第二章 创建和销毁对象 1 考虑用静态工厂方法替代构造器 2 遇到多个构造器参数时要考虑用构件器 3 用私有构造器或者枚举类型强化Singleton属性 4 通过私有构造器强化不可实例化的能力...,这个过程中没有调用构造函数 cone方法是另一个构造函数,必须确保他不会伤害到原始的对象, 并且正确地建立起被克隆对象中的约束关系 clone结构与指向可变对象的final域的正常用法是不兼容的 另一个实现对象拷贝的好办法是提供一个拷贝构造函数...Java没有提供函数指针,但是可以用对象引用实现同样的功能。调用对象上的方法通常是执行该对象上的某项操作。 我们可以定义这样一种对象,他的方法执行其他对象上的操作。...如果这种类使用他的实例作为锁对象,子类可能很容易在无意种妨碍基类的操作,反之亦然。 71 甚用延迟初始化 延迟初始化是延迟到需要域的值时才能将它初始化的这种行为。...当有多个线程时,延迟初始化是需要技巧的。如果多个线程共享一个延迟初始化的域,采用某种形式的同步是很重要的。 在大多数情况下,正常初始化要优先于延迟初始化。

    85040
    领券