Java是解释型还是编译型?

Java是解释型还是编译型?,第1张

有人说Java是编译型的。因为所有的Java代码都是要编译的,java不经过编译就无法执行。 也有人说Java是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型的。对于C和C++,它们经过一次编译之后,可以由操作系统直接执行,所以它们是编译型语言。而Java不一样,它首先由编译器编译成class(字节码)文件,然后在通过JVM从class文件中读一行解释执行一行,所以它是解释型的语言。也正是由于java对于多种不同的操作系统有不同的JVM,所以实现了真正意义上的跨平台。(1)Java语言的编译-->解释-->运行过程 (2)JVM到这里,大家应该也都明白了。最后给出编译型语言和解释型语言的定义。定义:编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!特点:编译型语言,执行速度快、效率高;依靠编译器、跨平台性差。解释型语言,执行速度慢、效率低;依靠解释器、跨平台性好。举例:编译型的语言包括:C、C++、Delphi、Pascal、Fortran解释型的语言包括:Java、Basic、javascript

产生:byte code\x0d\\x0d\Java字节码是Java源文件编译产生的中间文件\x0d\java虚拟机是可运行java字节码的假想计算机 java的跨平台性也是相对与其他编程语言而言的\x0d\先介绍一下c语言的编译过程吧先是C语言源程序 也就是c的文件经过C编译程序编译后,生成windows可执行文件exe文件,然后在windows中执行。再介绍java的编译过程先是java源程序扩展名为java的文件,由java编译程序将java字节码文件,就是class文件然后在java虚拟机中执行。机器码是由CPU来执行的。Java编译后是字节码, 电脑只能运行机器码。Java在运行的时候把字节码变成机器码。C/C++在编译的时候直接编译成机器码。

  除了 Java 的编译器和虚拟机器之外 还有一些相关的编译技术 本文章试图做一个简单的说明    JIT 编译器  传统的 Java 虚拟机器很愚蠢 将一道 bytecode 的指令翻译成机器码之后 马上执行这些机器码 执行完这批机器码之后 就把这些机器码丢了 接着再翻译下一道 bytecode 的指令 继续下去 即使下次执行到以前执行过的 bytecode 指令 依然要重新翻译成机器码才能执行 如此一来 效率当然不好 使用 JIT 编译器(Just In Time piler)技术的虚拟机器比较聪明 会把常常执行的部分在第一次先翻译好放在内存 以后再次执行到这里时 就不用再翻译 直接从内存取出机器码即可执行 这么一来 只要你的内存够大 JIT 编译器的技术够好 你的 Java bytecode 执行速度也可以逼近纯编译式的程序    其它程序语言的编译器    任何档案只要符合 Java bytecode 的格式 就可以被 Java 虚拟机器执行 制造出 Java bytecode 的方式有许多种 不一定要使用 Java 语言来写程序 才能编译成 Java bytecode Java 是语言也是平台 你可以不使用 Java 语言(也就是 Java 编译器) 只使用 Java 平台(也就是 Java 虚拟机器) 只要某语言有提供编译器 能将该语言的原始码编译成 Java bytecode 格式 就可以在 Java 平台上执行 据我所知 目前已经有下列语言提供兼容于 Java 平台的编译器(以英文字母顺序排列) Aardappel Ada Agora BAMBOO Basic Bistro Bolero C C++ CLIPS COBOL Correlate Dawn E EcmaScript Eiffel Foo Forth Fortran Funnel Haskel Hojo javascript Jickle JIF Jinni Lisp LL LLP Logo Luck MINERVA Mini ML Modula NetRexx Nice Oberon Pascal PLAN Pnuts Prolog PS I Python Sather Scheme SELF Simkin Small Talk Tcl WebL Yassl Yoix Yoyo    原生编译器    如果你不在乎 Java 程序能否跨平台 你希望 Java 程序能如同 C/C++ 一般被编译成机器码而非 Java bytecode 那么你可以使用 Java 原生编译器(native piler) 目前已经有不少这样的产品可以使用 Java 原生编译器有两大类 一类可以把 Java 的原始码编译成机器码 另一类则可以把 Java bytecode 编译成机器码    反编译与混淆器    Java bytecode 因为档案格式简单 信息保留完整 且指令是最简单的堆栈式(stack based)架构等因素 所以很容易被反编译(de pilation) 反编译指的是和编译相反的过程 对 Java 来说 反编译就是把 Java bytecode 转换成 Java 原始码的过程 为了防止你辛苦地开发出来的 Java bytecode 被他人反编译成原始码 你可以透过混淆器(obfuscator)将你的 Java bytecode 转换成更混乱的 Java bytecode 执行起来效果一样 但是被混淆过的 Java bytecode 比较不容易被反编译 你通常要为此付出一点代价 因为混淆过的程序执行速度通常会变慢 且混淆器只能增加反编译的难度 不能保证你的程序一定无法被反编译成功 毕竟道高一尺 魔高一丈 如果有人愿意花许多时间和精力反编译你的 Java bytecode 你根本就无法拦阻    组译与反组译    汇编语言(assembly)是一种非常接近机器码的语言 将汇编语言转成机器码的工具称为组译器(assembler) 反过来将机器码转成汇编语言的工具称为反组译器(dissembler) 对于 Java 虚拟机器来说 Java bytecode 就如同它的机器码 有没有一种语言是很接近 Java bytecode 的呢?也就是说 Java 有没有的汇编语言呢?基本上 Sun 并未定义 Java 的标准汇编语言 但是有一些人定义了自己的 Java 汇编语言 并提供 Java 的组译器(甚至反组译器) 例如 Ja in 以及 javaa 都是 Java 组译器    前处理器    前处理器(pre processor)也称为前编译器(pre piler)或前翻译器(pre translator) 其目的在将源码中不符合语言规范的部分转换成符合语言规范的形式 比方说 我们可能在 Java 源码中除了使用 Java 语言之外 还穿插使用自订的语法 这些自订的语法无法被 Java 编译器处理 所以我们必须先透过一个前处理器来将自订语法的部分转换成 Java 语言 然后就可以交由 Java 编译器处理 目前有不少 Java 的前处理器 例如 iContract SQLJ 都是用来扩充 Java 语言之用的    最佳化工具软件    一般来说 最佳化有两种  让档案体积变小 可以节省储存空间并加快网络传送速度  让执行速度变快 对于 Java 来说 还有第三种最佳化  让程序结构变乱 不容易被反编译 也就是前面提到过的混淆(obfuscation)   这三个目的之间常常互相排挤 结构变乱 通常会使得程序变慢 且体积变大 体积变小 通常会使得速度变慢 且结构变整齐 速度变快 通常会使得体积变大 且结构变整齐 lishixinzhi/Article/program/Java/hx/201311/27007

