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

    Java类加载的顺序

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

    1.3K20

    Java代码块执行顺序初探

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

    2.7K10

    【Java】父子类执行代码顺序

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

    47110

    java类初始化顺序

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

    85710

    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

    94040

    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)对子类成员数据按照它们声明的顺序初始化,执行子类构造函数的其余部分。

    77230

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

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

    83440

    知识分享之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注解进行控制。 当进入第五步时出现异常时会进入第六步,当正常时会执行第七步。

    74720

    Python - 执行顺序、执行入口

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

    1.8K40

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

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

    806120

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

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

    1.5K20

    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
    领券