为什么Java越来越受欢迎

Java是Sun Microsystems于1995年5月推出的Java面向对象编程语言和Java平台的总称。由詹姆斯·高斯林及其同事开发,并于1995正式推出。

Java分为三个系统:

Java SE (J2SE) (Java 2平台标准版)

Javaee (J2EE) (Java 2平台企业版,Java平台企业版)

Java me (J2ME) (Java平台微型版)。

2005年6月,JavaOne大会召开,SUN公司将Java SE 6公之于众。此时,各种版本的Java都已经改名,取消了数字“2”:J2EE改名为Java EE,J2SE改名为Java SE,J2ME改名为Java ME。

主要特性

Java语言很简单:

Java语言的语法与C语言和C++语言非常接近,这使得大多数程序员很容易学习和使用。另一方面,Java抛弃了那些C++中很少使用的、难以理解和混淆的特性,比如运算符重载、多重继承和自动强制类型转换。特别是,Java语言不使用指针,而是使用引用。并提供自动垃圾收集,让程序员不用担心内存管理。想学Java可以来这个群。先是220,中间是142,最后是906。有很多学习资料可以下载。

Java语言是面向对象的;

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

Java语言是分布式的:

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

Java语言是健壮的:

Java的强类型机制、异常处理和自动垃圾回收是Java程序健壮性的重要保证。丢弃指针对Java来说是明智的选择。Java的安全检查机制使得Java更加健壮。

Java语言是安全的:

Java通常用于网络环境。为此,Java提供了一种安全机制来防止恶意代码攻击。除了Java语言的很多安全特性之外,Java对通过网络下载的类有一个安全防护机制(ClassLoader),比如分配不同的命名空间防止用相同的名字替换本地类,检查字节码,为Java应用提供一个安全管理机制(Class SecurityManager)来设置安全防护。

Java语言是架构中立的:

Java程序(带有Java后缀的文件)在Java平台上被编译成与架构无关的字节码格式(带有class后缀的文件),然后可以在任何实现这个Java平台的系统上运行。这种方法适用于异构网络环境和软件分发。

Java语言是可移植的:

这种可移植性来自于架构的中立性。此外,Java还严格规定了每个基本数据类型的长度。Java系统本身具有很强的可移植性,Java编译器用Java实现,Java的运行环境用ANSI C实现。

Java语言是解释性的:

如上所述,Java程序在Java平台上被编译成字节码格式,然后可以在任何实现这个Java平台的系统上运行。在运行时,Java平台中的Java解释器解释并执行这些字节码,执行过程中需要的类在join阶段加载到运行时环境中。

Java是高性能的:

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

Java语言是多线程的:

在Java语言中,线程是一个特殊的对象,它必须由Thread类或其子类创建。创建线程通常有两种方式:一种是通过使用Thread(Runnable)类型的构造函数将带有Runnable接口的对象包装成线程;另一种是从thread类派生一个子类,重写run方法,用这个子类创建的对象就是一个线程。值得注意的是,Thread类实现了Runnable接口,所以任何线程都有它的run方法,run方法包含了线程想要运行的代码。线程的活动由一组方法控制。Java语言支持多线程的同时执行,并提供了多线程之间的同步机制(关键字是synchronized)。

Java语言是动态的:

Java语言的设计目标之一是适应动态环境。Java程序需要的类可以动态加载到运行环境中,也可以通过网络加载。这也有利于软件升级。此外,Java中的类有一个运行时表示,可以检查运行时的类型。

而众所周知的Android又推动了Java语言的发展。

那么我们来谈谈Android开发为什么要用Java?

以下是知乎一位网友的回答:

首先,我们需要选择一种语言来开发本地app。

那么,我们首先做了什么?

从现有语言中选择一种语言。

那么首先考虑的就是冷门语言和没前途的语言不在选择范围内。

——因为没人用,图书馆就少了。因为库少了,不会好用。因为不管用。所以用的人少。生态圈的核心理念。

-这个世界上只有C++/Java吗?肯定不是。因为有些语言很有前途。最大的特点就是。简化了程序员的负担。或者更有效率。未来肯定是主流。

那么我们共同的、有前途的语言有哪些呢?

C/c++/Java/c#/Python/Ruby/Go/JavaScript+Html

好的。这些是我们经常使用的语言。我们正在考虑的是如何一步一步地淘汰这些语言。那就只剩下Java的了。

