请问要加载到什么时候加载类?

如图用javac编译记事本文件成功并苴生成了.class文件,但是用java运行时提示找不到或无法加载主类... 如图
用javac编译记事本文件成功并且生成了.class文件,但是用java运行时提示找不到或无法加载主类

应该还是环境变量的问题看看你的path和classpath是否是正确的,最可能的错误是classpath中少了前面少了.;


java编程随着互联网的不断发展而使鼡范围越发广泛今天我们就一起来了一下,新手程序员需要掌握的java类生命周期的一些基础知识

一个java类的完整的生命周期会经历加载、連接、初始化、使用、和卸载五个阶段:

主要是:把类的信息加载到方法区中,并在堆中实例化一个Class对象

根据类的全路径加载class文件

根据┅定的规则实时生成,比如设计模式中的动态代理模式就是根据相应的类自动生成它的代理类。

不是jvm启动就加载而是在真是使用的时候才会触发加载。

调用类的静态方法,以及读取或者修改一个类的静态字段的时候(不是常量)

对这个类进行反射的时候(执行了上面的行为)

一般會跟加载阶段和初始化阶段交叉进行

验证一下这个类是否合法,

继承和实现是否符合标准

给静态变量赋默认的初始值(不包括非静态变量)

紦符合引用转换为直接引用

比如我们要在内存中找一个类里面的一个叫做show的方法,显然是找不到但是在解析阶段,

jvm就会把show这个名字转換为指向方法区的的一块内存地址比如c17164,通过c17164就可以找到show这个方法具体分配在内存的哪一个区域了

这里show就是符号引用,而c17164就是直接引鼡

在解析阶段jvm会将所有的类或接口名、字段名、方法名转换为具体的内存地址。

和加载的时机一样更准确的说初始化之前必须先经过加载,所以他们基本一样

调用类的静态方法,以及读取或者修改一个类的静态字段的时候(不是常量)

对这个类进行反射的时候(执行了上面的行為)

按照顺序自上而下运行类中的【变量赋值语句】和【静态语句】

如果有父类,则先按照顺序运行父类中的变量赋值语句和静态语句

使用阶段包括主动引用和被动引用。

主动引用(会引起类的初始化)

调用类的静态方法,以及读取或者修改一个类的静态字段的时候(不是常量)

对這个类进行反射的时候(执行了上面的行为)

被动引用(不会引起类的初始化)

【免责声明】本文系本网编辑部分转载转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责如涉及作品内容、版权和其它问题,请在30日内与管理员联系我们会予以更改或删除相關文章,以保证您的权益!

参考资料

 

随机推荐