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

Java加载的顺序

前言 那一年,呼延十又回想起被加载顺序支配的恐惧,笔试题上,好几个,几个方法,几个输出语句,让你按照顺序写出输出.我真的是有一句…. 但是呢,我们还是有了解一下的必要的,在编码过程中有许多的应用....正文 经常用来比较顺序的,无非就是静态代码块,普通代码块,静态方法和普通方法. 这里直接说一下结论: 先静态后普通最后构造方法,先父后子类....由于B有父,因此先加载A. 加载A的静态代码块,输出A-----static. 加载B的静态变量,调用了方法,输出B----- static func....加载A的构造方法,输出A----- constructor. 加载B的普通变量,调用了方法,输出B----- default. 加载B的构造方法,输出了B----- constructor....静态变量,静态代码块的加载顺序只和代码编写的顺序有关. 普通变量及构造方法,顺序一定是先普通变量,再构造方法的. 说好的应用呢 其实我目前对这个知识点应用最多的就是静态代码块.

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

    Java】父子类执行代码顺序

    TestMain { public static void main(String[] args) { Test1 test1 = new Test2(); } } 执行顺序...父静态代码块–>子类静态代码块–>父代码块–>父构造方法–>子类代码块–>子类构造方法 分析运行过程 在执行main方法之前,所有的静态已经初始化完毕(静态变量,静态块,常量)(静态里面的这三个没有优先顺序...,谁先定义就先执行谁),因为静态static是随着加载而加载。...此处博主认为可以联想到java堆栈内存模型的区别 静态存储-栈式存储-堆式存储 然后new 一个子类,会跳到子类构造方法,但先不执行构造方法里面的内容,因为还有父,子类构造方法体第一行,隐藏写着super...()方法,直接跳到父构造方法,执行构造方法之前,都会判断有没有属性没有初始化,如果有,先初始化属性,执行非静态变量和非静态块(没有优先顺序),在执行构造方法体。

    46810

    Java代码块执行顺序初探

    当父与子类都有静态代码块和构造函数的时候,执行顺序如下: 父静态代码块 > 子类静态代码块(Java虚拟机加载时,就会执行该块代码)。...其他 加载过程,不涉及构造方法 实例化过程,涉及构造方法 1、中所有属性的默认值(一举而成) 2、父静态属性初始化,静态块,静态方法的声明(按出现顺序执行) 3、子类静态属性初始化,静态块,静态方法的声明...(按出现顺序执行) 4 、调用父的构造方法, 首先父的非静态成员初始化,构造块,普通方法的声明(按出现顺序执行) 然后父构造方法 5、 调用子类的构造方法, 首先子类的非静态成员初始化,构造块,...普通方法的声明(按出现顺序执行) 然后子类构造方法 参考资料 深入了解Java程序执行顺序 Java中普通代码块,构造代码块,静态代码块区别及代码示例 Java:构造器,构造代码块,静态代码块的执行顺序...Java 继承 在继承中的问题,关于静态代码块,子类和父的静态代码块的执行情况 JAVA静态方法是否可以被继承?

    2.7K10

    Java加载顺序实验

    先准备3个逐层继承的User1,User2,User3 User2继承User1,User3继承User2 分别在中准备构造函数,普通初始化块,静态代码块 public class User1 {...User2的普通初始化块 User2的构造函数调用 User3的普通初始化块 User3的构造函数调用 静态代码块------------->普通初始化块--------------->构造函数 构造函数先执行...,再执行子类的原理: Java默认在无参的构造函数中会执行super(),则会递归执行构造函数,因而先执行执行子类 有参构造的情况: 先扩展代码: public class User1 {...,他们并没有自动调用父的有参构造。...但如果对代码稍作修改,在有参构造前添加super(anme),即可执行的有参构造了 public User3(String aname){ super(aname); this.name

    93540

    java初始化顺序

    java代码块 静态代码块:用staitc声明,jvm加载执行,仅执行一次 构造代码块:中直接用{}定义,每一次创建对象时执行执行顺序优先级:静态块,main(),构造块,构造方法。...静态代码块 它是随着的加载而执行,只执行一次,并优先于主函数。具体说,静态代码块是由调用的。...: 执行的静态代码块,并初始化父静态成员变量 执行子类的静态代码块,并初始化子类静态成员变量 执行的构造代码块,执行的构造函数,并初始化父普通成员变量 执行子类的构造代码块, 执行子类的构造函数...,并初始化子类普通成员变量 总结 java初始化执行顺序如下: 父静态变量 父静态初始化块 子类静态变量 子类静态化初始化块 父变量 父初始化块 父构造器 子类变量 子类初始化块 子类构造器...规律是 静态变量、静态代码块->普通变量、初始化块、构造器 因为静态代码块是跟关联的,所以只执行一次,并且优先级最高 参考资料 java初始化顺序

    84810

    Java基础系列5:Java代码的执行顺序

    对象一建立就调用构造代码块了,而且优于构造函数执行。这里强调一下,有对象创建,才会执行构造代码块,不能调用构造代码块的,而且构造代码块与构造函数的执行顺序是前者先于后者执行。...三、Java的初始化顺序 1、一个的情况: A: public class Test { public Test(){ System.out.println("Test构造函数"); }...,而构造函数和构造代码块则会在每次创建对象的都会执行一次 对于一个而言,按照如下顺序执行执行静态代码块 执行构造代码块 执行构造函数 对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是...1 A的静态代码块 2 B的静态代码块 3 A的构造代码块 4 A的构造函数 5 B的构造代码块 6 B的构造函数 当设计到继承时,代码的执行顺序如下: 1、执行的静态代码块,并初始化父的静态成员...首先基中各个变量按照字面顺序进行初始化,然后执行的构造函数的其余部分。 (5)对子类成员数据按照它们声明的顺序初始化,执行子类构造函数的其余部分。

    76430

    关于 Java finally 执行顺序 -- 修改版

    前言 之前写了一篇 关于 try-catch-finally 执行顺序 的文章,但是写的有些繁琐了,这里重新写一下。...如果执行那应该是怎样的执行过程呢? 首先这道题的运行结果是 2,可能跟你想的不一样吧,别急,下面我会慢慢解释的。...在学习 Java 基础的时候,老师就讲过,try-catch-finally 中的 finally 语句块一定会被执行,那么我们来 debug 一下: 初始状态: ?...此时运行到了 return ++x; 但还没执行该语句,目前 x 的值为 1. ?...简单翻译如下: 如果 try 语句里有 return,那么代码的行为如下: 如果有返回值,就把返回值保存到局部变量中 执行 jsr 指令跳到 finally 语句里执行 执行完 finally 语句后

    83340

    知识分享之Java——AOP中执行顺序

    知识分享之Java——AOP中执行顺序 背景 日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,...开发环境 系统:windows10 JDK:openjdk11 开发工具:IDEA 教育版 框架:SpringBoot 包管理:Gradle 内容 在AOP切片中我们知道其包含了很多个节点,那具体节点前后顺序是如何的呢...Around 2、@Before 3、@Method 4、@Around 5、@After 6、@AfterThrowing 7、@AfterReturning 如果我们编写了多个AOP时,在执行到第二步...(@Before)时下一步将会进入到第二个AOP的初始@Around第一步中,待第二个AOP执行完毕再跳回至第一个AOP中的第四步,而@Method指的是原方法,只会被调用一次。...具体顺序由@Order注解进行控制。 当进入第五步时出现异常时会进入第六步,当正常时会执行第七步。

    71320

    【答疑解惑】Java的加载顺序

    语音版: Java的初始化顺序这个问题经常出现在面试题中,这个面试题设计的知识有、对象、static关键字、初始化函数、的加载顺序,咱们一个一个来说。...描述了具有相同特性(数据元素)和行为(功能)的对象集合,也是一个数据类型。比如说动物,它有重量、大小的特征(数据元素),也有移动、吃的行为(功能)。...对象: 对象是具有状态、行为和标识的是上面的一个实例。...在Java中对象都必须通过new来产生。 static: static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。它是属于不属于对象。...的加载顺序: static块和对象:无论写在的前面还是后面都会先执行,多个静态块或者对象执行顺序与写的顺序一致,写在前面的先执行; 非静态块和对象:按照在中写的先后顺序执行; 初始化函数;

    798120

    Python - 执行顺序执行入口

    Python 是如何执行的?执行顺序是怎么样? 至上而下,逐行执行 #!...什么是 Python 脚本的执行入口 类比:进入一栋大楼肯定有个大门入口,赛车要进入赛道也一定有一个入口 所以,执行程序,也需要一个入口 一般称代码执行的入口叫做主函数(main 函数) 执行入口(主函数...假设运行的是 xiaoming.py,那么就会执行主函数 假设运行的是 xiaohong.py,即使 xiaohong 导入了 xiaoming,也不会执行 xiaoming.py 里面的主函数(main...函数) 是否一定需要执行入口(主函数) 不一定 假设没有主函数,那么运行 xiaoming.py 时,就会至上而下,逐行运行 xiaoming.py 的所有代码 执行入口的意义 将业务代码写在主函数上面...,主函数用来调用有业务代码,代码结构整洁 向 Java、C、Golang 看齐,他们都是要求一个程序必须有一个主执行入口才能正确运行

    1.8K40

    加载过程中几个重点执行顺序整理

    5,当静态区域下的静态代码块,执行完之后,整个的加载就完成了。...,分为两部分:先执行构造函数中的隐式三步,再执行构造函数中书写的代码     6.1、隐式三步:         1,执行super语句         2,对开辟空间下的所有非静态成员变量进行显式初始化...        3,执行构造代码块     6.2、在隐式三步执行完之后,执行构造函数中书写的代码 7,在整个构造函数执行完并弹栈后,把空间分配的地址赋值给一个引用对象【注意是最后把地址值赋给栈中引用...的卸载   由Java虚拟机自带的加载器所加载的,在虚拟机的生命周期中,始终不会被卸载。   前面介绍过,Java虚拟机自带的加载器包括根加载器、扩展加载器和系统加载器。   ...Java虚拟机本身会始终引用这些加载器,而这些加载器则会始终引用它们所加载的的Class对象,因此这些Class对象始终是可触及的。   由用户自定义的加载器加载的是可以被卸载的。

    1.4K20

    Java初始化顺序

    静态变量、静态初始化块,变量、初始化块初始化了顺序取决于它们在中出现的先后顺序。...(2)执行根基的static初始化,然后是下一个派生的static初始化,依此类推。这个顺序非常重要,因为派生的“static初始化”有可能要依赖基成员的正确初始化。...首先基中各个变量按照字面顺序进行初始化,然后执行的构造函数的其余部分。 (5)对子类成员数据按照它们声明的顺序初始化,执行子类构造函数的其余部分。...对象一建立就运行构造代码块了,而且优先于构造函数执行。这里要强调一下,有对象建立,才会运行构造代码块,不能调用构造代码块的,而且构造代码块与构造函数的执行顺序是前者先于后者执行。...: 执行的静态代码块,并初始化父静态成员变量 执行子类的静态代码块,并初始化子类静态成员变量 执行的构造代码块,执行的构造函数,并初始化父普通成员变量 执行子类的构造代码块, 执行子类的构造函数

    61930

    JS执行顺序

    javascript给人的直观感受是,从上往下执行,但实际上却不是这样的,先看个例子 1. console.log(test); 2. var test = "你好"; 3. console.log(...因为javascript执行时,在同一个作用域内是先编译再执行 编译的时候会编译 function 和 var 这两个关键词定义的变量,编译完成后从上往下执行并向变量赋值 所以执行第1行时, var test...已经执行过了,所以test不会报错,而test2就会报错 需要注意的是,对 var test 执行编译时,只是先定义了 test 这个变量,并不会把 "你好" 这个值赋给test,而是到第2行时才给test...赋值的,这就是为什么第1行的执行结果是 undefined 对于上面的例子,可以这样理解 //先编译 var 定义的变量 1. var test; //编译完成后,从上到下执行代码 2. console.log...//执行结果是"你好" function test() { console.log("你好"); } 模拟编译执行过程 //找到 function 定义的部分进行编译 //以函数名作为变量名,同时用函数赋值

    9.2K60
    领券