java编译
发布网友
发布时间:2022-04-23 18:54
我来回答
共6个回答
热心网友
时间:2023-10-13 19:59
java的源程序是通过java的编译器可以编译成.class文件 编译出来的文件是为了让java的虚拟机JVM识别 运行也是通过JVM来运行的。。JVM充当一个翻译 把.class文件翻译给windows内核接口 这样来运行的。
你刚刚问的为什么不干脆直接编译成.exe文件 那是因为java翻译成.class文件一方面是为了移植方便 拿到Linux等其他操作系统上 只要有JVM 还是能执行的 如果是生成.exe文件 那就丧失了移植性了。 这个是sun原本的意愿
为什么到现在都没有个像样的把java代码编译成.exe的软件呢 是因为 代码编译很难 而且编译出的代码要非常规范 这个很难 一般都是搞底层开发的人才有这种技术 虽然也能做出来 但是那些高低层的都不屑于写java编译.exe 他们都看java的笑话呢。。 所以咱们这些java程序员很悲哀啊。。写的得意的东西给别人看 别人都不能运行。。
我曾经跟你差不多 对java不能直接编译.exe文件很恼火。。现在也算习惯了 唉哥们 真想的话就 苦学底层吧 学个10年8年 然后再花个半年的时间来做这个东西 倒时候咱们这个java中人 肯定都歌颂你赞美你。。现在。。
还有提醒你 现在网上大多数的打着口号说能吧java代码编译成.exe的人 都不是真的 他们只是做了个包装 把java包装成.exe 但是这种包装也只能对本身机器有效 如果是换台机器 这个包装的.exe就不能运行了。。很烂 很淫荡
热心网友
时间:2023-10-13 19:59
*.exe是机器码。与操作系统和硬件相关性很高。
java为实现较好的平台无关性,因此在底层操作系统上构建了一个java虚拟机,
也就是JVM。java程序的运行是通过将*.class里的虚拟机代码根据操作系统上的虚拟机进行翻译成为操作系统可执行的机器命令来执行的。
*.java的代码是给人看的。
*.class的代码是编译器优化过后虚拟机码,执行效率高。
由于java是解释性语言,因此不会生成exe文件。不过Microsoft 的java SDK中有个jexegen.exe可以实现exe转化。一般来说没必要转化的。
热心网友
时间:2023-10-13 20:00
class文件并不是可运行的文件,class只是一个中间代码,所以要运行必须还是要通过虚拟机再次翻译成和当前系统关联的可运行代码才可以。
要把Java转化到exe现在的做法就是打包,使用jmooth,打包的时候最好带上一个环境,只要就可以在没有Java的机器上运行。
热心网友
时间:2023-10-13 20:00
首先要明确的是:所有的高级编程语言,包括C,C++,JAVA等等,都需要通过相应的编译程序编译成CPU能识别的二进制代码,也就是101010001...或者是类似于汇编代码的低级语言再通过解释器解释才能让CPU执行。否则在计算机看来C,C++,JAVA等写出的源代码和文本文件一样都是没有任何意义。所以编译就是一个介于高级语言和机器语言之间的翻译过程。
*.exe就是C、C++或C#编译后并打包的结果。java也有相似的处理,可以经编译后打包成jar文件,双击就可直接执行(当然和*.exe的执行不同,需要通过JVM解释运行)。
*.exe文件是已经经过编译器处理成直接能够让你的机器识别的应用程序,而java的*.class只是一个类似于汇编指令的中间代码,和机器代码之间仍然有巨大差别,无法由CPU直接识别执行,所以需要由“中间代理商”:也就是所谓JVM(java虚拟机)一句一句地将*.class解释执行(也就类似于同声传译啦)。你可能要问为何多此一举?那是因为不同的CPU芯片有不同的机器代码格式,我们现在用的windowsXP都是基于的x86指令集的,但是还有许许多多我们可能听都没听说过的指令系统,如果你想把你电脑上的一个软件直接搬到其他系统上。。没门!其他系统看不懂!如果想要执行怎么办?只能用针对该系统指令集的编译器将源代码重新编译成可执行二进制文件,因此移植的时候必须将所有的源代码拷贝过去,只用原来编译过的二进制代码是不行的。针对这一问题,java看似舍近求远的做法是为了达到更好的可移植性,不需要在新系统上重新编译,一旦系统上装有JVM(言下之意就是并且JVM支持这种指令集)只需要让JVM执行过程中把*.class解释给那个系统听就可以了。
至于“为什么不可以用java源代码直接在虚拟机中运行,为什么还要经过编译?”:编译是一个预处理过程,涉及分析源文件的语法含义,代码优化,以及CPU的寄存器分配等等。。工程浩大,是无法在执行程序的过程中同步执行。
热心网友
时间:2023-10-13 20:01
class文件是你编写JAVA时系统为了识别自动生成的,
热心网友
时间:2023-10-13 20:02
不要用微软的思想强加给Sun,也不要强加给Java程序员