编译or解释
看java教程,前一页写着“java语言是一种解释执行的语言”,紧跟着后一页就写着“java是半编译半解释型的语言”,当时我就懵了,这到底是几个意思啊?不带这么玩儿的。
那java到底是编译还是解释呢?我觉得要搞清楚这个问题,首先是了解什么是编译和解释,然后再看java程序的运行步骤,然后对照一下自然就清楚了。
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。
编译(compilation , compile)定义分为静态和动态两种:
1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。
通俗来讲,编译就是把高级语言变成计算机可以识别的二进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成二进制的。
编译型语言写的程序在执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件)。
解释:
解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。解释是一句一句的翻译。
因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。
编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB
等等。
但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上,而解释型语言的自身特点也使得编译器厂商愿意花费更多成本来优化解释器,解释型语言性能超过编译型语言也是必然的。
java运行步骤:
.java文件->编译->.class文件,编译成.class字节码,.class需要jvm解释,然后解释执行。Java很特殊,Java程序需要编译但是没有直接编译成机器语言,即二进制语言,而是编译成字节码(.class)再用解释方式执行。java程序编译以后的class属于中间代码,并不是可执行程序exe,不是二进制文件,所以在执行的时候需要一个中介来解释中间代码,这既是java解释器,也就是所谓的java虚拟机(JVM),也叫JDK。
因为java解释器采用生成与系统无关的字节代码指令技术。也就是说,在任何不同的操作系统上,只要正确安装了java运行系统,就有了编写调试java程序的平台,在分布式应用中,java的这个特点使同一个java程序能在不同的系统上运行,从而提高了软件生产效率。可移植性是跨平台特性的一个延伸,即具有了跨平台性,就保证了可移植性。java程序、java类库、java编译器、java系统都具有可移植性。
总结
说了这么多,让我们回头看一下java到底是编译型的还是解释型的。首先,java需要编译,解释型语言不需要编译,然而java编译的结果又不是和其他编译型语言一样的二进制文件,而是class文件。从这一点上来看,java介于二者中间;java编译完成以后,操作系统不能直接运行,而是需要java虚拟机解释执行class字节码文件。因此虚拟机将字节码程序与操作系统及硬件分开,使得java程序能在异构平台上执行,从这一点上来看,java又属于解释型语言。如果严格来说,java确实属于半编译半解释型语言,如果只从最后的执行步骤来看,java属于解释型语言。至于它到底属于什么类型的语言,还是仁者见仁智者见智的。
分享到:
相关推荐
Java程序设计课件:第一章 初次邂逅Java.ppt
创意趣味的情人节模板,天生一对——邂逅情人节ppt模板。
邂逅统编教科书——借文本解读促小学语文课堂深度 学习研究.pdf
java雨中邂逅
语文邂逅电商,聚焦共生共融——“语文 电商”跨界融合的“珍珠饰品图文编排”课例研究
语文邂逅电商,聚焦共生共融——“语文 电商”跨界融合的“珍珠饰品图文编排”课例研究.pdf
Java Web编程宝典-十年典藏版.pdf 是PDF电子书,不是源码。共分2个包。 《Java Web编程宝典(十年典藏版)》是一本集技能、范例、项目和应用为一体的学习手册,书中介绍了应用Java Web进行程序开发的各种技术、技巧。...
我们生活在电气时代。电渗透到我们日常生活中的方方面面。没有了电,我们的世界是黑暗的,没有了电,我们恐怕已经不知道该怎么生活。众所周知,是英国物理学家迈克尔·法拉第(Michael Faraday,1791-1867)将这伟大...
认识Vuejs 1 为什么学习Vuejs? 前端必备技能,目前非常火,当然最重要的还是提升自己 2.简单认识一下Vuejs Vue是一个渐进式框架,可以将Vue作为应用的一部分嵌入其中,带来更丰富的交互体验 特点:解耦视图和数据,...
实力IT教育邂逅Webpack王红元认准一手微信wxywd8 高价回收正版课前端发展的几个阶段n 无论是作为专业的开发者还是接触互联网的普通人,其实都能深刻的感
春之约会,草长莺飞的三月,正是油菜花盛开的季节,邂逅了油菜花的我,与春天有一场美丽的约会;邂逅春天,三月,在微风暖阳中,悄悄溜走,花谢花开,此事,无关风月。华中农业大学院部简介,校园转角,茶树的形象...
邂逅博弈.pdf
果然,邂逅了两位梦中情人——Pocketsphinx和Kaldi。 作为老资格的Pocketsphinx已经被后生Kaldi拍在沙滩上,但还是对Pocketsphinx做了一番实践(详情可在小生的博客中浏览)。最后,还是选择使用Kaldi,较于前者,...
海外邂逅颜鲁公
邂逅的同义词文艺点_策划邂逅,我们文艺,我们相遇.pdf
播音稿件邂逅.docx
01_邂逅Node1
美丽的邂逅.doc