第一步(编译): 创建完源文件之后,程序会先被编译为class文件。Java编译一个类时,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类,然后引用,否则直接引用,这个有点象make。

如果java编译器在指定目录下找不到该类所其依赖的类的class文件或者java源文件的话,编译器话报“cant find symbol”的错误。

第二步(运行):java类运行的过程大概可分为两个过程:1、类的加载 2、类的执行。需要说明的是:JVM主要在程序第一次主动使用类的时候,才会去加载该类。也就是说,JVM并不是在一开始就把一个程序就所有的类都加载到内存中,而是到不得不用的时候才把它加载进来,而且只加载一次。

特别说明:java类中所有public和protected的实例方法都采用动态绑定机制,所有私有方法、静态方法、构造器及初始化方法<clinit>都是采用静态绑定机制。而使用动态绑定机制的时候会用到方法表,静态绑定时并不会用到。

扩展资料:

Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程。

Java代码编译:是由Java源码编译器来完成;

Java字节码的执行:是由JVM执行引擎来完成

Java程序从源文件创建到程序运行要经过两大步骤:

1、源文件由编译器编译成字节码(ByteCode)

2、字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( "semi-interpreted" language)。

用命令提示符编译java程序的步骤:

1先新建文本文档,输入自己的java程序。

这里我写一个简单的java程序,来做示范。

import javautil;

public class HelloDate{

  public static void main(String[] args)

{

    Systemoutprintln("Hello,it's:");

    Systemoutprintln(new Date());

}

}

2然后另存为一个java文件。

1选择文件--->另存为--->名称为“HelloDatejava”----->选择“所有文件”。

2记住自己这个文件的存储位置。(方便调用!)

3打开程序---->附件--->命令提示符。

4由于我的那个java文本保存在了F:/java/(在F盘下的java文件夹里)下,所以如果要想编译,就需要先通过命令提示符进入java这个文件夹,具体步骤如下:

1进入F盘:输入F:,然后按下回车键Enter

2输入cd java,按下回车键Enter

这样就已经进入了。这里的cd的意思就是进入的意思。

5紧接着调用java编译器进行编译。

输入javac HelloDate。java,然后按下回车键Enter

然后运行结果。

输入java HelloDate,按下回车键Enter

经验总结:运行一个java程序的大概的流程是:

书写源代码------>编译------->运行---->结束。

注意事项:

1在输入的时候一定要注意区分大小写。

2操作之前要保证自己的电脑配置了java的运行环境。

  javac是Java的编译命令,能将源代码编译成字节码,以。class扩展名存入Java工作目录中。Java是Java解释器,执行字节码程序,该程序是类名所指的类,必须是一个完整定义的名字。javadoc是Java文档生成器,对Java源文件和包以XML格式生成API文档。appletviewer是Java Applet浏览器。

 Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。

 使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/4061245.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2024-04-13
下一篇2024-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存