当前位置:首页>Java>Java教程>Java教程

Java教程

作者:微学网发布时间:2019-08-11 11:36:07

Java的诞生

Java:由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。

Java语言是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由当时任职太阳微系统的詹姆斯·高斯林(James Gosling)等人于1990年代初开发,它最初被命名为Oak。

Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

更多请参考Java历史

什么是Java

Java简介

Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的编程语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展,Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

Java编程语言的风格十分接近C++语言。继承了C++语言面向对象技术的核心,舍弃了容易引起错误的指针,以引用取代;移除了C++中的运算符重载和多重继承特性,用接口取代;增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。太阳微系统对Java语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言”

Java不同于一般的编译语言或解释型语言。它首先将源代码编译成字节码,再依赖各种不同平台上的虚拟机来解释执行字节码,从而具有“一次编写,到处运行”的跨平台特性。在早期JVM中,这在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的运行速度有了大幅提升。

与传统类型不同,Sun公司在推出Java时就将其作为开放的技术。全球的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同,此外,微软公司后来推出了与之竞争的.NET平台以及模仿Java的C#语言。后来Sun公司被甲骨文公司并购,Java也随之成为甲骨文公司的产品。

现时,移动操作系统Android大部分的代码采用Java编程语言编程。

Java技术体系

经过了多年的发展,Java早已由一门单纯的计算机编程语言,演变为了一套强大的技术体系。

Java设计者们将Java划分为3种结构独立但却彼此依赖的技术体系分支,它们分别对应着不同的规范集合和组件。

  • Java SE(标准版),主要活跃在桌面领域,主要包含了Java API组件。

  • Java EE(企业版),活跃在企业级领域,除了包含Java API组件外,还扩充有Web组件、事务组件、分布式组件、EJB组件、消息组件等,综合这些技术,开发人员完全可以构建出一个具备高性能、结构严谨的企业级应用,并且Java EE也是用于构建SOA(面向服务架构)的首选平台。

  • Java ME(精简版),活跃在嵌入式领域,称之为精简版的原因是,它仅保留了Java API中的部分组件,以及适应设备的一些特有组件。

Java技术体系

Java技术

前面提到Java是一种技术体系,现在来看一下组成这种技术体系的技术:

  • Java编程语言

  • 字节码

  • Java API,包括Java API类库和来自商业机构以及开源社区的第三方类库

  • Java虚拟机

很多时候人们只关注了第一点,因为第一点才是和工作切实相关的。

Java官方网站是如何描述什么是Java

Java官方网址https://www.java.com

  • 97% 的企业桌面运行 Java

  • 美国有 89% 的桌面(或计算机)运行 Java

  • 全球有 900 万 Java 开发人员

  • 开发人员的头号选择

  • 排名第一的部署平台

  • 有 30 亿部移动电话运行 Java

  • 100% 的蓝光盘播放器附带了 Java

  • 有 50 亿张 Java 卡在使用

  • 1.25 亿台 TV 设备运行 Java

  • 前 5 个原始设备制造商均提供了 Java ME

Java 是几乎所有类型的网络应用程序的基础,也是开发和提供嵌入式和移动应用程序、游戏、基于 Web 的内容和企业软件的全球标准。

经过了多年的发展,Java早已由一门单纯的计算机编程语言,演变为了一套强大的技术体系。是的,什么是Java,我想技术体系四个字应该是最好的概括了吧。

为什么要学Java?

因为Java是全球排名第一的编程语言,Java工程师也是市场需求最大的软件工程师,选择Java,就是选择了高薪。

为什么Java应用最广泛?

从互联网到企业平台,Java是应用最广泛的编程语言

  • Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行。

  • Java程序易于编写,而且有内置垃圾收集,不必考虑内存管理。

  • Java虚拟机拥有工业级的稳定性和高度优化的性能,且经过了长时期的考验。

  • Java拥有最广泛的开源社区支持,各种高质量组件随时可用。

  • Java语言常年霸占着三大市场:

互联网和企业应用,这是Java EE的长期优势和市场地位

  • 大数据平台,主要有Hadoop、Spark、Flink等,他们都是Java或Scala(一种运行于JVM的编程语言)开发的。

  • Android移动平台。

学了Java教程能干什么?

Java 可以用来做网站

Java可以用来编写网站,现在很多大型网站都用Jsp写的,JSP全名Java Server Pages。

它是一种动态网页技术,比如我们熟悉的163,一些政府网站都是采用JSP编写的。

所以学习Java的同学可以找开发网站方面的工作,而且现在找这方面的岗位比较多。

