图文详解Java中class的初始化顺序

class的装载

在讲class的初始化之前,我们来讲解下class的装载顺序。

以下摘自《Thinking in Java 4》

由于Java 中的一切东西都是对象,所以许多活动

变得更加简单,这个问题便是其中的一例。正如下一章会讲到的那样,每个对象的代码都存在于独立的文件中。除非真的需要代码,否则那个文件是不会载入的。通常,我们可认为除非那个类的一个对象构造完毕,否则代码不会真的载入。由于static 方法存在一些细微的歧义,所以也能认为“类代码在首次使用的时候载入”。

首次使用的地方也是static 初始化发生的地方。装载的时候,所有static 对象和static 代码块都会按照本来的顺序初始化(亦即它们在类定义代码里写入的顺序)。当然,static 数据只会初始化一次。

简要的说就是,在类有继承关系时,类加载器上溯造型,进行相关类的加载工作。

比如:

Class B extends Class A

当我们new B()时,类加载器自动加载A的代码

class的初始化顺序

通常是以下这样的初始化顺序:

(static对象和static代码块,依据他们的顺序进行初始化)>成员变量>构造函数

测试代码

public class ClassInit {

/**

* @Title: main

* @Description: 类初始化顺序测试

* @param: @param args

* @return: void

* @throws

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

new B();

}

}

class A {

static{

System.out.println("A的static代码块...");

}

public String s1 = prtString("A的成员变量...");

public static String s2 = prtString("A的static变量...");

public A(){

System.out.println("A的构造函数...");

}

public static String prtString(String str) {

System.out.println(str);

return null;

}

}

class B extends A{

public String ss1 = prtString("B的成员变量...");

public static String ss2 = prtString("B的static变量...");

public B(){

System.out.println("B的构造函数...");

}

private static A a = new A();

static{

System.out.println("B的static代码块...");

}

{

System.out.println("代码块...");

}

}

测试结果

A的static代码块...

A的static变量...

B的static变量...

A的成员变量...

A的构造函数...

B的static代码块...

A的成员变量...

A的构造函数...

B的成员变量...

代码块...

B的构造函数...

总结

以上就是Java中class的初始化顺序的全部内容,希望对大家使用Java能有所帮助。相关阅读:

浅析php中jsonp的跨域实例

JS+CSS实现可以凹陷显示选中单元格的方法

Win10文件检查器怎么检查修复系统的受损文件?

苹果Mac OS X 10.10 Yosemite系统十大使用技巧汇总

jquery实现界面无刷新加载登陆注册

IE6下position fixed失效的解决方法(亲测有效)

js运动应用实例解析

Win10进入倒计时 Win8必升Win10新系统的理由

详解Android中的Menu菜单键

win10不能设置宽带dns该怎么办?win10修改DNS的两种教程

WebApi+Bootstrap+KnockoutJs打造单页面程序

Windows7系统电脑出现蓝屏该怎么处理?

SQL Server 2016正式版安装配置过程图文详解

C#实现IP摄像头的方法

php中继承过来的类初始化顺序,java_图文详解Java中class的初始化顺序,class的装载 在讲class的初始化 - phpStudy...相关推荐

  1. java中parent结构_详解java中继承关系类加载顺序问题

    详解java中继承关系类加载顺序问题 实例代码: /** * Created by fei on 2017/5/31. */ public class SonClass extends ParentC ...

  2. java ftp ftpclient_详解JAVA中使用FTPClient工具类上传下载

    详解JAVA中使用FTPClient工具类上传下载 在Java程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件.本文简单介绍如何利用jakarta commons中的FTPClie ...

  3. java object数组转实体类_详解Java中String JSONObject JSONArray List实体类转换

    JSON使用阿里的fastJson为依赖包 gradle依赖管理如下: compile group: "com.alibaba", name: "fastjson&quo ...

  4. java中的静态变量的作用域_详解JAVA中static的作用

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  5. java中implement_详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,Java中不支持多重继承,但是可以用接口来实 ...

  6. java 代码块_详解java中的四种代码块

    在java中用{}括起来的称为代码块,代码块可分为以下四种: 一.简介 1.普通代码块: 类中方法的方法体 2.构造代码块: 构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行. ...

  7. 详解java中的final关键字

    概述 final 简介 final关键字可用于多个场景,且在不同场景具有不同的作用.首先,final是一个非访问修饰符,仅适用于变量,方法或类.下面是使用final的不同场景: 上面这张图可以概括成: ...

  8. java static 函数_详解java中的static关键字

    Java中的static关键字可以用于修饰变量.方法.代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解. 静态资 ...

  9. java io字符输出流_灵魂一击!详解Java中的IO输入输出流

    什么是流?流表示任何有能力产生数据的数据源对象或者是有能力接收数据的接收端对象,它屏蔽了实际的I/O设备中处理数据的细节. IO流是实现输入输出的基础,它可以很方便地实现数据的输入输出操作,即读写操作 ...

最新文章

  1. bootstrap基础学习四篇
  2. 爬虫开发10.scrapy框架之日志等级和请求传参
  3. Spark官方调优文档翻译(转载)
  4. 6.MySQL数据库与数据表操作
  5. jenkins——部署java项目(2)
  6. Spring 中获取 request 的几种方法,及其线程安全性分析
  7. 密码加密模块 bcrypt (详细,好理解,示例源码)
  8. 湖南城市学院计算机题库和答案,湖南城市学院 计算机选择题题库
  9. Spring Cloud Gateway替代zuul作为API网关(一)
  10. 怎么搭建三合一源码优惠券网站步骤教程
  11. 小技巧:机械键盘使用技巧
  12. 世界十大著名黑客 居然还有苹果创始人!
  13. hexo搭建个人博客之seo优化
  14. 建造者模式——画胖小人和瘦小人
  15. 公务员考试——申论1
  16. 西门子推出Teamcenter X,官方免费体验,基于云的PLM究竟香不香?
  17. 又双叒获奖了!鼎捷软件获评“中国数字化转型服务商百强”
  18. AD9850的FPGA实现--理论部分
  19. 关于如何在手机端运行本地的java项目
  20. Codeforces 706C

热门文章

  1. 2022安全员-C证考试题库及在线模拟考试
  2. IDEA打中文字出现繁体字,
  3. 华为ensp——企业网络的设计与实现【具体配置】
  4. 如何用虚拟打印机将其他文件(word,excel,ppt等)转换为PDF
  5. 酷冷至尊GP27-FUS 、GP27-FQS怎么样
  6. 屋瓦屋顶快速建模教程
  7. python(四个数字能生成多少个互不相同且无重复数字的三位数,实现命令行提示符)
  8. 解决win11系统激活office一直转圈白屏
  9. gif透明背景动画_如何制作ae遮罩动画——手机ae——GIF豆豆/视频豆豆
  10. JavaScript脚本编辑器