导航:首页 > 编程语言 > initializejava

initializejava

发布时间:2025-01-12 03:54:08

java中类加载器是怎么工作的

JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)
链接又分为三个步骤,验证、准备、解析
1) 装载:查找并加载类的二进制数据;
2)链接:
验证:确保被加载类的正确性;
准备:为类的静态变量分配内存,并将其初始化为默认值;
解析:把类中的符号引用转换为直接引用;
3)初始化:为类的静态变量赋予正确的初始值;
那为什么我要有验证这一步骤呢?首先如果由编译器生成的class文件,它肯定是符合JVM字节码格式的,但是万一有高手自己写一个class文件,让JVM加载并运行,用于恶意用途,就不妙了,因此这个class文件要先过验证这一关,不符合的话不会让它继续执行的,也是为了安全考虑吧。
准备阶段和初始化阶段看似有点牟盾,其实是不牟盾的,如果类中有语句:private static int a = 10,它的执行过程是这样的,首先字节码文件被加载到内存后,先进行链接的验证这一步骤,验证通过后准备阶段,给a分配内存,因为变量a是static的,所以此时a等于int类型的默认初始值0,即a=0,然后到解析(后面在说),到初始化这一步骤时,才把a的真正的值10赋给a,此时

⑵ java 中的class.forName()是什么意思

Class.forName:返回与给定的字符串名称相关联类或接口的Class对象。

Class.forName是一个静态方法,同样可以用来加载类。该方法有两种形式:Class.forName(String name, boolean initialize, ClassLoader loader)和Class.forName(String className)。第一种形式的参数name表示的是类的全名;initialize表示是否初始化类;loader表示加载时使用的类加载器。第二种形式则相当于设置了参数initialize的值为true,loader的值为当前类的类加载器。

如下图所示,java类型的属性名称叫name,可以通过forName的方法获取到这个类的实例,从而获取到类里面的属性。

(2)initializejava扩展阅读:

注意:

在指定类给 class.forName() 方法后,如果找不到指定的类,会抛出ClassNotFoundException异常。Class 的静态 forName() 方法有两个版本,上面的代码是只指定类名称的版本,而另一个版本可以让你指定类名称、加载时是否运行静态区块、指定类加载器:

Static Class forName(String name, boolean initialize, ClassLoader loader)

默认在加载类的时候,如果类中有定义静态区块则会运行它。你可以使用 class.forName() 的第二个版本,将initialize设定为 false,这样在加载类时并不会立即运行静态区块,而会在使用类建立对象时才运行静态区块。为了印证,可以先设计一个测试类:

package cn.sunzn.demo;public class TestClass { static {
System.out.println("[运行静态区块]");
}

}

阅读全文

与initializejava相关的资料

热点内容
程序员8个算法题 浏览:400
php题库系统 浏览:216
王牌战争文明重启选什么服务器 浏览:649
简述对称加密法 浏览:652
c语言数学编程 浏览:983
F1B命令 浏览:629
cs命令快捷键 浏览:851
阿里云购买服务器如何用现金支付 浏览:684
pythontime等待 浏览:984
单片机串行通信方式 浏览:493
android表格demo 浏览:273
安卓怎么让相册不显示网页 浏览:309
php文件系统源码 浏览:722
易信java 浏览:496
北仑二级压缩螺杆机 浏览:58
加密路线免费入口 浏览:755
计算器程序员是干嘛的 浏览:364
数控编程里fo是啥键 浏览:670
javacdataxml 浏览:959
本机tcp服务器地址 浏览:440