比如:网站开发,当然就是JSP+Servlet+JavaBean,一直以来都相当流行。

Java可以用来做安卓

Android是一种基于Linux的自由及开放源代码的操作系统,其源代码是Java。

所以市场上见到的手机系统例如MIUI ,阿里云,乐蛙等,都是修改源代码再发行的。

Java做安卓不单单是指系统,还有APP对于更多的开发人员来说,他们更多的时间是花在开发APP上面。

Android可以做游戏

或者你不知道,在以前诺基亚还很流行的时候,你玩的手机游戏有90%以上都是Java开发的。

当然现在已经很少人再去开发了,都转到安卓上去了。

电脑上也有java开发的游戏,最经典的是:《我的世界》(minecraft ,简称MC),当今世界最具人气和影响力的网络游戏之一《英雄联盟》(简称lol)。

Java可以做软件

一般编程语言都可以做软件的,Java 也不例外,例如Eclipse,MyEclipse等知名Java开发工具.有关开发软件组件,可以了解Java Swing编程 或者 awt 相关知识。

比如:企业级应用开发,这里是JAVA的天地,大到全国联网的系统,小到中小企业的应用解决方案,Java都占有极为重要的地位。

另外还有移动领域,典型的应用是手机游戏(国内主要是这方面),这里是J2ME的天地,其实应用范围是很广的。

Java的应用领域

网站开发

Java在网站开发领域占据了大部分席位。例如医疗救护,保险以及其他的很多的部门网站都是以Java为基础来开发。

移动互联

那么在移动方面,Java的运用也是相当的广泛,如果你还不知道,那么,你随手打开一个安卓手机,随便选一个app应用,他们就是使用Java语言编程完成的,虽然,app开发的语言与Java语言有一点不同,但是代码还是用Java语言编写的。

软件开发

常用的软件和开发工具都是运用Java来编写和开发的。目前为止Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。也是使用最多的计算机语言之一。

第三方交易系统

在目前看来金融服务业已经占有很大的地位了,它们也是Java编写,Java在安全、高效等方面都很强,例如很受欢迎的交易平台Murex ,它也是Java编写,并与许多的银行前台所连接,提供服务。

大数据技术

现在很多的大数据处理技术都是应用Java和其他技术,虽然Java在此领域并未有太大的占有率,但是如果Hadoop和 ElasticSearchas逐渐发展和壮大起来的话,Java在此领域还是有很大的潜力的。

科学应用方面

现如今,Java依然是科学应用中最好的选择。因为Java比C++或者其他语言相对其安全性、便携性以及其他高级语言的并发性更好。从java发展至今,在金融服务行业的大量使用,投资银行和电子商务应用的空间,任何一个学习Java的学者都有着光明的未来。Java将持续多年来控制软件的发展空间。Java在目前的移动互联网时代,是触手可及的,也是在生活中应用很多的,java的发展还会越加的壮大。

Java的优点

Java能获得如此广泛的认可,除了它拥有一门结构严谨、面向对象的编程语言之外,还有许多不可忽视的优点:

  • 它摆脱了硬件平台的束缚,实现了“一次编写、到处运行”。

  • 它提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题。

  • 它实现了热点代码检测和运行时编译及优化,这使得Java应用能随着运行时间的增加而获得更高的性能。

  • 它有一套完整的应用程序接口,还有无数来自商业机构和开源社区的第三方类库来帮助它实现各种各样的功能。

  • 它与身俱来对分布式技术的支持就比较完善。

  • 除了以上这些优点,Java真正强大的地方是因为拥有全世界最多的技术拥护者开源社区支持,他们无时无刻都保持着最充沛的体力与思维,一步一步地驱动着Java技术的走向。

关于Java的批评

Java试图通过新的方式解决软件编写的复杂性。很多人认为Java语言做到了它承诺的一切。但是Java并不是一门完美的语言。

整体性问题

并不是所有的工程和环境需要企业等级的复杂性,比如一个简单的个人网站或者独自编程的研发工程师所写的程序。

这些研发工程师会发现Java的复杂管理对于自己要做的程序来说过于强大了。

一些人觉得Java在面向对象上面做的没有Ruby和Smalltalk纯粹。但是最新出现的用Java实现的语言Groovy解决了这些问题。

作为一种已经创建的新技术,Java显然综合了很多语言的特性,比如C++、C语言、Python等等。

一些对于Java的评论认为Java的不变性在动摇。

语言问题

有些研发工程师不喜欢原始类型(primitive type)和类别(class)的分离,尤其是那些曾经使用过Smalltalk和Ruby的程序员。

