黑马程序员技术交流社区

标题: java中的加载 [打印本页]

作者: 马姗姗    时间: 2014-2-9 23:50
标题: java中的加载
java中的加载指的是什么,它的工作原理是什么,是否指的是是把代码纯粹的存放在硬盘里,还是其他的处理,加载是在什么时候开始,在一个程序执行的整个过程中总共发生几次

作者: 郭运川    时间: 2014-2-10 08:55
Java类的加载是由类加载器来完成的。类加载器需要完成的最终功能是定义一个Java类, 即把Java字节代码转换成JVM中的java. lang. Class类的对象。一般情况下,java的加载只进行一次,而在加载过程中,类中的静态代码块和静态函数以及静态变量会随着类的加载而加载
作者: 嘿╰_╯往哪里跑    时间: 2014-2-10 08:59
是将代码植入内存中,不是硬盘。
原理:一个类代表要执行的代码,而数据则表示其相关状态。状态时常改变,而代码则不会。当我们将一个特定的状态与一个类相对应起来,也就意味着将一个类事例化。尽管相同的类对应的实例其状态千差万别,但其本质都对应着同一段代码。在JAVA中,一个类通常有着一个.class文件,但也有例外。在JAVA的运行时环境中(Java runtime),每一个类都有一个以第一类(first-class)的Java对象所表现出现的代码,其是java.lang.Class的实例。我们编译一个JAVA文件,编译器都会嵌入一个public, static, final修饰的类型为java.lang.Class,名称为class的域变量在其字节码文件中。一旦一个类被载入JVM中,同一个类就不会被再次载入了(切记,同一个类)。这里存在一个问题就是什么是“同一个类”?正如一个对象有一个具体的状态,即标识,一个对象始终和其代码(类)相关联。同理,载入JVM的类也有一个具体的标识。在JAVA中,一个类用其完全匹配类名(fully qualified class name)作为标识,这里指的完全匹配类名包括包名和类名。但在JVM中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识。因此,如果一个名为Pg的包中,有一个名为Cl的类,被类加载器KlassLoader的一个实例kl1加载,Cl的实例,即C1.class在JVM中表示为(Cl, Pg, kl1)。这意味着两个类加载器的实例(Cl, Pg, kl1) 和 (Cl, Pg, kl2)是不同的,被它们所加载的类也因此完全不同,互不兼容的。总的来说类是由类加载器加载到内存中,其他的你了解下就行了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2