精华内容
下载资源
问答
  • Java语言

    千次阅读 2020-01-19 12:22:35
    所以说Java就是是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承(Java里面是没有类的多继承的)、指针(Nopoint)等概念,因此Java语言具有功能强大和简单易用两个特征,所以...

                                                   Java语言

    目录

                                                       Java语言

     

    一:SUN概述:

    二:背景:

    三:Java语言的优点:

    1).简单性

    2).纯面向对象

    3).编译和解释性

    4).稳健性

    5).安全性

    6).可移植性

    7).高性能

    8).分布性

    9).类库丰富

    一:SUN概述:

    Sun 公司对Java语言的描述:“Java is simple,object-oriented,distributed,interproted,robust, secure,architecture neutral,portable,high-performance,multithreaded,and dynamic language。”

    二:背景:

    学习Java首先听到最多的应该就是面向对象了,所以说Java就是是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承(Java里面是没有类的多继承的)、指针(Nopoint)等概念,因此Java语言具有功能强大和简单易用两个特征,所以说Java的发展来自于C++,或者说Java语言就是有C++语言改进并重新设计而来的一门编程语言。

    Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

    Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面级应用程序、WEB应用程序、分布式系统和嵌入式系统应用程序等 。

    三:Java语言的优点:

    Java语言具有以下几个特点:

    1).简单性

    Java看起来设计得很像C++,上面就已经提到过Java的由来(Java发展史),但是为了使Java变得小巧和容易熟悉,所以设计者在设计之初就将C++中的一些特征去掉了(比如go to语句,操作符过载和多继承特征等)。因为Java变成了“一切皆对象”的理念,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。

    2).纯面向对象

    Java是一个面向对象的语言(Everything is Object)。所以说对开发者来说,这意味着它可以直接反应现实生活中的对象(如:树,汽车,人等)。在一个面向对象的系统中,类是数据和操作数据的方法的集合。数据和方法一起描述对象的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。

    3).编译和解释性

    Java编译程序生成字节码文件,而不是通常的机器码(即二进制)。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地“搬运”程序到不同的平台和环境中。在一个解释性的环境中,程序开发的标准"链接"阶段大大消失了。如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。因此,Java支持快速原型和容易试验,它将导致快速程序开发。这是一个与传统的、耗时的"编译、链接和测试"形成鲜明对比的精巧的开发过程。

    4).稳健性

    Java起初是用作编写消费类家用电子产品软件的语言(可以去看看Java的发展历程),所以它是被设计成写高可靠和稳健软件的。Java消除了一些编程错误,使得用它写软件与其他语言更加简单便捷。Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,而不是C语言式的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。

    可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针(空指针),它消除重写存储和讹误数据的可能性。类似地,Java自动的"无用单元收集"预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。

    异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,开发者可以找到出错的处理代码或者觉得在代码运行时会出错的地方的进行异常处理,这就简化了出错处理和恢复的任务。

    5).安全性

    Java的存储分配模型是它防御恶意代码的主要方法之一。Java没有指针,所以开发者就不能得到隐蔽起来的内幕和伪造指针去指向存储器。更重要的是,Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。

    Java运行系统使用字节码验证过程来保证装载到网络上的代码不违背任何Java语言限制。这个安全机制部分包括类如何从网上装载。例如,装载的类是放在分开的名字空间而不是局部类,预防恶意的小应用程序用它自己的版本来代替标准Java类。

    6).可移植性

    Java使得语言声明不依赖于实现的方面。例如,Java显式说明每个基本数据类型的大小和它的运算行为。程序一次编写,各处运行。Java环境本身对新的硬件平台和操作系统是可移植的,而Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写(这就是关键点),这样一来不管平台是否相同,编译环境一样即可运行Java程序。

    7).高性能

    Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了"及时"编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了,Java字节码格式设计时考虑到这些"及时"编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。

    8).分布性

    Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流网络连接,所以用户可以产生分布式的客户机和服务器。网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。

    9).类库丰富

    Java提供了很多丰富的内置类库,通过这些类库,可以简化开发者的程序设计工作,简化操作,同时缩短了项目开发时间(时间就是金钱嘛)。

    展开全文
  • 本文主要分析 C、C++98、C++11、Java 与 Go,主要论述语言的关键能力。在论述的过程中会结合华为各语言编程专家和华为电信软件内部的骨干开发人员的交流,摒弃语言偏好或者语言教派之争,尽量以客观公正的角度来论述...
    文/ 赵玉锡



    2004 年进入华为,一直在消息产品开发一线耕耘,今年下半年转入华为融合视频业务。曾参与多个重要项目与重要版本的设计、重构与开发,辗转多个语言:长期从事 C、C++ 开发,Java 与 Python 也有约 30K+ 代码的开发经验,目前正在基于 Go 语言开发,对 HTML/JS/Shell 等脚本语言也有一定掌握。


    本文主要分析 C、C++98、C++11、Java 与 Go,主要论述语言的关键能力。在论述的过程中会结合华为各语言编程专家和华为电信软件内部的骨干开发人员的交流,摒弃语言偏好或者语言教派之争,尽量以客观公正的角度来论述下各个语言的特点和不足,对语言选型作为一个客观的参考。


    把这些写出来,期望得到大家的指正与反馈,让整个分析更客观,性能方面,着重对 Go 做深入剖析参考。内容很多,期望不会让你望而却步。


    语言整体概要


    1、Go


    在并发方面, goroutine 和 channel 机制提供了语言层面的轻量级和毫无拖泥带水的并发机制;在性能方面,提供了不弱于 Java 的性能(性能是个伪命题),而内存资源消耗方面,相对 Java 和其它动态语言,具备明显的优势;在语法方面,具备了部分 Python 的动态语言特性,在对象初始化、构造和序列化等方面提供了无比简洁的表述方式,而这些处理代码可能占据 10%~50% 的代码分量,尤其对于处理数据、配置和协议映射场景,相比 C、C++、Java 在此方面拙笨,这就是动态语言为何让人着迷的关键所在。


    这也是为啥 Go 语言第一个版本发布时就如此受人瞩目的关键所在,尤其是对于动态语言来说,它提供了动态语言所不具有的并发与性能优势,Pike 设计 Go 语言目的是想作为 C/C++ 的另外一个可选的角色(注意不是替换,其设计目标不是替换),Go 语言之父 Google 首席软件工程师 Pike 2012 年“大道至简”演讲稿中对于此目标充满沮丧,引用其中一句话:“Although we expected C++ programmers to see Go as an alternative, instead most Go programmers come from languages like Python and Ruby. Very few come from C++.” C++ 的价值精髓在于:语言提供更加广泛的抽象、优雅和灵活的特性,而这些表达能力是硬件零成本的,而 C 语言一开始就把硬件零成本作为其设计目的,但语言表述力是 C++ 来解决,Go 思考的方向显然不是零成本,至少不是零 CPU 成本,Go 的主张更多考虑的是最小化程序员的工作量。


    一个是硬件零成本的极致追求,一个是最小化程序员的工作量,谁都替换不了谁最有价值的部分,Go 无法同时符合两个目标,它选择了动态语法和 gc,就注定了它选择开发效率,会为开发效率牺牲硬件效率,所以它走向另外一个方向,也就是 Java 所擅长的应用方向,尤其是目前的网络和 HTPP 应用方面,这就需要有良好的标准库和生态系统支持,而在标准库方面,Go 已提供了处理 tcp/http/xml/json/ 加解密等更轻量级和优秀的代码库,对网络的核心协议 http 的高并发支持,已经为它提供了撬动 Java 的敲门砖。


    但是我们必须面对它目前的不足,在其语言重要特性和严谨性方面还远未成熟,还有不少断层或临时解决方案,而这也会影响到其生态的成熟度,这些问题还需要在新版本中解决。Go 语言 2012 年 3 月 28 日正式发布第一个版本,截止目前 1.7 版本发布,差不多一年两个大版本发布,中间还有数个 beta 与 RC 版本发布,这也基本能说明 Go 语言还未完全准备好。


    小结


    Go 已经证明在动态语言需要性能方面,是作为 Python 和 Ruby 的理想候选者;在应用开发方面,尤其是 HTTP 相关应用方面,目前已经是站在 Java 面前的一位挑战者,同时在对资源的掌控力不是那么强烈诉求的地方也是 C/C++ 之外提供另外一种角色。


    在生产力方面,其语言特性和生态系统还未成熟,版本还在快速迭代中,相比动态语言和 Java,并不具有优势,目前阶段是这些语言在某些场景下的可选角色。长期看,在 Google 的鼎力支持下,新特性和库的应用能力还会不断加入,是一门欣欣向荣的编程语言,但目前阶段,建议必须控制好程序的规模和复杂度,语言和生态还未提供健全的支撑,同时还必须留意它的不成熟和版本快速迭代带来的风险。


    2、Java


    Java 的成功得益于 10 年前以 Unix 系统为主的 SUN、IBM、Oracle 等大型公司的强力支持,这让它在企业应用领域和 WEB 应用方面站稳了脚跟,而随后的 10 年,前半段是靠 x86+Linux 带来的革命继续保持份额,后半段就是 android 的成功让其在步履蹒跚停止脚步后再一次登顶。这二十年,Java 积累了最强大的生态系统,你可以说它无所不包, 毋庸置疑,Java 早已是一艘航空母舰的巨大身躯,这足已证明它的地位与成功。但是其语言、库、框架和生态系统的复杂度,对技术人员构筑其巨大的障碍,比如并发方面,语言的 synchronized 机制,标准库的 notify 再到 concurrent,也可以通过 Apache+tomcat 容器来获得 HTTP 等的并,而基于 JVM 技术,Java 又与其它语言具有良好的互操作性,比如并发方面的 Scala,可以选择其 Actor 或者也是用 Scala 写的 Akka,当然业界选择 nginx 等混搭的场景更多,太多太多…


    这就是 Java 的世界,永远不嫌多,无需要重复造车马,这是 Java 成功的关键所在,历史沉淀下来的,让 Java 提供的选项太多,深入后就知道 Java 的学习成本比 C++ 更高,对程序员的要求比 C++ 更高,除非掉队了,还在用 7 年甚至 10 年前的 Java 技术,技术人员要非常精心地组织框架和设计,否则各种复用的结果就是堆砌出一个异常臃肿的程序,其运行时对资源的消耗有时候会让你感到恐惧,而这是太多的基于 Java 所开发的平台被广泛诟病的关键所在,重用是个双刃剑,需要量体裁衣而不是一锅端,拿捏的尺度对开发人员要求无疑是最高昂的,除非语言和标准库提供了最好最直接的选项。


    小结


    Java 早已证明它的无所不包,近十年基本都是排名最好的语言,积累最强大的生态系统。要澄清下一个误区:如今 Java 的学习成本和对开发人员的技能要求,已经远高于 C/C++ 的,也许大多数的开发人员无法驾驭 Java 这艘航空母舰。若要长期使用 Java,务必跟上 Java 的最新技术,同时在重用方面一定要拿捏好尺度,这会对人员技能提出更高要求,否则及其容易写出资源占用和运行时效率让人感到恐惧的应用。


    3、C、C++98、C++11……


    C/C++ 在嵌入式和系统级编程方面,依然占据着牢固的位置,因为诸如 Java 和 Go 等语言的关键发力点显然在开发效率这一侧,参考前面 Go 一章节的论述。


    但是在并发、网络和应用编程等方面,一直处于讳莫如深的黑暗时代,语言本身未提供任何支持,而太单薄的标准库也毫无此方面的野心,C/C++ 的标准库的规模恐怕始终无法比拟 Java 与 Go,因为 C/C++ 不受任何一家大型商业公司控制而完全是“放养”状态,标准库需要得到大型商业公司持续的投资,这就是为啥 C++98 的标准库在 13 年后才获得一次大的更新。这直接导致 C/C++ 必须封装各种硬件平台的系统 API,而在 linux+x86 大面积击败 Unix 之前,众多的 Unix 系统更加剧了跨平台编程的难度,2000 年前出现一个很糟糕的跨平台的 ACE,还有 windows 平台上充斥大量宏静态全局变量的同样糟糕的 MFC 库,这些都曾经被程序员当成救命稻草,这些技术显然很快都被历史丢弃,这下可以知道为啥如此多的人对 C/C++ 讳莫如深感到恐惧。而此时 Java 提供了多线程、网络和应用开发方面的标准库和基于 JVM 技术的跨平台支持,把 Java 推向主流编程语言,也就是 Java 前十年成功的关键所在。


    对于 C/C++ 程序员,有一个振奋人心的大事件,C++11 发布,相比 C++98,无论在语言和标准库上,都是一个极大飞跃,C++ 之父说它是一门新语言,这不为过,同时如此多的顶尖 C++ 高手对 boost 库的贡献(其实已是实时上的标准库),在网络、并发编程和一些基本应用方面,已经提供了性能最优秀的库,极大地降低了此方面的开发难度。传统的 C++ 程序员,尽快过渡到 C++11 上,这需要编译环境的更新,而编译环境更新又会带来内存检测和性能分析方面最强力的工具,C\C++ 曾经最广受诟病的内存越界与泄露问题,在 gcc5.2 版本和 Intel 最新 CPU 面前,内存飞踩可以被抓在第一现场,同时Intel提供的 vtune 性能分析工具,是个人目前为止所遇到的最强大工具。


    小结


    传统的 C++ 程序员,尽快过渡到 C++11 上,拥抱新的标准库和 boost,这会极大提高在嵌入式和系统级编程方面的开发与维护效率。要拥抱全新语言,而语言的重大升级,广义上看也是一门新语言,也要放到同样重要位置,更好地发挥已有资产的产效。而在应用开发方面,由于标准库方面就不要指望它可以匹敌目前阶段的 Go,更不要说 Java,所以老老实实做好它最擅长的领域。


    语言特性


    1、并发


    Go 在轻量级和简洁方面具备最大优势:goroutine 和 channel 机制提供语言层面的轻量级和毫无拖泥带水的并发机制,标准库也提供了基于此的应用库;


    在并发世界的混合编程方面,Java 提供了最多的选择项和生态支持:十年前 java.util.concurrent 发布后就已经把 Java 推向了并发编程高峰,在云化下,Java 与 Scala 等高并发框架和语言具有良好互操作性;


    C++11 相对于 C/C++98,向前迈出了一大步,标准库和扩展库 boost 库已提供了优秀的跨平台封装,告别对操作系统 API 的维护,如同 10 年前 Java 的 concurrent 包发布一样,极大降低了此语言在并发编程方面的跨平台的心智负担,但在线程调度和管理方面,还是需要自己精心维护;


    而对于 C/C++98 来说,仅华为电信软件,有依赖 SNE/ENIP、有依赖 ACE、有风格各异的自行跨平台封装,尤其是 10 年前要支持 windows、linux、solaris、aix 等平台,并发编程的黑暗时代,C/C++ 的开发难度也多半因为其并发和网络编程,语言和库未提供支撑,必须白手起家。


    小结


    开发难度 Go < Java < C++11 < C/C98,学习曲线 Go < C++11 < Java < C/C98。可能有人会疑惑为啥 Java 比 C++11 的并发还难学,是因为 Java 提供的选择项太多,语言、标准库和其它语言框架互操作方面,要掌握和拿捏好,学习成本非常高昂,否则写出来的程序可能非常低效或者不健壮或者复杂。


    2、面向对象


    Java、C++、Python 均提供了良好的面向对象的语言支持,配合设计模式、类型系统和工具链的支持等,Java 和 C++ 具备构建大规模程序所具备的基本要素;Go 语言虽然号称支持面向对象,但它是通过方法与 interface 等间接模拟,无法直接清晰地组织对象结构并初始化销毁它们,与 C 一样,会充斥大量的全局对象和结构体,管理对象的成本比较高,在构建大规模程序方面,语言能力还比较弱,还需要新的语言特性加入。


    3、物理结构组织


    物理结构的组织,对于中大规模的程序来说,相比类接口等逻辑结构的表述,具有更至关重要的作用,比如100万行左右的C++代码,如果结构组织不好,影响是战略层面的(逻辑结构组织对于大规模程序影响是战术层面):一行代码变更,编译链接时间可能都是10分钟以上,甚至数小时,仅仅编译和重启耗费的时间可能已击垮整个开发效率。


    包:在代码组织方面,包的作用无需要在阐述,Java 与 Go 基本上是天生就具备了此语言特性,而 C/C++ 显然还不具备,C++ 只有比较弱的名字空间来避免名字冲突(更多的是逻辑结构组织),更多是通过目录、头文件/源文件/HPP 文件来组织代码分类,需要非常精心地处理和设计,否则引入循环和混乱依赖是家常便饭,对大规模程序的组织,对人员技能要求更高。


    库:在程序运行方面,Java 支持 jar 包的动态加载,具备良好地扩展和升级能力,而 C/C++ 支持静态和动态两种链接方式,但在加载方式方面,基本没有控制力,未能如 Java 般灵活,Go 编译后 linux 下基本只依赖 libc 库,不支持动态链接,只支持静态链接,最终编译出一个兼容 gdb 格式的执行程序,在部署方面具有极简配置,但必须控制程序规模,否则在作业域可能会带来联动升级。


    小结


    Java 在此方面是最优的,而 C++ 必须要谨慎处理,Go 介于两者之间。


    4、类型系统和泛型


    Java/C++ 均支持强类型的编译时检测,提供了编译时的类型安全,便于发现低级的类型错误,同时支持泛型,便于表述通用的算法和容器;Go 语言支持 Python 的动态语法,在处理类型申明定义方面代码更简洁,但类型方面稍弱,目前阶段还不支持泛型,这为表述通用的算法和容器方面带来了极大障碍和类型不安全,需要通过 interface {} 来模拟,如同 C 语言世界的 void *,或者 10 年前没有泛型的 Java,其对象都继承自 Object,当然 interface {} 不只是对象或数据结构类型,Java 的历史已经证明此路不通,迟早会走到泛型,所以 Go 语言只是目前阶段不支持而已,长期看应该是支持的,其发明者也说过,目前还未找到好的支持办法。


    小结


    Go 还需要语言层面的新特性加入,相信这也是迟早的,在泛型方面,目前这几门语言中,C++11 是做得最好的,Java 次之,而 C++98 在处理泛型类型方面常常会遇到晦涩和极难处理的语法错误。


    5、初始化


    初始化对于程序的健壮性、灵活性和可读性,是至关重要一环,程序无法在各种复杂场景下良好地对变量赋值,其结果可想而知。


    Java 做得比较好,有良好的 gc,面向对象,不支持全局变量,数据成员支持分阶段的初始化,未显示赋值也有明确含义的初值,而类加载过程中也可以控制类、jar 包之间的复杂依赖关系。


    C 在初始化方面的语言支持是最原始的,贬义点来说就是“最糟糕的”,不支持面向对象,全局变量、自由函数和没有明确含义的初值带来了大量程序问题。


    C++ 支持得比较好,面向对象,这几门语言中唯一支持对象的析构和 RAII,在复杂对象和对象协作之间的初始化管理方面具有最强控制力,而 C++11 引入了 auto 与 decltype 等偏动态点的特性,让 C++ 表现得更好;但是同时兼容 C 语言的糟糕初始化,如果像 C 一样用 C++,结果与 C 语言一样,而这可能很普遍,这也是 C++ 被诟病的地方,这是继承 C 语言资产带来的其中一个负面,可以做得很好,也可能做得非常非常糟糕。


    Go 在初始化方面,Go 借鉴了 Python 部分动态语言,在变量、数组、struct、list 和 map 等结构方面,相信看过的都会为其简洁点个赞。但目前还需要更多的版本催熟:gc 相比 1.5 之前版本已经有较大提升,目前还不支持构造和析构,而 defer 一定程度上模拟了,但相比 C++ 的 RAII 和 Java 的对象、finally 等机制,还不成熟,很容易引入诸如性能和资源泄漏方面的缺陷;初始化不统一, New、make、{}等各种特定领域的初始化方式,这也是暴露 Go 的语言设计方面还不成熟的一方面,要知道 Java 与 C++、C 只需要一个 new 或者 malloc。


    6、错误处理


    错误处理对于复杂逻辑的组织和程序的健壮性,是至关重要的,比如一个简单的读文件,C 语言处理需要打开文件,判断打开结果;读取数据,判断读取数据结果;把数据映射为对象,判断每个参数结果….,就知道错误处理是多么地繁琐。


    健全的编程语言 Java/C++/Python/C# 等无疑都把异常处理放在第一优先位置。可惜 Go 目前还不支持,而是通过多值返回错误码方式,或者 panic – recover 机制,让错误处理代码充满整个逻辑,相比 C 的错误返回,有时候可能更糟糕。


    7、动态语法


    为啥要把动态语法作为一个关键项呢,相信用过 Python 等的,不考虑其它运行效率因素,无疑会对其简洁耳目一新,尤其是在对象初始化和构造方面,而这是程序代码中可能占据 10% 甚至 50% 代码的地方,尤其对于处理数据、配置和分析的系统。


    Go 借鉴了 Python 的部分动态语法,在反射的配合下,相比传统的 JAVA、C++ 的拙笨,是一个大的提升,当然此方面还需要不断提升,尤其字符串和类型兼容方面,断层还比较多,无疑在做数据处理方面,相对 Java、C++、C,Go 是更好的选择。


    8、其它重要语言特性


    运算符重载对于可扩展的类型运算来说,无疑是最优雅的;函数重载对于增量维护开发和支持各种简便调用来说,也是必不可少的;lambda 已经是健全的通用语言 C++11/Java/python/C# 的必选项,lambda 在数据的初始化和控制逻辑表述方面,无疑是一个利器…… Go 语言还不支持这些重要的语法特性,需要后续版本增强。


    生态


    1、标准库


    Java 的标准库无疑是最成熟最强大的,提供了拿来即用的高可复用的类和库,无需要重复造车马,这是 Java 成功的关键所在,但 Java 发展至今,其语言、类库和框架早已经是一艘航空母舰,且围绕其 JVM 不断有新技术新库涌现,要掌握拿捏好的学习成本是最高昂的,许多 Java 程序员其实掉队了,如同 C++ 一样,可能还在使用 7 年前甚至 10 年前的 Java 技术,Java 应用领域,必须跟上新技术步伐,同时要非常精心地组织框架和设计,否则各种复用的结果就是堆砌出一个异常臃肿的程序,其运行时对资源的消耗有时候会让你感到恐惧,而这是一些平台被广泛诟病的关键所在,重用是个双刃剑,需要量体裁衣而不是一锅端,拿捏的尺度对开发人员要求无疑是最高昂的。


    Go 除了提供雷同 C++11 标准库和 boost 库的基础能力,同时在应用库方面,尤其是网络和 WEB 编程,提供了支持并发的优秀库,如果对于 C++ 的应用能力薄弱和 java 的庞大感到恐惧,无疑 Go 是需要面对一个好的选择。


    C++11,并发编程等已经纳入到标准库,同时实时上的标准扩展库 boost 无疑提供了基本的应用复用能力,C++11 在做跨平台并发和网络应用编程方面,完全可替代传统的 C/C++98,让曾经的黑暗年代往前迈出一大步。但是在做 WEB、数据库和数据分析等企业应用开发方面,C++11 的库还是非常地单薄。


    2、工具链


    C/C++/Java 的工具链,就不用详细叙述了,从编辑器、代码浏览跳转、调试、代码文档自动生成、复杂度度量、findbug、内存排查、性能监控等已经非常鉴权,华为的 CI 环境也提供该了良好支持,就不详细叙述了。


    重点审视 Go 语言,开发环境通常会选择 Eclipse 或者 LiteIDE,选择 Eclipse,麻烦就许多,由于 Great wall 的原因,不能直接获取插件:Go 工程需要 GoEclipse、代码跳转需要 gocode、代码调试需要装 gdb,这些都单独下载下来,健全点还需要安装 guru 和 godef,有些需要做编译,安装 Eclipse 的 Go 的健全环境,看个人情况,差不多要 0.5~2 天就能工作了,所以推荐 LiteIDE,它的包里基本都有,装上差不多也能用了。但是这些环境只能简单用,开发工作中会遇到许多重要体验问题,如下:


    • 编辑阅读重要体验欠缺


    代码浏览:没有代码的对象、函数、变量的全局浏览和查找功能,只能一个个文件地打开进去看,这对于大型工程,文件多,文件大,习惯了 Eclipse、source insight 和 .net,没有浏览,会抓狂;代码搜索和跳转:不能打印名字,函数类接口等能够自动罗列出来,而前后跳转功能基本上也不能用,对于大型工程又是个重大体验丢失; 其它重要体验:无重构工具、无代码自动生成工具、编译错误不能随见随得……


    • 代码调试重要体验欠缺


    Windows的调试依赖 gdb,gdb 在 windows 环境不大可靠,所以不要期望它在 windows 环境能够如期工作良好,调试就最好到 linux 环境下,或者写 print 打印到控制台,习惯 Windows 环境滋养的,恐怕又要适应下新的非图形化环境。


    • 动静态检测工具欠缺


    缺乏圈复杂度、codex 套件安全检查(可以直接调用 C/C++ 的代码)、内存检查(可直接使用指针和调用 C 代码)。


    小结


    基本能用,但是一些提高效率的重要体验丧失,目前阶段如果给 Java/C++ 的开发环境打 5 分,Go 的环境,目前只能给 2 分,且 Go 一年差不多 2 个大版本,对开发环境也是个重要的挑战(Java/C++ 甚至用 5 年甚至 10 年前的环境),公司要做的工作还非常多,且要管控其版本快速迭代带来的切换冲击。Google 公司在还未成熟就早早开源的目的之一就是期望业界能够提供更多工具,而工具基本都是开源世界贡献,而 Android 基于 Java 开发,所以 Google 能直接拿来用,而 Go 作为一门全新语言,在开发环境方面,Go 目前还未及格。


    3、语言流行度和开源项目分析


    说到语言,必然会想到 TIOBE、PYPL 和 GitHub 的排名,我们看看它们的数据:


    • TIOBE 数据


    语言的热度必然得看权威的 TIOBE 世界语言排名, 2016 年 6 月最新数据排行榜:



    新语言 Go 的最新排名是 48 位,与 Java 的热度差距是 100 倍。2 年前的 2014 年 7 月,Go 语言排名 30 位,指数是 0.222%,2015 年 7 月 Go 未排入前 50,2016 年最近 5 月排名分别是:50+、38、48、44 和 42。


    近三十年语言热度排行榜:



    •  PYPL 的最新数据



    • GITHUB 的数据


    开源社区,挑选最具代表的 github 上的开源语言排名:



    点评


    主流编程语言始终具有强大的生命力,Java、C、C++、C#、Python、JavaScript、PHP 从近十年数据看,都未离开过前十名,其它语言扮演的是在某些情况下的一种可选角色,注意不是替代这些主流语言,因为目前还未见它们衰落的迹象。


    Java 近十年始终是王者;C/C++ 地位也始终稳固,在嵌入式、系统级编程方面始终占据统治地位,在动态语言方面;Python 的简洁和生态让它占据着胶水语言的角色,当然也有用它来写不那么苛求性能的服务端程序;而网站,PHP 和 JS 就不用多说了,70% 的网站依然是用 PHP 写的。


    Go 2009 年正式版本离发布还有两年就掀起了一阵子热潮,正如 Go 语言的之父所说,创造了另外一种角色,在 Python/Ruby 需要性能时的一种可选角色;而相对于 Java,它创造了更轻量级更高效率的一种角色,为撬动史前巨兽 Java 提供了敲门砖,但是语言、标准库和工具链的成熟度牵扯到关键的生产力,这方面它还未准备,而在性能方面,作为新语言,它的调度器也未准备好,还有诸多性能陷阱,看另外一篇文章单独论述。


    4、行业应用


    对于 Java、C、C++,前面已有说明,在生产力方面,Java 已经无所不包的航空母舰了,而在苛求性能方面,C/C++ 依然占据着牢固的地位。对于 Go,的确已经证明了它在需要性能时是 Python 与 Ruby 这些脚本语言的一个选项,而这些动态语言脚本基本应用在管理域:环境资源应用的监控和部署等,也有些把它们拿来做服务端开发,而在苛求性能时,这些语言的确就不擅长了;在 Java/C/C++ 所擅长的领域,成功的应用太多太多,Go 在某些场景下,比如数据分析或 HTTP 应用方面,它是一种可选的角色,而在通用和复杂应用业务域,无论语言、生态和成熟度,都未准备好。Go 要做的工作还很多,还需要更多地迭代。


    其它业界主流语言简要


    Python/JavaScript/C# 近十年,也是最流行的语言之一,与 Java/C/C++/PHP 语言一样在各自领域独领风骚,而这些语言在部门也或多或少有应用,但由于非业务模块,重视度没那么高,其实页面、工具和管理域,涉及到重要体验问题,还是需要引起足够重视,否则积累的代码多了,可维护性和体验都会带来越来越大的负担。


    1、Shell/Python


    历史遗产及其惯性,安装、部署、升级和监视管理任务等方面,基本还在使用 c shell 或 b shell 脚本,shell 的语法深晦,可读性极差,同时编辑调试环境都是最原始的,开发和维护效率基本都是最低的,而这些非业务部件,平时都是三不管的,积累的代码也不少,要专人熟悉 shell 的维护。而 Python 在处理字符串、容器和环境方面,是本文所列的语言中,最简洁生产力最高的语言。


    建议作业域的脚本尽量用 Python,在管理域,胶水语言的名号无出其右,而 Python 基本也是排行榜前五的语言。


    2、JavaScript/Typescript


    JavaScript 可以说是最流行的网页脚本语言了,但它的设计有两个一直被诟病的缺陷,一是太简单;二是弱类型,语法错误到运行时才会发现,应该没人没遇到过网页不知为啥跳出一个警告框的情况吧。当 JS 代码超过万行时,它的简单语法和弱类型会给维护人员带来巨大的负担,个人只写过几百行的 JS 页面,对弱类型基本无法忍受,以前也下载过新浪这样的复杂门户网站看 JS 代码,说实话,深入不下去,直接放弃。Typescript 出现,刚好是为了解决 JavaScript 这两个设计缺陷。


    对于 Typescript,或许习惯 JavaScript 会拒绝它的面向对象等增强表达力的语言特性,觉得是让简单变复杂。但另外一个特性,也就是免费为 JavaScript 增加编译时的类型检查,相信没有人会拒绝这样的特性,就跟写文章指出错误的做法。所以写 JS 页面的,还是切换到 TS 这个超集。


    3、C#


    C# 在华为就更小众了,但它也是最流行的语言之一,而真真能挑战 Java 地位就是 C#,可惜微软把它禁锢在 windows 系统,也限制了世界最顶尖的语言和编译器专家丹麦人 Anders Hejlsberg 的影响力,C# 目前正在逐步走向开源,同时它依附于目前最强大的集成环境 .net 也在走向开源。


    (更多华为资讯请关注华为开发者社区,华为自己的对外开放门户:http://developer.huawei.com/ict/cn/ ,不要问我叫啥,别人都叫我雷锋)



    展开全文
  • 什么是Java语言java语言简介

    万次阅读 2010-10-19 09:04:00
    Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,...
    Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。

      Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.4,最近版本为Java1.6。

      Java分为三个体系J2SE(Java2 Standard Edition),J2EE(Java 2 Platform,Enterprise Edition),J2ME(Java 2 Micro Edition)。

      Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C++语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。主要特性如下:

      1、Java语言是简单的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。

      2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。

      3、Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

      4、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。

      5、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。

      6、Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。

      7、Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。

      8、Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。

      9、Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。

      10、Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。

      11、Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。

      Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
    展开全文
  • 以下是2021年5月最新的高级编程语言排行榜,可以看到,Python已经超越Java语言跃居世界第二位,为什么Python越来越受欢迎了呢?看完以下几个例子,你就知道为什么了! 二、几个案例让你想学Python 2.1 交换变量值 ...

    一、前言

    C、Java、Python作为常据世界编程语言排行榜前三甲的语言,必然有其得天独厚的优势。以下是2021年5月最新的高级编程语言排行榜,可以看到,Python已经超越Java语言跃居世界第二位,为什么Python越来越受欢迎了呢?看完以下几个例子,你就知道为什么了!Python推崇的宗旨就是简洁、简单。
    在这里插入图片描述

    二、Python的优缺点

    首先,我们老生常谈,理论上阐述一下Python的优缺点。

    2.1 优势

    Python的优势主要有以下几个:

    • Python的语法非常简洁,没有变量类型。
    • Python是开源的,这意味着普罗众生皆可查阅Python代码,甚至为Python的发展贡献自己的一份力量
    • Python是解释型语言,这意味着可以跨平台运行
    • Python的功能强大,一些大神把能想到的功能都以第三方Python库的形式进行实现,我们只需调用这个库即可,你想想,连表情都有一个第三方库,Python可以说,除了生孩子,别的都能干!
      在这里插入图片描述

    2.2 不足

    Python也并不是完美无瑕的,任何一种语言都有其存在的道理,有其优势及劣势。Python也并不是没有劣势,劣势主要有2个:

    • Python的运行速度较慢,不过现在看来,这已经不是Python的劣势了。Python运行速度较慢说的是Python刚开源的时候。
    • 由于Python是开源的,因此Python代码的加密处理很困难,但这何尝又不是一种优势呢?

    三、5个案例让你有想学Python的冲动

    上述都是文字描述Python有多好多好,下面通过几个案例感受一下Python的简洁!看完你就想学Python了!

    3.1 交换变量值

    Python

    a, b = 3, 4
    a, b = b, a  # 变量值互换
    print(a, b)
    

    Python一行即可实现变量值互换,而C和Java呢?我们继续往下看。

    C

    int a = 3;
    int b = 4;
    int temp = a;
    a = b;
    b = temp;
    printf("a = %d, b = %d", a, b)
    

    Java

    int a = 3;
    int b = 3;
    int temp = a;
    a = b;
    b = temp;
    System.out.println(a);
    System.out.println(b);
    

    C和Java语言至少需要3行代码,而Python只需一行即可,这便是Python的优势所在,简洁简单。

    3.2 筛选列表

    Python

    # 选出比5大的数
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    a = [x for x in lst if x > 5]
    print(a)
    

    由于C语言中没有列表这一容器,所以在这里不进行代码演示。

    Java

    List list = new ArrayList();
    int i;
    for(i = 1; i < 10; i++){
    	list.add(i);
    }
    for(i =1; i<10; i++){
        if(i <= 5){
        	list.remove(i);
        }
    }
    

    Python有多简洁,在这里已经可以显而易见了。

    3.3 检查列表中是否有数字

    Python

    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    num = int(input('请输入要检验的数字:'))
    if num in lst:
    	print(num)
    

    Java

    List list = new ArrayList();
    int i;
    for(i = 1; i < 10; i++){
    	list.add(i);
    }
    Scanner scanner = new Scanner(System.in);
    int num = scanner.nextInt();
    for(i =1; i<10; i++){
        if(i == num){
        	System.out.println(i);
            break;
        }
    }
    

    3.4 超级超级简洁的Lambda表达式

    # 传入1个参数的Lambda表达式
    p = lambda x:x**2
    print(p(3))
    # 传入2个参数的Lambda表达式
    p = lambda x,y:x*(y**2)
    print(p(3,4))
    # 传入多个参数的Lambda表达式
    p = lambda x, y, z: x * y * z
    print(p(1, 2, 3))
    

    3.5 计算列表中偶数的和

    Python

    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    lst_sum = sum([x for x in lst if x % 2 == 0])
    print(lst_sum)
    

    Java

    List list = new ArrayList();
    int i;
    int sum = 0;
    for(i = 1; i < 10; i++){
    	list.add(i);
    }
    for(i = 1; i < 10; i++){
    	if(i % 2 ==0){
    		sum+=i;
    	}
    }
    System.out.println(sum);
    

    觉得写的不错的话,欢迎点赞+评论+收藏,这对我帮助真的很大很大很大!欢迎关注我的公众号!

    文章持续更新,可以关注微信公众号【医学图像人工智能实战营】获取最新动态,一个专注于医学图像处理领域前沿科技的公众号。坚持以实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。更有上百部深度学习入门资料免费等你来拿,只有实践才能成长的更快,关注我们,一起学习进步~

    在这里插入图片描述

    展开全文
  • Java语言基础

    万次阅读 2019-09-14 10:30:00
    Java语言基础 Java标识符是以字母、下划线或符号$开头,后接字母、下划线、符...
  • Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,...
  • Java春招面试题之Java语言基础类

    千次阅读 2020-02-26 18:24:41
    在用人单位的面试中,Java语言基础知识是考察的重点之一,也是一个合格Java程序员必须掌握的知识...Java语言基础主要涉及以下几个方面。 Java 的基本语言元素。 原始数据类型。 变量声明。 变量的初始化。 Java 源文...
  • Java基础-Java语言简介

    千次阅读 2017-01-11 15:34:57
    简述了JAVA语言的起源、特点和应用领域
  • C#语言 vs java语言

    千次阅读 热门讨论 2008-10-22 20:47:00
    搞了6+年的java开发,现在看C#语法的书籍,这才刚刚发现,原来C#语言java语言难学多了,以下从几个角度去比较c#和java语言,来一次C# VS Java或者说java vs c# 1.C#从C++继承过来的东西更多一些,比如操作符重载...
  • Java学习路线:day1 Java语言概述

    千次阅读 2020-04-09 13:19:42
    文章目录第1章Java语言概述1.1 软件开发介绍常用的DOS命令1.2计算机编程语言介绍1.3 Java语言概述Java简史Java技术体系平台1.4 Java程序运行机制及运行过程Java核心机制1.5 Java语言的环境搭建1.6 开发体验—...
  • java习题集第一章Java语言概述

    千次阅读 2019-05-27 10:44:41
    1.下列属于java语言鲁棒性特点的是: A.java能检查程序在变异和运行时的错误 B.java 能运行虚拟机实现跨平台 C.java 自己操纵内存减少了内存出错的可能性 D.java 还实现了真数组,避免了覆盖数据的可能 2. ...
  • Java程序员应该掌握的三种语言

    千次阅读 热门讨论 2006-04-28 08:13:00
    Dave Thomas认为Java程序员在学习其他的语言之前,应该掌握以下Java生态圈中的三种语言。原文地址:http://www.jroller.com/page/rolsen?entry=three_languages_for_java_programmers"1 JythonJython具有Java语言的...
  • java语言的主要特点

    千次阅读 2019-05-26 21:36:40
    Java语言是是一门面向对象编程语言,具有以下九大特点: 一.简单性: Java是纯面向对象语言,语法简单明了,易于掌握。 Java使用接口取代了多重继承,并且取消了指针,因为多重继承和指针会使程序变得复杂。 Java还...
  • java面试题26 java语言的下面几数组复制方法中,哪个效率最高? A for 循环逐一复制 B System.arraycopy C Array.copyOf D 使用clone方法 效率:System.arraycopy > clone > Arrays.copyOf > ...
  • TIOBE 8 月编程语言:C、Java 差距拉大,R 语言盛行

    万次阅读 多人点赞 2020-08-03 12:43:26
    C 语言依然保持强劲地增长势头,与第二名 Java 之间差距逐月增大,从上个月相差 1.35% 的份额逐步增长到 2.55% 的差额。 在 TIOBE Top 10 榜单中,R 语言上个月被 TIOBE 官方称之为“史无前例的高光时刻” , 本月...
  • JAVA与C#比较】语言选择

    千次阅读 2018-01-25 23:52:37
    JAVA与C#是当下使用率很高的高级语言中,最为相近的两门语言,在语言特性上非常相似,其差别比起其它流行的高级编程语言,例如c++、object-c、swift,也是最小的。在版本演进中,也存在相互借签、取长补短。java ...
  • 使用 Java 8 语言功能

    万次阅读 2017-12-04 14:51:06
    使用 Java 8 语言功能 本文内容: 支持的 Java 8 语言功能和 API启用 Java 8 功能和 Jack 工具链 配置 Gradle已知问题 Android 支持所有 Java 7 语言功能,以及一部分 Java 8 语言功能(具体因平台版本而异...
  • 一:Java语言概述

    千次阅读 多人点赞 2021-02-01 21:15:16
    文章目录01、 软件开发介绍1.1、常用的DOS命令02、计算机编程语言介绍03、 Java语言概述3.1、Java简史3.2、Java技术体系平台04、 Java程序运行机制及运行过程4.1、Java核心机制05、Java语言的环境搭建06、 开发...
  • 除此之外如Ruby、Python、OC等也都属于动态语言,而C、C++、Java语言则不属于动态语言。 动态类型语言,就是类型的检查是在运行时做的,是不是合法的要到运行时才判断,例如JavaScript就没有编译
  • Java面试题—Java语言有哪些优点

    千次阅读 2018-09-27 16:07:21
     Java语言是由( )语言改进并重新设计而来的。  A、Ada B、C++ C、Pascal D、BASIC 答案:A   Sun Microsystems公司对Java语言的描述如下:“Java is a simple, object-oriented, distributed, interpreted...
  • Java语言作为第一支持国际化的语言,在Internet从一开始就具有其他语言无与伦比的国际化的本质特性,查看Java所支持的语言及相应的版本信息可以采用以下代码进行查询
  • Java:推荐Java初学者之实现Java语言编程环境部署的两方法(图文教程)之详细攻略 目录 推荐Java初学者之实现Java语言编程环境部署的两方法(图文教程) T1、JDK语言软件开发包+Dos系统内操作+设置电脑...
  • Java到底是不是一纯面向对象语言

    万次阅读 2017-05-26 14:30:26
    Java——是否确实的 “纯面向对象”?让我们深入到Java的世界,试图来证实它。...在Java世界内一切都是对象,甚至包括字符串(String)这些都是对象(在 C 语言中,字符串是字符数组),那时候,我认为 Java
  • java是编译性语言,解释性语言

    千次阅读 2018-06-27 23:05:47
    看到一个对java的描述,恰好之前笔试也遇到的一个问题:java是解释性语言还 是编译性语言。书中对java的描述是这样的: java兼具编译性与解释性,java编译器会将java源码翻译成所谓的字节码(面向 虚拟CPU的指令集)...
  • 28、(多选题)下列Java语言的叙述中,正确的是() A.Java虚拟机解释执行字节码 B.Java的类是对具有相同行为对象的一抽象 C.Java中的垃圾回收机制是一个系统级的线程 D.JDK的库文件目录是bin 【正确答案】A,B,C ...
  • Java语言特点

    千次阅读 2013-04-05 11:42:18
    Java与C++语言相比,去掉了 C++语言的复杂性和二义性的成分,增加了安全性和可移植性的成分。Java语言具有如下特点:简单性、面向对象、平台无关性、可移植性、解释性、髙性能、动态性、可靠性和安全性、多线程、...
  • Java语言的优点

    千次阅读 2016-05-16 13:56:46
    面试题积累-Java语言的优点其他Java笔试面试题目: Java面试笔试试题积累(每天更新)Sun公司对Java的描述如下:”Java is a simple , object - oriented , distributed ,interpreted , robust , secure , architecture ...
  • Java语言概述与开发环境

    千次阅读 2016-08-15 17:59:33
    Java的诞生,以及java语言java开发环境,java基础知识
  • Java语言程序设计》✍基础知识整理

    万次阅读 多人点赞 2020-12-29 09:01:48
    Java语言程序设计 第1章 Java语言概述 Java语言比较特殊,它既是编译型语言又是解释型语言Java的源程序代码必须通过编译器将其编译为Java字节码(byte code)后才能运行,所以被称为编译型语言。但Java字节码不能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 555,382
精华内容 222,152
关键字:

java属于以下哪种语言

java 订阅