在Java中,您首先要编写一个.java文件,然后在编译期间将其编译为.class文件。Java能够在运行时加载类。困惑是“负载”和“初始化”之间的区别是什么。Java类何时以及如何加载和初始化?通过使用下面的简单示例可以清楚地说明。

说“上课”是什么意思?

首先将C / C ++编译为本机代码,然后在编译后需要链接步骤。链接的作用是组合来自不同位置的源文件并形成可执行程序。Java不会这样做。将Java加载到JVM后,就完成了Java的类似链接步骤。

不同的JVM以不同的方式加载类,但是基本规则是仅在需要时才加载类。如果所加载的类还需要其他一些类,则它们也将被加载。加载过程是递归的。

什么时候以及如何加载Java类?

在Java中,加载策略由ClassLoader处理。以下示例显示了如何以及何时为简单程序加载类。

TestLoader.java

package compiler;public class TestLoader {

public static void main(String[] args) {

System.out.println("test");

}}

A. Java

package compiler;public class A {

public void method(){

System.out.println("inside of A");

}}

这是eclipse中的目录层次结构:

通过运行以下命令,我们可以获得有关每个已加载类的信息。“ -verbose:class”选项显示有关每个已加载类的信息。

java -verbose:class -classpath / home / ron / workspace / UltimateTest / bin /编译器.TestLoader

部分输出:

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载sun.misc.JavaSecurityProtectionDomainAccess。

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载的java.security.ProtectionDomain $ 2]

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载的java.security.ProtectionDomain $ Key]

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载的java.security.Principal]

[从文件:/ home / xiwang / workspace / UltimateTest / bin /中加载的compiler.TestLoader。]

测试

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载java.lang.Shutdown]

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载java.lang.Shutdown $ Lock]

现在,如果我们将TestLoader.java更改为:

包 编译器; 公共 类 TestLoader {

公共 静态 void main (String [ ] args ) {

系统。出来。println (“测试” );

A a = 新 A ();

一个。方法();

} }

并再次运行相同的命令,输出将是:

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载sun.misc.JavaSecurityProtectionDomainAccess。

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载的java.security.ProtectionDomain $ 2]

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载的java.security.ProtectionDomain $ Key]

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载的java.security.Principal]

[从文件:/ home / xiwang / workspace / UltimateTest / bin /中加载的compiler.TestLoader。]

测试[从文件:/ home / xiwang / workspace / UltimateTest / bin /加载的编译器.A]

在A里面

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载java.lang.Shutdown]

[从/usr/local/java/jdk1.6.0_34/jre/lib/rt.jar加载java.lang.Shutdown $ Lock]

我们可以看到以红色突出显示的差异。A.class仅在使用时加载。总而言之,将加载一个类:

· 当执行新的字节码时。例如,SomeClass f = new SomeClass();

· 当字节码静态引用一个类时。例如,System.out。

Java类何时以及如何初始化?

首次使用类中的符号时,将初始化该类。加载类时,不会对其进行初始化。

JVM将按照文本顺序初始化超类和字段,首先初始化静态字段,最后是字段,并在初始化之前为每个字段提供默认值。

Java类实例初始化是一个示例,显示了字段,静态字段和构造函数的执行顺序。

java类的加载与初始化_Java类何时以及如何加载和初始化?相关推荐

  1. java 类 加载 初始化_java类的加载与初始化

    https://blog.csdn.net/u013349237/article/details/71076617 1在命令行启动虚拟机jvm进行加载, 2用class.forname()方法进行动态 ...

  2. java的连接 初始化_java类从加载、连接到初始化过程详解

    Java代码在编译后会转化成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化成汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令. 类加载 ...

  3. java类的加载顺序题目_Java 类的加载顺序(题)

    引例 public class A extends B { public int a = 100; public A() { super(); System.out.println(a); a = 2 ...

  4. java 接口初始化_Java类的初始化 | 学步园

    类的初始化时机1.创建类的实例 2.访问类或接口的静态变量(static final常量除外,static final变量可以)3.调用类的静态方法 4.反射(Class.forName(packag ...

  5. java对类对象初始化_Java类和对象初始化

    Java类和对象初始化Tag内容描述: 1.解析 Java 类和对象的初始化过程 由一个单态模式引出的问题谈起 北京高伟达西南分软 Java EE 软件工程师 三年 Java EE 项目经验 行业方向 ...

  6. java 接口初始化_Java类和接口的初始化

    类的初始化由执行类中静态代码块的初始化和类中声明的静态域的初始化两部分组成 接口的初始化由接口中声明的域(常量)的初始化组成 初始化的时机 类或接口T在以下任意情况发生之前会立即进行初始化:T是一个类 ...

  7. java类的静态成员初始化_Java类的初始化顺序 (静态变量、静态初始化块、变量、初始......

    很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...

  8. java类的两个基本成分_Java类文件的基本结构

    欢迎来到""第二期.我们讨论了抽象计算机JVM.如果你对JVM还很陌生,你可以去看看.本期,我们稍稍窥探一下Java类文件的基本结构. 为旅行而生 Java类文件(.class文件 ...

  9. java类的修饰词有哪些_Java类与对象及访问控制修饰词解析

    Java 是个纯面向对象语言,不支持过程式编程,所有操作都是基于对象. 一.类 类是 Java 中的一种引用数据类型,引用数据类型值都存储在堆中.类是构造对象的模板,每个类对象都是类通过 new 语句 ...

  10. java 类及对象的课后作业_JAVA类和对象课后作业

    1.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询"你已经创建了多少个对象?" 代码: //显示类 //YiMingLai 2 ...

最新文章

  1. Microsoft.XMLHTTP 使用方式
  2. python爬虫贴吧_Python爬虫如何爬取贴吧内容
  3. mpu 配置内存空间_mpu内存保护单元功能及工作原理
  4. ubuntu 下安装qemu
  5. ECNUOJ 2143 端午节快乐
  6. [导入]C# Tips 2 右键单击listBox时弹出右键菜单并选中单击的行
  7. Mock数据,语法规范
  8. windows环境下Nginx配置
  9. 如何在基于 Intel 的 Mac 上使用机构恢复密钥?
  10. 牛逼!只需 3 步,Java 也能做图片识别!
  11. CFS 调度器数据结构篇
  12. Exchange 2007 474 问题解决方法
  13. 机器学习中非平衡数据的处理 —— smote算法
  14. 前端用JS + SVG 实现关系图谱 流程图
  15. ArcGIS各向异性计算
  16. 关于C语言的随机函数
  17. 【Python打卡2019】20190406之货币兑换
  18. 传输预编码matlab,基于MATLAB的MIMO系统预编码性能仿真.doc
  19. LINUX------给系统加磁盘
  20. Java/JavaScript有哪些图形图像处理的框架?

热门文章

  1. Glib实例学习(1)单链表
  2. IP路由原理.ppt
  3. wxPython利用pytesser模块实现图片文字识别
  4. 线性代数知识荟萃(2)——矩阵运算理论
  5. React的this.props.children
  6. 凸优化第五章对偶 5.9 广义不等式
  7. 软件构建--系统设计
  8. 前端开源项目周报0103
  9. HTTP API 设计指南(响应部分)
  10. QuickGUI编辑器系列---从文件中读取并解析