java ireport 如何创建javabean类_Java类何时以及如何加载和初始化?

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

329a6a4d5e25d39fe7e8148fbc725b21.png

说“上课”是什么意思?

首先将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的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

98d8d7c7ef50e1e0b0cb3c55d5ee2271.png
0b27290f7b672ea92596d39b8cbae013.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值