Notes 20180506 : Java程序设计语言概述
2.Java程序设计语言概述
如果对于开发语言的排行榜有所关注的话,那么会发现很长一段时间以来Java都是位居榜首的高级开发语言,作为一个Java开发者,为此感到骄傲的同时也深感忧虑,骄傲的是自己接触的开发语言是如此的强大,忧虑的是万一哪一天Java市场占有率不再,那我们何去何从呢(Oracle收购Sun后这种忧虑日深,Oracle起诉谷歌,更是对于开源的Java开源的一种忧虑)?不过这都是小程序员的我来说是杞人忧天了,在Java没落之前我们应该先将Java搞清楚才对,然后由此深入了解计算机的世界,对于Java程序设计语言,我们主要通过几方面来学习:语言的历史,语言的基本构成,面向对象,字符串与数字,常见的工具类,集合,IO,多线程等。
今天的学习主要是介绍Java程序设计语言的概述,内容讲解Java是怎么产生的,有哪些优点。下面开始今天的学习;
前言
Java是一门面向对象编程语言,是源于C++语言,它不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。
2.1 Java简介
Java是一种高级的面向对象的程序设计语言。使用Java语言编写的程序是跨平台的,从PC机到手持电脑都有Java开发的程序和游戏,Java程序可以在任何计算机、操作系统和支持Java的硬件设备上运行。
2.1.1 Java语言的历史
20世纪90年代,硬件领域出现了单片式计算机系统,这种价格低廉的系统一出现就立即引起了自动控制领域人员的注意,因为使用它可以大幅度提升消费类电子产品(如电视机顶盒、面包烤箱、移动电话等)的智能化程度。Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用。
由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。另外由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题。为了解决困难,他们首先着眼于语言的开发,假设了一种结构简单、符合嵌入式应用需要的硬件平台体系结构并为其制定了相应的规范,其中就定义了这种硬件平台的二进制机器码指令系统(即后来成为“字节码”的指令系统),以待语言开发成功后,能有半导体芯片生产商开发和生产这种硬件平台(这其实也是Java跨平台设计的由来)。对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。(OaK就是Java语言的前身),这个名字源于James Gosling 办公室窗外的一颗橡树(OaK)。
2.1.2 什么是Java语言
Java是于1995年由Sun公司推出的一种极富创造力的面向对象的程序设计语言,它是由有Java之父之称的Sun研究院院士詹姆斯.戈士林博士亲手设计而成的,并完成了Java技术的原始编译器和虚拟机。Java的最初名字是OAK,在1995年被重命名为Java,正式发布。
Java是一种通过解释方式来执行的语言,其语法规则和C++类似。同时,Java也是一种跨平台的程序设计语言。用Java语言编写的程序,可以运行在任何平台和设备上,如跨越IBM个人电脑、MAC苹果计算机、各种微处理器硬件平台,以及Windows、UNIX、OS/2、MAC OS 等系统平台,真正实现“一次编写,到处运行”。Java非常适于企业网络和Internet环境,并且已成为Internet中最具影响力、最受欢迎的编程语言之一。
与目前常用的C++相比,Java语言简洁的多,而且提高了可靠性,除去了最大的程序错误根源,此外他还有较高的安全性,可以说它是有史以来最为卓越的编程语言。
Java语言编写的程序既是编译型的,又是解释型的。程序代码经过编译之后转换为一种称为Java字节码的中间语言,Java虚拟机(JVM)将对字节码进行解释和运行。编译只进行一次,而解释在每次运行程序时都会进行。编译后的字节码采用一种针对JVM优化过的机器码形式保存,虚拟机将字节码解释为机器码,然后在计算机上面运行。Java语言程序代码的编译和运行过程如图1.1所示。
图1.1 Java程序的编译和运行过程
2.1.3 Java的应用领域
借助Java,程序开发人员可以自由地使用现有的硬件和软件系统平台。这是因为Java是独立于平台的,它还可以应用于计算机之外的领域,Java程序可以在便携式计算机、电视、电话、手机和其他的大量电子设备上运行。Java的用途不胜枚举,他拥有无可比拟的能力,其节省的时间和费用也十分可观。Java的应用领域主要有以下方面:
- 桌面应用系统开发。
- 嵌入式系统开发。
- 电子商务应用。
- 企业级应用开发。
- 交互式系统开发。
- 多媒体系统开发。
- 分布式系统开发。
- Web应用系统开发。
Java无处不在,它已经拥有几百万个用户,其发展速度要快于在它之前的任何一种计算机语言。Java能够给企业和最终用户带来数不尽的好处。Oracle公司董事长和首席执行官Larru Ellison说过:“Java正在进入企业、家庭、和学校。它正在像Internet本身一样成为普遍存在的技术。”
如果仔细观察,就会发现Java就在我们身边,如我们经常使用的Java开发工具Eclipse、NetBeans、JBuilder等,另外还有RSSOwl、Limewire、Azureus、CyberDuck、OpenOffice等优秀软件都是使用Java编写的。此外,各手机厂商都为自己的产品提供了Java技术的支持,各种手机上的Java程序和游戏已经数不胜数。
2.1.4 Java的版本
自从Sun公司推出Java以来,就力图使之无所不能。Java发展至今,按应用范围分为三个版本,即Java SE、Java EE、Java ME,也就是Java ONE(Open Net Environment)体系。本节将分别介绍这3个Java版本。
1.Java SE
Java SE是Java的标准版,主要用于桌面应用程序的开发,同时也是Java的基础,它包含Java语言基础、JDBC(Java数据库连接性操作)、I/O(输入输出)、网络通信、多线程等技术。Java SE的结构如图1.2所示。
图1.2 Java SE的结构
2.Java EE
Java EE是Java的企业版,主要用于开发企业级分布式的网络程序,如电子商务网站和ERP(企业资源规划)系统,其核心为EJB(企业Java组件模型)。Java EE的结构如图1.3所示。
图1.3 Java EE的结构
3.Java ME
Java ME主要应用于嵌入式系统开发,如掌上电脑、手机等移动通信电子设备,现在大部分手机厂商所生产的手机都支持Java技术。Java ME的结构图如图1.4所示。
图 1.4 Java ME的结构
2.1.5 怎么学好Java
如何学好Java语言,是所有初学者需要共同面对的问题,其实每种语言的学习方法都大同小异,初学者需要注意的主要有以下几点:
- 明确自己的学习目标和大的方向,选择并锁定一门语言,按照自己的学习方向努力学习,认真研究。
- 初学者不要看太多的书,先找本相对基础的书系统的学习。很多程序开发人员工作了很久也只是熟悉部分基础而已,并没有系统地学习Java语言。
- 了解设计模式。开发程序必须编写程序代码,这些代码必须具有高度的可读性,这样编写的程序才能调试、维护和升级的价值。学习一些设计模式,能够更好的把握项目的整体结构。
- 不要死记语法。在刚接触一门语言,特别是Java语言时,掌握好基本语法,并大概了解一些功能即可。借助开发工具(如Eclipse或NetBeans)的代码辅助功能,完成代码的录入,这样可以快速进入学习状态。
- 多实践,多思考,多请教。仅读懂书本中的内容和技术是不行的,必须动手编写程序代码,并运行程序、分析运行结构,从而对学习内容有个整体的认识和肯定。用自己的方式思考问题、编写代码来提高编程思想。平时多请教老师或经理,和其他人多沟通技术问题,提高自己的技术和见识。
- 不要急躁。遇到技术问题,必须冷静对待,不要让自己思维混乱,保持清醒的头脑才能分析和解决各种问题。可以尝试用歌和散步等方式来放松自己。
- 遇到问题,首先尝试自己解决,这样可以提高自己的程序调试能力,并对常见问题有一定的了解,明白出错的原因,甚至举一反三,解决其他关联的错误问题。
- 多查阅资料。可以经常到Internet上搜索相关资料或解决问题的方法,网络上已经摘录了很多人遇到的问题和不同的解决方法,分析这些解决问题的方法,找到最适合自己的方法。
- 多阅读别人的源代码。不但要看懂别人的程序代码,还要分析编程者的编程思想和设计模式,并融为己用。
2.1.6 Java API文档
API的全称是 Application Programming Interface,即应用程序编程接口。Java API文档是Java程序开发不可缺少的编程词典,并记录了Java语言中海量的API,主要包括类的继承结构、成员变量和成员方法、构造方法、静态成员的详细说明和描述信息。可以在Java网站http://java.sun.com中找到最新版本的JDK文档(即API文档),Java API文档的页面效果如图1.5所示。
图1.5 Java API文档页面
2.1.7 Java语言组成
Java 由四方面组成:
●Java编程语言,即语法。
●Java文件格式,即各种文件夹、文件的后缀。
●Java虚拟机(JVM),即处理*.class文件的解释器。
●Java应用程序接口(Java API)。
2.2 Java语言的特性
Java语言的作者们编写了具有广泛影响的Java白皮书,里面详尽地介绍了他们的设计目标以及实现成果,还用简短的篇幅介绍了Java语言的特性。下面将对这些特性进行扼要的介绍。
2.2.0 简单
Java语言的语法简单明了,容易掌握,并且是纯面向对象的语言。Java语言的简单性主要体现在以下几个方面:
- 语法规则和C++类似。从某种意义上讲,Java语言是由C和C++语言演变而来的,所以C程序设计人员可以很容易地掌握Java语言的语法。
- Java语言对C++进行了简化和提高。例如,Java使用接口取代了多重继承,并取消了指针,因为指针和多重继承通常使程序变得复杂。Java语言还通过实现垃圾自动收集,大大简化了程序设计人员的资源释放管理工作。
- Java提供了丰富的类库和API文档以及第三方开发包,另外还有大量的基于Java的开源项目,JDK(Java开发者工具箱)已经开放源代码,读者可以通过分析项目的源代码,从而提高自己的编程水平。
2.2.1 面向对象
面向对象是Java语言的基础,也是Java语言的重要特性,它本身就是一种纯面向对象的程序设计语言。Java提倡万物皆对象,语法中不能在类外面定义单独的数据和函数,也就是说,Java语言最外部的数据类型是对象,所有的元素都要通过类和对象来访问。
面向对象也可以对比与面向过程来理解:面向对象是相对于面向过程而言的,面向过程着重于功能的实现过程,而面向对象则是将相同功能的实现封装进一个对象,然后通过调用这个对象来侧重于功能,着重于能够实现功能的对象。
2.2.2 分布性
Java的分布性包括操作分布(服务分布式)和数据分布(数据分布式),其中操作分布是指在多个不同的主机上布置相关操作,而数据分布是将数据分别存放在多个不同的主机上,这些主机是网络中的不同成员。Java可以凭借URL(统一资源定位符)对象访问网络对象,访问方式与访问本地系统相同。
2.2.3 可移植性
Java程序具有与体系结构无关的特性,可以方便的移植到网络上的不同计算机中。同时,Java的类库中也实现了针对不同平台的接口,使这些类库可以移植。举例来说C++的数据类型中int类型并不是固定的长度大小,而是根据环境或编译器指定的,而在Java中数据长度是固定的,这就使得Java在移植时不用考虑数据是否会存在溢出的情况,再比如,在针对本地方法调用时Java做了很好的处理,使得不管在Windows或Unix中都能够很好的运行。
2.2.4 解释型
运行Java程序需要解释器。任何移植了Java解释器的计算机或其他设备都可以用Java字节码进行解释执行。字节码独立于平台,它本身携带了许多编译时的信息,使得连接过程更加简单,开发过程更加迅速,更具探索性。
2.2.5 安全性
Java语言删除了类似C语言中的指针和内存释放等语法,有效的避免了非法操作内存。Java程序代码要经过代码校验、指针校验等很多测试步骤才能够运行,所以未经过允许的Java程序不可能出现损害系统平台的行为,而且使用Java可以编写防病毒和防修改的系统。
2.2.6 健壮性
Java程序的设计目标之一,是编写多方面的、可靠的应用程序,Java将检查程序在编译和运行时的错误,并消除错误。类型检查能帮助用户检查出很多在开发早期出现的错误。集成开发工具(如Eclipse、NetBeans)的出现也使编译和运行Java程序更加容易。
2.2.7 多线程
多线程机制能够使应用程序在同一时间并行执行多项任务,而且相应的同步机制可以保证不同线程能够正确地共享数据。使用多线程,可以带来更好的交互能力和实时行为。Java提供了很好的多线程机制。
2.2.8 高性能
Java编译后的字节码是在解释器中运行的,所以它的速度较多数交互式【交互的意思就是你和程序对话.例如你点击一个按钮,然后程序弹出一个窗口"您真的要退出吗?"这样你就可以选择了.这个就叫交互.目前大部分的程序都是交互程序。】应用程序提高了很多。另外,字节码可以在程序运行时被翻译成特定平台的机器指令,从而进一步提高运行速度。
2.2.9 动态
Java在很多方面比C和C++更能适应发展的环境,可以动态调整库中方法和增加变量,而客户端却不需要任何更改。在Java中进行动态调整是非常简单和直接的。
2.2.10 体系结构中立
Java编写的程序经过编译生成字节码。这个字节码不仅可以很容易地在任何机器上执行,而且还可以动态地翻译成本地机器代码。这是Java体系结构中立的体现,但这还是依赖于JVM实现的。
总结
得益于Java的跨平台和丰富的工具包支持,Java在如今的互联网时代已经成为一门重要的开发语言了;虽然现在计算机技术日益进步,但是选择Java仍不失为明智自居。
深究:Java跨平台
每次谈到Java的跨平台,都有意犹未尽的意思,这也是为什么这章,我花了很大的篇幅在Java的历史上面的原因,为此,我们单独作为一个问题,在另一篇文章中进行了探讨,想要了解的可以参见深究Java跨平台。
Notes 20180506 : Java程序设计语言概述的更多相关文章
- Java程序设计环境概述
本文主要Java程序设计环境的要点,以及相关注意事项. 一.安装Java开发包 Oracle公司为Linux.Mac OS X.Solaris和Windows提供了Java开发工具包(JDK)的最新. ...
- 关于学习JAVA程序设计语言的回顾与展望
回顾篇 时光荏苒,大学生活已然过半.看了老师分享的几篇博文,我的内心是震憾并且惭愧的.相比别人,自己做的实在是不够多,不够好.在刚刚结束的大二上半学期,我学习了JAVA初级程序设计,虽然每节课都认真听 ...
- Notes 20180507 : Java程序设计之环境搭建与HelloWord
3 HelloWorld 不管从事什么工作那么一个工作环境总是必不可少的,那怕你只是要写篇文章,一张平坦的书桌和流利的书写笔总是能帮助我们完成工作的,Java开发更是如此.在开始今天的HelloWor ...
- MOOC 编译原理笔记(一):编译原理概述以及程序设计语言的定义
编译原理概述 什么是编译程序 编译程序指:把某一种高级语言程序等价地转换成另一张低级语言程序(如汇编语言或机器代码)的程序. 高级语言程序-翻译->机器语言程序-运行->结果. 其中编译程 ...
- 20155321 2016-2017-2 《Java程序设计》第一周学习总结
学习目标 [√]了解Java基础知识 [√]了解JVM.JRE与JDK,并下载.安装.测试JDK [√]了解PATH.CLASSPATH.SOURCEPATH的作用并会设置 [√]初步使用IDE(推荐 ...
- 20145235李涛《Java程序设计》第一周学习总结
教材学习内容总结 JAVA三大平台:Java SE(针对企业).Java EE(针对开发者) .Java ME(针对开发小型消费类电子产品) 其他 Java SE四个组成部分:JVM .JRE. JD ...
- 《Java程序设计》终极不改版【下】
package 大学生信息管理系统; import java.awt.event.*; import javax.swing.*; import java.awt.*; import java.uti ...
- 20155228 2016-2017-2 《Java程序设计》第1周学习总结
20155228 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 这部分内容是以教材为基础,根据个人的理解来描述的,有的地方的理解和表述可能不规范甚至不正确, ...
- 20155208 2006-2007-2 《Java程序设计》第1周学习总结
20155208徐子涵 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 浏览教材 每章提出自己存在的问题 chapter1:JDK和JRE的区别体现在什么地方 ...
随机推荐
- BZOJ1968 [Ahoi2005] 约数研究
Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input ...
- C++学习笔记(2)----模板
1. 与其他任何类相同,我们既可以在类模板内部,也可以在类模板外部为其定义成员函数,且定义在类模板内的成员函数被隐式声明为内联函数. 2. 默认情况下,对于一个实例化了的类模板,其成员只有在使用时才被 ...
- Vue.js双向绑定原理
Vue.js最核心的功能有两个,一个是响应式的数据绑定系统,另一个是组件系统.本文仅仅探究双向绑定是怎样实现的.先讲涉及的知识点,再用简化的代码实现一个简单的hello world示例. 一.访问器属 ...
- 13.用别名(alias)创建你自己的命令
现在是时候,感受第一次编程经历了!我们将用 alias 命令创建我们自己的命令.但在 开始之前,我们需要展示一个命令行小技巧.可以把多个命令放在同一行上,命令之间 用”;”分开.它像这样工作: com ...
- Mysql备份 -----innobackupex
一,原理及介绍〇 xtrabackup能做哪些 对InnoDB引擎的表做热备 增量备份 流压缩传输到另外的服务器上 在线移动表 更简单的创建从库 备份时不增加服务器 ...
- java笔记--关于多线程状态的理解和应用
关于多线程的状态 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3890266.html "谢谢-- 线程共有6种状态:1 ...
- 一些很酷的.Net技巧 .
一..Net Framework 1. 如何获得系统文件夹 使用System.Envioment类的GetFolderPath方法:例如: Environment.GetFolderPath( En ...
- ASP.net Substitution 页面缓存而部分不缓存的实现方法
在ASP.NET中要实现部分内容非缓存,而其它的都需要缓存输出,可以使用Substitution控件实现. <%@ Page Language="C#" AutoEventW ...
- 乘风破浪:LeetCode真题_021_Merge Two Sorted Lists
乘风破浪:LeetCode真题_021_Merge Two Sorted Lists 一.前言 关于链表的合并操作我们是非常熟悉的了,下面我们再温故一下将两个有序链表合并成一个的过程,这是基本功. 二 ...
- SRAM(静态)存储器芯片的读/写周期
一. 要保证正确地读/写,必须注意CPU时序与存储器读/写周期的配合.一般存储器芯片手册都会给出芯片读/写周期的时序图. Intel 2114芯片的读.写周期时序如图所示. 二. 读周期 读操作时,必 ...