草庐IT

Java到底是编译型语言还是解释型语言?

lps1944900433 2023-03-28 原文

Java编程语言是由Sun微系统公司在20世纪90年代早期开发的。尽管Java主要用于基于internet的应用程序,但它是一种简单、高效、通用的语言。Java最初是为运行在多个平台上的嵌入式网络应用程序而设计的。它是一种可移植的、面向对象的解释性语言。

Java是非常可移植的。相同的Java应用程序可以在任何计算机上以相同的方式运行,而不考虑硬件特性或操作系统,只要它有Java解释器。除了可移植性之外,Java的另一个关键优势是它的一组安全特性,这些特性不仅可以保护运行Java程序的PC不受错误代码引起的问题的影响,还可以保护运行Java程序的PC不受恶意程序(如病毒)的影响。您可以安全地运行从Internet下载的Java applet,因为Java的安全特性可以防止这些类型的applet访问PC的硬盘驱动器或网络连接。applet通常是嵌入在HTML页面中的小型Java程序。

Java既可以被认为是编译型语言,也可以被认为是解释型语言,因为它的源代码首先被编译成二进制字节码。这个字节码运行在Java虚拟机(JVM)上,JVM通常是一个基于软件的解释器。使用编译的字节码可以使解释器(虚拟机)变得更小、更高效(几乎和CPU运行本机编译代码一样快)。此外,这个字节码为Java提供了可移植性:无论计算机硬件或软件配置如何,它都可以在任何正确实现的JVM上运行。大多数Web浏览器(如Microsoft Internet Explorer或Netscape Communicator)包含运行Java小程序的JVM。

与c++(另一种面向对象的语言)相比,Java代码运行稍慢(因为JVM),但它更可移植,具有更好的安全特性。虚拟机在不受信任的Java程序和运行该软件的PC之间提供隔离。Java的语法类似于c++,但是语言有很大的不同。例如,Java不允许程序员实现运算符重载,而c++允许。此外,Java是一种动态语言,您可以在程序运行时安全地修改它,而c++不允许这样做。这对于无法承受任何停机时间的网络应用程序尤其重要。此外,所有基本Java数据类型都是预定义的,不依赖于平台,而一些数据类型可以随着C或c++中使用的平台而改变(例如int类型)。

Java程序比c++程序更具有高度的结构化。Java中的所有函数(或Java方法)和可执行语句必须驻留在类中,而c++允许函数定义和代码行存在于类之外(就像C风格的程序一样)。在Java中,全局数据和方法不能驻留在类之外,而c++允许这样做。这些限制虽然有时很麻烦,但有助于维护Java程序的完整性和安全性,并迫使它们完全面向对象。

Java的另一个关键特性是它是一个开放标准,其源代码是公开的。Sun Microsystems控制着Java语言及其相关产品,但Sun的自由许可政策促成了互联网社区将Java作为标准。您可以从Sun的Java Web站点免费下载开发和运行Java小程序和应用程序所需的所有工具

http://java.sun.com

 

在本例中,类AverageProgram(即程序)只包含一个方法(函数)main()。注意,大部分语法与C或c++相同,包括注释分隔符:您可以在Java中使用C(/* */)或c++(//)风格的分隔符。甚至while()语句也像在C/ c++中一样工作。输出到屏幕是使用System.out.println()完成的,其中println()是标准Java System的调用方法。对象。Java也有一个系统。在对象中,用于从键盘读取,但必须经过处理才能有用。在本例中,假设ConsoleIn是先前定义的类(使用System.in),其中包含用于读取整数值的Readlnt()方法。

与我们调查过的其他编程语言一样,这只是对Java的简要介绍。要了解更多细节,请参考参考书目中的Java文本或访问Sun Microsystems的Java网站(http://java.sun.com)。接下来我们将讨论如何编写在微软Windows操作系统下运行的程序。

 

(1)java语言的编译-->解释--->执行过程

 

 

 

 

 

 

 

 

(2)java的虚拟机

 

 

 

 

 

 

 

定义:

编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。

解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!

区别:

编译型语言,执行速度快、效率高;依靠编译器、跨平台性差些。

解释型语言,执行速度慢、效率低;依靠解释器、跨平台性好。

个人认为,java更偏向解释型的语言,因为虽然java也需要编译,编译成.class文件,但是并不是机器可以识别的语言,而是字节码,最终还是需要 jvm的解释,才能在各个平台执行,这同时也是java跨平台的原因。所以可是说java即是编译型的,也是解释型,但是假如非要归类的话,从概念上的定义,恐怕java应该归到解释型的语言中。

附:

编译型的语言包括:C、C++、Delphi、Pascal、Fortran

解释型的语言包括:Java、Basic、javascript

 

有关Java到底是编译型语言还是解释型语言?的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  3. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  4. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  5. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  6. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  7. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  8. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  9. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  10. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

随机推荐