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

    java类初始化顺序

    java代码块 静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用{}定义,每一次创建对象时执行。 执行顺序优先级:静态块,main(),构造块,构造方法。...类调用时,先执行静态代码块,然后才执行主函数的 静态代码块其实就是给类初始化的,而构造代码块是给对象初始化的 静态代码块中的变量是局部变量,与普通函数中的局部变量性质没有区别 一个类中可以有多个静态代码块...,并初始化父类静态成员变量 执行子类的静态代码块,并初始化子类静态成员变量 执行父类的构造代码块,执行父类的构造函数,并初始化父类普通成员变量 执行子类的构造代码块, 执行子类的构造函数,并初始化子类普通成员变量...总结 java类初始化执行顺序如下: 父类静态变量 父类静态初始化块 子类静态变量 子类静态化初始化块 父类变量 父类初始化块 父类构造器 子类变量 子类初始化块 子类构造器 规律是 静态变量、静态代码块...->普通变量、初始化块、构造器 因为静态代码块是跟类关联的,所以只执行一次,并且优先级最高 参考资料 java类初始化顺序

    85710

    Java类初始化顺序 转

    -静态变量 父类--静态初始化块 子类--静态变量 子类--静态初始化块 子类main方法 父类--变量 父类--初始化块 父类--构造器 i=9, j=0 子类--变量 子类--初始化块 子类--构造器...静态变量、静态初始化块,变量、初始化块初始化了顺序取决于它们在类中出现的先后顺序。...(2)执行根基类的static初始化,然后是下一个派生类的static初始化,依此类推。这个顺序非常重要,因为派生类的“static初始化”有可能要依赖基类成员的正确初始化。...具体说,静态代码块是由类调用的。类调用时,先执行静态代码块,然后才执行主函数的。 静态代码块其实就是给类初始化的,而构造代码块是给对象初始化的。...,并初始化父类静态成员变量 执行子类的静态代码块,并初始化子类静态成员变量 执行父类的构造代码块,执行父类的构造函数,并初始化父类普通成员变量 执行子类的构造代码块, 执行子类的构造函数,并初始化子类普通成员变量

    62230

    Java 中类的初始化过程

    在Java 虚拟机原理这本书中介绍了类会被初始化的 5 种情况 。...2 对类进行反射调用时 。 3 当其父类没有被初始化时,要初始化父类 。 4 当虚拟机启动时,用户需要指定一个包含 main 方法的类,虚拟机会优先初始化这个类。...关于类中结构的加载顺序 ,首次创建对象时 ,类中的静态方法 / 静态字段首次被访问时 ,Java 解释器必须先查找类路径 ,以定位.class 文件;然后载入 .class (这将创建一个 Class...这里触发了另一个名为 “ [Lcom.sun.jojo.noinitclass.SuperClass ” 的类的初始化 ,他是虚拟机自动创建的直接继承于 java.lang.Object 的子类 ,创建动作由字节码指令...接口的初始化和类的初始化类似 ,区别在于 5 种情况的第三种 :子类的初始化过程中其父类必须先初始化 ,但接口初始化时不要求其父接口也进行初始化 ,只有在用到父接口时 ,才会去初始化 。

    67220

    Java类的初始化和清理

    尤其是很多类库的使用者不知道如何初始化类库组件,甚至当侠客们必须得初始化这些三方组件时(很多可怜的掉包侠根本不会管初始化问题) 1.2 清理 当使用一个元素做完事后就不会去关心这个元素,所以你很容易忘记清理它...这一章将讨论初始化和清理的问题,以及在 Java 中对它们的支持。 2 利用构造器保证初始化 你可能想为每个类创建一个 initialize() 方法,该方法名暗示着在使用类之前需要先调用它。...在 Java 中,类的设计者通过构造器保证每个对象的初始化。如果一个类有构造器,那么 Java 会在用户使用对象之前(即对象刚创建完成)自动调用对象的构造器方法,从而保证初始化。...C++ 的解决方法看起来是最简单且最符合逻辑的,所以 Java 中使用了同样的方式:构造器名称与类名相同。在初始化过程中自动调用构造器方法是有意义的。...显式的静态初始化 你可以将一组静态初始化动作放在类里面一个特殊的"静态子句"(有时叫做静态块)中。

    92720

    Java的,与类的初始化顺序

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

    31600

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

    1是静态加载、2、3是动态加载 异常(exception) 静态加载的时候如果在运行环境中找不到要初始化的类,抛出的是NoClassDefFoundError,它在JAVA的异常体系中是一个Error;...动态态加载的时候如果在运行环境中找不到要初始化的类,抛出的是ClassNotFoundException,它在JAVA的异常体系中是一个checked异常。...初始化:只有在使用时类才会被初始化。...1 初始化,也就是new时候会初始化类 2 访问类或者接口中的静态变量或者对其赋值 3 调用类的静态方法 4 反射(Class.forName("com.geminno");) 5 初始化它的子类...,父类也会初始化 6 虚拟机启动时被标明是启动类的类(java Test),直接用java.exe运行某个类; 程序执行结束的几种方式: 1 system.exit(); 2 正常执行完毕; 3

    1.2K00

    Java | 类、实例初始化 、方法重写规则

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 类、实例初始化 、方法重写规则...类的初始化过程: ①一个类要创建实例需要先加载并初始化该类 此时main方法所在的类要先加载和初始化。...②一个子类要初始化需要先初始化父类 ③一个类初始化就是执行()方法 ()方法由静态类变量显示赋值代码和静态代码块组成。...实例初始化过程: ①实例初始化就是执行()方法 ()方法可能重载有多个,有几个构造器就有几个()方法。...(先执行父类的()方法) 方法的重写Override: ①不可以被重写的方法: final方法 静态方法 private等子类中不可见的方法 ②对象的多态性: 子类如果重写了父类的方法

    17320

    java类加载和初始化_java静态变量什么时候初始化

    目录 一、类的加载与ClassLoader的理解 1、加载 2、链接 3、初始化 二、什么时候会发生类初始化 1、类的主动引用(一定会发生类的初始化) 2、类的被动调用(不会发生类的初始化) 三、类加载器的作用...2、链接 将Java类的二进制代码合并到JVM的运行状态之中的过程。...当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化。 虚拟机会保证一个类的()方法在多线程环境中被正确加锁和同步。...二、什么时候会发生类初始化 1、类的主动引用(一定会发生类的初始化) 当虚拟机启动,先初始化main方法所在的类; new一个类的对象; 调用类的静态成员(除了final常量)和静态方法; 使用java.lang.reflect...包的方法对类进行反射调用; 当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类; 2、类的被动调用(不会发生类的初始化) 当访问一个静态域时,只有真正声明这个域的类才会被初始化。

    50420

    深入理解Java类加载机制-初始化

    类加载的最后一个阶段是初始化阶段,初始化阶段从代码层面上看是真正执行源码的阶段。...初始化阶段主要是执行类构造方法,并不是由用户编写代码生成,而是编译器在编译源码过程中自动收集类中的类变量和static代码块生成,编译器收集的顺序由类变量和static代码块在源文件中定义的顺序决定。...static语句块中的只能访问到在他之前定义的类变量,定义在他之后的类变量,可以对其赋值,但是不能访问。 类的方法不需要显示调用父类的方法,虚拟机会保证在子类的之前,父类的方法已经执行完成。...因此在虚拟机中第一个被执行的肯定是java.lang.Object的方法。 接口的与类的方法也略为不同,接口的不会主动触发父接口的方法,除非该接口有使用到父接口的变量,父接口才会初始化。...同一个类加载器下,一个类只会被初始化一次。 本期类加载的初始化阶段就介绍到这,下期我们会讲解前面多次提及过的类加载器,我们下期再见!!!

    23710

    【Java 虚拟机原理】Java 类中的类加载初始化细节 ( 只使用类中的常量时加载类不会执行到 ‘初始化‘ 阶段 )

    文章目录 一、类加载初始化时机 二、常量加载示例 三、数组加载示例 一、类加载初始化时机 ---- 类加载时机 : Java 程序执行时 , 并不是一开始将所有的字节码文件都加载到内存中 , 而是用到时才进行加载...加载 -> 连接 ( 验证 , 准备 , 解析 ) 阶段 , 就可以完成常量池的初始化 , 即使没有执行 初始化 这个步骤 , 也不影响使用类中的常量值 ; 在 连接 的 准备 阶段 , 为 普通 的...静态变量 进行 默认赋值 , 但是针对 静态常量 , 直接进行 指定赋值 ; 但是 普通的 静态变量 的 指定赋值 , 是在 初始化 阶段 完成的 ; 类 在 " 初始化 " 阶段 , 调用 静态代码块..., 只会为其在内存分配空间 ; 创建数组时 , 触发的是 Student[] 数组类型的 类加载初始化 , 但是不会触发 Student 类的初始化操作 ; 如果调用数组中的元素时 , 就需要初始化 Student...// 加载类的 " 初始化 " 阶段才执行 静态代码块 // 如果只是进行了 " 连接 " , 没有进行 初始化 , 则不会调用该代码块 System.out.println

    3.6K20

    java小心机(5)| 浅谈类成员初始化顺序

    类成员什么时候会被初始化呢?一般来说:"类的代码在初次使用时才被加载",加载过程包括了初始化。 比如说new A()调用构造函数时,类中全部成员都会被初始化。...但对于static域(包括静态成员变量、静态代码块、静态方法),当某个static域被调用时,类中的的所有staict就会被初始化,按照定义顺序(即书写顺序)初始化,且只会初始化一次(N个实例共用)。...:静态域 -> 非静态域 -> 构造函数 以上面优先级并按所定义的顺序初始化(即书写顺序) 在有继承父类的情况下: class HelloA extends HelloB{ public HelloA...("父类:非静态块B"); } } //out: 父类:静态块B 子类:静态块A 父类:非静态块B 父类:构造函数B 子类:非静态块A 子类:构造函数A 从结果可以看出,初始化顺序为:父类静态域...->子类静态域->父类非静态域->父类构造函数->子类非静态域->子类构造函数 这里说明一点:这是初始化顺序,不等同于语句程序的执行过程。

    44810

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

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

    1K160
    领券