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

初始化_初始化电脑时出现问题_初始化磁盘选MBR还是GPT

说“上课”是什么意思?

首先将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中的目录层次结构:


娜娜项目网每日更新创业和副业项目

网址:nanaxm.cn 点击前往娜娜项目网

站 长 微 信: nanadh666


通过运行以下命令初始化,我们可以获得有关每个已加载类的信息。“ -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的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

初始化磁盘选MBR还是GPT_初始化电脑时出现问题_初始化


娜娜项目网每日更新创业和副业项目

网址:nanaxm.cn 点击前往娜娜项目网

站 长 微 信: nanadh666

声明: 本站内容转载于网络,版权归原作者所有,仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任,若侵犯到你的版权利益,请联系我们,会尽快删除处理!