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

java初始化顺序

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

78910

Java初始化顺序 转

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

59530

Java初始化和清理

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

81720

Java初始化过程

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

64220

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

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

12920

Java的,与初始化顺序

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

29800

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静态变量什么时候初始化

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

42520

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

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

21910

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

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

3.6K20

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先加载父的构造函数

980160

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

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

41810
领券