第一个被踢出去的是c,到目前为止,很少有超过654.38+百万行代码的大型图形界面程序是用c的,因为错误处理复杂,没有纠错机制。使得程序非常容易崩溃。同时。因为c不是面向对象的。然后工程开发就很麻烦了。

我相信现在不会有人主动说了。用C开发多界面程序App。

是C#一直在开球。我为什么要用一个天生用来对付Java的?或者微软私货的语言。没错。Android是开源的。而C#注定不是一个适合开源世界的语言。

那我们继续踢语言:

应该强调语言还是忽视语言?

Java/C++/C#/Go/C是一门厚重的语言。

Python/Ruby/JavaScript+Html/是一种轻语言。

没错。在我心目中,划分语言的标准基本属于这个,只要需要在代码上高效就行。那就是强调语言。

首先讲究语言的是运营效率。然后关注工程。

轻语注重开发效率和敏捷开发。

回到我们选择语言的原则。

我们想开发一个本地应用程序。还是在性能不高的手机上。

然后在C以外的开发语言中,最高效的操作是C++,然后是Java。

然后轻语会被一个个踢出去。

Ruby在网页上有事做。但是图书馆太少了。图形库比较少,开发者都是web用户。被踢。

JavaScript+Html-->;这是未来统一的趋势。但现在我们正在寻找一种语言来开发本地应用程序。

加上真诚的html+JavaScript有先天劣势。(效率+线下)

Python有完整的库。有一个非常受欢迎的社区。也有在手机上开发的尝试。(诺基亚做到了这一点。Ubuntu Phone的UML也是类似python的语言。Google也是python的大用户。效率是问题。但不是绝对的。先对Python实现有所保留。

所以我们再来看看这一轮入围的四种语言。

Java/C++/Python/Go

再说Go Go语言还不成熟。图书馆不多。开发者很少。但是作为谷歌的主要语言。很有可能。谷歌将提供基于Go的Android sdk。至少现在Android的主要语言不会是Go。

还有三扇门

C++/Python/Java

C++重新运行效率。但是跨平台比较弱。很难发展。工藤,用的人很多。

Python,二次开发效率。高跨平台。开发难度低,库多,用的人多。

Java .重新开发效率。没有python高效,也没有C++高效。开发难度低。工藤。很多人用。

然后回到需求:

谷歌想要一种语言来开发本地应用。谷歌希望筛选出底层硬件的差异。实现是开发者的统一平台。

同时。对于现阶段的手机平台来说。功耗和性能。是一个无法回避的问题。

那么这种语言的跨平台要求是非常高的。同时效率也很高。

说Python:效率真的达不到它的通用手机要求。尤其是对于像图像处理这样的高计算操作。还有。社区是不能和C++/Java比的。意味着库的数量没有Java和C++多,开发人员跟Java和C++不是一个层次的。

说C++:用过JNI的人都知道本地的C/C++库,至少要编译几次。不同的框架代表不同的编译环境。并且直接用C++编译运行。C++不能很好的屏蔽硬件差异。因此,调试对于开发来说是一项艰巨的任务。

C++不是很好的工程开发语言。

有裂缝吗?第四季度.你可以用框架筛掉大部分细节操作。Qt5.0支持Android。

为什么不呢?估计是Qt是不是谷歌产品的问题。

说Java:虚拟机是核心。因为虚拟机确实可以屏蔽很多开发上的差异。并通过虚拟机。开发者只需要在打包的时候翻译成运行代码,而不需要翻译成机器码。很多差异是通过虚拟机解决的。而且效率损失不是很严重。

而且Java比C++更受开源和业界的欢迎。甚至Java也有版权问题。。。

我们筛选出最基本的硬件差异。通过Linux,屏蔽了手机的一些基本功能差异。然后提供一个纯方法给开发者开发测试。只能通过虚拟机。而这个虚拟机需要讲性能。

谷歌建立了一个Davlik虚拟机。没错。这是安卓的核心。就是因为性能要求高。不得不重新开发虚拟机。Davlik是一个非常高效的虚拟机。其他常用的库都有,都是现成的。不一定要自己写。打包吧。

还有一些库和应用程序必须进行效率测试。怎么办。

用JNI技术调用C++

对,就是这样。

为什么语言Object-C忽略了我说的大部分需求?因为苹果有能力创造更好的语言。对于Android,Google只是在开源社区中选择一种语言。

还有。ObjectC生于苹果,死于苹果。兼容性。我不需要考虑。所以人们才敢用Object-C,Android旨在实现真正的跨平台。只能选择Java。