Java的代码相对于其他的代码来说过于冗长,这与它的轻便化声明相违背。

Java是一种单继承的语言。

这也导致了程序师在试图使用多重继承时候的不便,而很多语言都可以使用这个特性。

但是Java可以使用接口类,把多重继承可能导致的风险减少到最小。

Java不支持运算符重载,这是为了防止运算符重载使得代码的功能变得不清晰。

但是用Java实现的语言Groovy可以进行运算符重载。

过去Java对于文本的操作和其他语言,比如Perl和PHP相比差的较多,但Java在1.4版本时候引入了正则表达式

至Java 1.7为止,Java语言不支持闭包(closure)和混入(mixin)特性。

Java 1.8加入lambda表达式(Lambda Expressions)。

类库问题

使用Swing平台编写的带有GUI(图形用户界面)的程序和其他原始程序非常不同。

选用AWT工具包编写程序的程序师看到的都是原始接口,而且也无法获得先进的GUI编程支持,如果使用的话,就要提供每个平台上面所需的API,这将是一项庞大的工程。

Swing则是完全用Java语言所写的程序,避免了接口元素重复的问题,只使用所有平台都支持的最基本的绘图机制。

但是很多用户不知道如何在Java风格和Windows风格之间进行转换,结果造成了Java程序的接口在很多程序中非常特殊。

苹果计算机已经提供了优化过的Java运行时程序,包含了Mac OS X的经典Aqua接口风格。

在IBM捐赠给Eclipse基金会的SWT界面框架中,用户会看到熟悉的本地风格界面。但这又引起了不同喜好的开发人员之间的争论。

性能问题

讨论Java的程序的性能经常是有误导性

主要是因为Java编译器和虚拟机的不同对Java代码的性能影响比语言本身的影响大的多。

据IBM的数据,在同样的硬件上2001年时的IBM JDK版本的性能是1996年的JDK版本的十倍左右。

而即使是在同一时期,不同公司的JDK和JRE的性能也不一样,比如SUN、IBM、BEA等公司都有自己开发的JDK和JRE。

Java语言的一些特性不可避免的有额外的性能代价,例如数组范围检查、运行时类型检查等等

Java程序的性能还会因为不同的动态复杂性和垃圾处理机制使用的多少而各有不同。

如果JVM的实现比较优化的话,那么这些功能甚至可以增加存储器分配的性能。

这和总是使用STL或者托管C++的程序的情况类似。

尽管如此,仍然有许多人认为Java的性能低

这部分归因于Sun公司最初的JVM实现使用未优化的解释机制来运行字节码。

一些新版本的JVM使用Just-In-Time(JIT)编译器,在加载字节码的时候将其编译成针对运行环境的本地代码来实现一些本地编译器的优化特性。

Just-In-Time机制和本地编译的性能比较仍旧是一个有争议的话题。JIT编译需要很多时间,对于运行时间不长或者代码很多的大型程序并不适宜。但是不算JIT编译阶段的话,程序的运行性能在很多JVM下可以和本地编译的程序一争短长,甚至在一些计算比较密集的数值计算领域也是这样。

当前,Java已经使用更先进的HotSpot技术来代替JIT技术,Java的性能有了更进一步的提升。

另外,在使用-server选项运行Java程序时,也可以对Java进行更深入的优化,比如在运行时将调用较多的方法内联(inline)到程序中来提高运行速度,这就是所谓的“动态优化”,而本地编译器是无法做到这一点的;这也是一些Java代码比对应用C/C++等语言编写的本地代码运行的更快的原因之一。

微软的.NET平台也使用JIT编译器,所以也有类似问题。

Java的设计目的主要是安全性和可携性

所以对于一些特性,比如对硬件架构和存储器地址访问的直接访问都被去除了。

如果需要间接调用这些底层功能的话,就需要使用JNI(Java本地接口)来调用本地代码,而间接访问意味着频繁调用这些特性时性能损失会很大,微软的.NET平台也有这样的问题。

所以到当前为止,性能敏感的代码,例如驱动程序和3D电子游戏,还是大多使用本地编译,甚至直接以不直接支持面向对象的C语言或机器代码编写。

但最近已经有了许多用纯Java编写的3D游戏,其效果与用C语言编写的不相上下,例如“合金战士”(英文名:Chrome)。

这主要是因为新版的Java 3D技术已经能像C++一样调用硬件加速,也就是使用显卡来加速,无论是C++还是Java语言写的3D游戏都是使用显卡及GPU来处理,从而使得CPU可以专注于其他方面的工作。