IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java-程序初始化的顺序 -> 正文阅读

[Java知识库]Java-程序初始化的顺序

在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有的类成员完成了初始化之后,才会调用对象所在类的构造函数创建对象。

Java程序的初始化一般遵循三个原则(优先级依次递减):

1,静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化很多次。

2,父类优先于子类进行初始化。

3,按照成员变量的定义顺序进行初始化。即使变量定义散布于方法定义之中,它们依然在任何方法被调用之前先初始化。

Java程序初始化工作可以在许多不同的代码块中完成(例如静态代码块,构造函数等),它们的执行顺序如下:

父类静态变量

父类静态代码块

子类静态变量

子类静态代码块

父类非静态变量

父类非静态代码块

父类构造函数

子类非静态变量

子类非静态代码块

子类构造函数。

下面给出一个不同模块初始化时执行顺序的一个例子。

class Base{

? ?????????static {

????????????????System.out.println("Base static block");

?????????????????????}

???????????public Base(){

? ? ? ? ? ?System.out.println("Base constructor");

? ? ? ? ? ?}

?public class Derived extends Base{

? ? ? ? ? ?static{

? ? ? ? ? System.out.println("Drevied static block");

? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? {

? ? ? ? ? System.out.println("Drevied? block");

? ? ? ? ? ?}

?public? Derived(){

? ? ? ? ??System.out.println("Drevied? constructor");

? ? ? ? ? }

public static void main(String args[]){

? ? ? ? ? ? ? ? new Derived();

? ? ??????}

? ? ? ? ? }

先自己利用上面给出的执行顺序进行判断

程序的运行结果为

Base static block

Derived static block

Base block

Base constructor

Derived block

Derived constructor


怎么样,运行结果是否与你的结果一致呢?

最后,我们再来看一道面试真题:

下列代码运行结果是什么?

? class B?extends Object{

? ? ? ? ? static{

? ? ? ? ? System.out.println("Load B1");

? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ?public? B(){

? ? ? ? ??System.out.println("Create B");

? ? ? ? ? }

? ? ? ? ? ?static{

? ? ? ? ? System.out.println("Load B2");

? ? ? ? ? ?}

? ? ? ? ? ?}

class A?extends B{

? ? ? ? ? static{

? ? ? ? ? System.out.println("Load A");

? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ?public? A(){

? ? ? ? ??System.out.println("Create A");

? ? ? ? ? }

? ? ? ? ??}

? ? ? ? ? public class Testclass{

? ? ? ? ? public static void main(String[ ] args){

? ? ? ? ? ? ? ? ? ? ? ? new A();

? ? ? ? ? }

? ? ? ? ? }

运行结果是Load B1? ? ? LoadB2? ? ? Load A? ? ?Create B? ? ?Create A

在面试中出现的执行顺序的问题,无非也就是把上面的代码再换几个形式,但,万变不离其宗,只要掌握它的执行顺序的规律,所有问题就都可以迎刃而解了!!!

若有错误,请尽情批评指正!!!

若对您有帮助,请给予三连支持!!!!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 01:50:01  更:2022-01-14 01:50:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:02:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码