zoukankan      html  css  js  c++  java
  • 对Java的加载与执行的理解(理论比较重要)

    java程序从编写到最终运行经历了哪些过程?
     
        java程序非常重要的两个阶段:
            编译阶段
            运行阶段
     
        注意:Java程序员直接编写Java代码(普通文本)是无法执行被JVM识别的。Java程序员编写的Java代码这种普通文本必须经过一个编译,将这个“普通文本代码”变成“字节码”,JVM能够识别“字节码”。
        Java代码这种普通文本变成字节码的过程,被称为:编译。
     
        Java代码这种普通文本被称为:java源代码。(你编写的代码是源代码)
     
     
        源代码不能直接执行,需要先进行编译,生成源代码对应的“字节码”。
        JVM可以识别的是字节码。
     
        编译阶段和运行阶段可以在不同的操作系统上完成吗?
            在windows上编译
            编译之后生成了“字节码”。
            把“字节码”放到Linux上运行。
            完全可以,因为Java是跨平台的。
            可以做到一次编写到处运行。
     
        Java源代码一旦编译之后,源代码可以删除吗?只留下字节码可以执行吗?
            完全可以执行,因为源代码不参与程序的执行过程。
            参与程序执行过程的是字节码。
            但是最好不要删除源代码。因为有可能执行结果不是你需要的,当执行结果不是你需要的时候,你可以重新打开源代码进行修改,然后重新编译生成新的字节码,再重新执行。这样会有新的执行效果。
     
        放源代码的文件扩展名必须是:xxx.java
        并且需要注意的是:编译生成字节码文件扩展名是:xxx.class
        没有为什么,死记硬背吧!!!
     
        .java文件就是源文件,在这个文件中编写源代码。
        .class文件就是字节码文件,这个文件是编译源代码而得到的。
     
        另外需要注意的是:
            1个Java源文件是可以编译生成多个class文件的。
            最终运行的是class文件。
     
        字节码文件是二进制文件吗?
            字节码文件不是二进制文件。
            如果是二进制的话,就不需要JVM(Java虚拟机)了。
            因为操作系统可以直接执行二进制。
     
        程序员到底要什么呢?
            新建Java文件。
            打开Java文件。
            写Java源代码。
            保存。
            javac命令编译。
            java命令运行
     
        编写、编译、运行。
     
        我们一起来研究一下:“java HelloWorld”的执行过程以及原理。
        C:UsersxlWuDesktop小练习>java HelloWorld
        敲完回车,都发生了什么????
            第一步:会先启动JVM(java虚拟机)
            第二步:JVM启动之后,JVM会去启动“类加载器classloader”
            类加载器的作用:加载类的。本质上类加载器负责去硬盘上找“类”对应的“字节码”文件。
            假设是“java HelloWorld”,那么类加载器会去硬盘上搜索:HelloWorld.class文件。
            假设是“java Test”,那么类加载器会去硬盘上搜索:“Test.class”文件。
            .....
     
            第三步:类加载器如果在硬盘上找不到对应的字节码文件,会报错,会报什么错误?
                错误:找不到或无法加载主类。
                         类加载器如果在硬盘上找到了对应的字节码文件,类加载器会将该字节码文件装载到JVM当中,JVM启动“解释器”将字节码解释为“1000010100...”这种二进制码,操作系统执行二进制码和硬件交互。
     
            问题????
                默认情况下,类加载器去硬盘上找“字节码文件”的时候默认会去哪里开始找。
                    默认情况下类加载器(classloader)会从当前路径下开始找。
     
            此处应该有疑问?你可以提出那些问题?
                能不能给类加载器指定一个路径?让类加载器去指定的路径下加载字节码文件。
                答案:可以的。但是我们需要设置一个环境变量,叫做:classpath
     
        (了解即可,不需要掌握,现阶段也不需要这样写)
            再高版本的JDK当中,有这样的一个新特性,可以直接这样一步到位:
            java x/y/z/xxx.java 
            java后面直接加java源文件的路径。
            这个特性是为了简化开发而提出的,但实际上底层的实现原理还是和以前一样的。
            以上命令在执行过程中,还是会先进行编译,然后在运行。并且以上的运行方式,编译生成的class文件在硬盘上不存在,看不到。
     
  • 相关阅读:
    【AtCoder】AGC002
    【AtCoder】ARC059
    【AtCoder】AGC003
    【AtCoder】ARC060
    ES6学习总结之Set和Map的使用
    phaser学习总结之Text详解
    javascript实现数组排序的方法
    phaser学习总结之phaser入门教程
    javascript中字符串常用的方法和属性
    javascript中数组常用的方法和属性
  • 原文地址:https://www.cnblogs.com/xlwu/p/13052684.html
Copyright © 2011-2022 走看看