A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM赵磊 中级黑马   /  2013-3-13 23:10  /  3790 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 csatshell 于 2013-3-14 12:36 编辑

在学习过程中,javac对java源文件进行编译后都会生成对应的*.class文件,运行的java程序的时候,*.class会加载到虚拟机中,现在对*.class会加载到虚拟机感到模糊,哪位兄弟姐妹们了解*.class文件加载到JVM的原理机制,真心请教。

5 个回复

倒序浏览
   java虚拟机:java程序首先由编译器转换成标准字节代码,然后由虚拟机来解释执行,虚拟机把字节代码程序同各操作系统和硬件分开,使java程序可以独立于平台运行。
   javac.exe: java编译器,将源代码编译成字节代码,以.class 为扩展名存入java工作目录中。
   java.exe:  java解释器,执行字节代码程序
   javadoc.exe:  java 文档生成器,对java源文件和包以MML格式产生AP文档
   javap.exe:   java类分解器,对.class文件提供字节代码的反汇编并打印
   jdb.exe:  java调试器,如果编译器返回程序代码错误,可用它对程序进行调试
   javaprof.exe:  java剖析工具,提供其剖析信息
   appletviewer.exe:  java Applet浏览器
回复 使用道具 举报
Java 语言是一种具有动态性的解释型编程语言,当指定程序运行的时候, Java 虚拟机就将编译生成的 . class 文件按照需求和一定的规则加载进内存,并组织成为一个完整的 Java 应用程序。 Java 语言把每个单独的类 Class 和接口 Implements 编译成单独的一个 . class 文件,这些文件对于 Java 运行环境来说就是一个个可以动态加载的单元。正是因为 Java 的这种特性,我们可以在不重新编译其它代码的情况下,只编译需要修改的单元,并把修改文件编译后的 . class 文件放到 Java 的路径当中, 等到下次该 Java 虚拟机器重新激活时,这个逻辑上的 Java 应用程序就会因为加载了新修改的 .class 文件,自己的功能也做了更新,这就是 Java 的动态性。
下面用一个简单的例子让大家对 Java 的动态加载有一个基本的认识:
  1. class TestClassA{
  2. public void method(){
  3. System.out.println("Loading ClassA");
  4. }
  5. }
  6. public class ClassLoaderTest {
  7. public static void main(String args[]){
  8. TestClassA testClassA = new TestClassA();
  9. testClassA.method();
  10. }
  11. }
复制代码
编译后输入命令: java -verbose:class ClassLoaderTest ,执行文件。

参考csdn博客文章:http://blog.csdn.net/loocao/article/details/4324126
回复 使用道具 举报
授人以鱼不如授人以渔,google search “*.class文件加载到JVM的原理机制”会出来你要的结果 的
回复 使用道具 举报
Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中
回复 使用道具 举报
小路飞 来自手机 中级黑马 2013-3-14 01:09:08
地板
李松柏 发表于 2013-3-13 23:44
Java 语言是一种具有动态性的解释型编程语言,当指定程序运行的时候, Java 虚拟机就将编译生成的 . class  ...

原来如此,之前都没关心过类的加载过程,谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马