Java企业实训 - 01 - Java前奏
前言:
虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到。
一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目,这期间的艰难也只有他自己知道。
也正是如此,真心觉得一套系列性的文档是多么重要,因此决定整理一下所有知识点,还有网上热销的书籍,以及那些简明扼要的例子,搞一个系列性的参考文档。
这套所谓的“Java企业实训”,也算是给自己一个深造基础的机会吧。
各位觉得还不错的,点点赞啥的,多一分支持 多一分鼓励 多一分爱意。哈哈。
Java企业实训 - 01 - Java前奏
本篇目录:
1. 什么是Java
1.1 Java 语言发展简史
2. 认识Java语言
2.1 Java语言的特性
2.2 Java Applet
2.3 丰富的类库
2.4 Java的竞争对手
2.5 Java在应用领域的优势
3. Java平台的体系结构
3.1 Java SE标准版
3.2 Java EE企业版
3.3 Java ME微型版
3.4 三个版本间的关系
4.1 什么是JDK
4.3 设置环境变量
4.4 验证配置的正确性
5. 课后练习
学前提示:
Java是目前最流行的一门编程语言之一,要学习Java语言,必须先了解Java的整体概况。
本篇主要介绍Java语言的发展历史、体系结构、安装环境和主流IDE集成开发环境等。
通过本篇的学习,大家会对Java语言有个整体的认识。
知识要点:
- Java语言发展简史
- 认识Java语言
- Java平台的体系结构
- Java SE环境安装和配置
1. 什么是Java
在谈到“什么是Java”这个问题的时候,通常的答案是:Java是一种计算机编程语言。
其实,对于这个问题的全面会打应该包括如下几点:
(1) 它是一种计算机编程语言
它允许用户编写指令或代码,实现用户与计算机之间的交流。计算机通过解释代码来满足用户的要求,并完成用户的一些想法。
(2) 它是一种软件开发平台
编写程序的过程就是软件开发。
软件开发的基本步骤包括需求分析、概要设计、编码、测试、维护等阶段。
在软件开发的过程中,需要一些辅助工具。而像javac.exe、java.exe等Java所需要的环境和工具,Java自身都已提供,所以它是一个开发平台。
(3) 它是一种软件运行平台
程序不仅要运行在计算机上,而且必须运行在软件之上。
Java本身提供了Java软件所需要的运行环境,Java应用可运行在安装了JRE的机器上,所以它是一个运行平台。
(4) 它是一种软件部署环境
部署也就是安装,就是把软件放置到相应的地方,让软件能正常地运行起来。
Java程序是部署在Java平台上的,所以它也是一种软件部署环境。
1.1 Java语言发展简史
Java作为目前最流行的一种编程语言之一,它的名字被所有与编程相关的人们所熟知。
大家可能会猜测,这个名字是如何想出来的呢?
据说,Java程序设计语言最早被称为“Oak”,但由于当时已经存在一种命名为Oak的语言。所以不得不放弃Oak这个名称。
在包括一个起名专家在内的众多人员进行一系列的讨论之后,终于选择了“Java”这个名称,于是“Java就在一片混乱中诞生了”。
该说法在Java技术之父James Gosling的博客中得到了证实。
Java语言最早诞生于1991年,刚开始,它只是Sun公司为一些消费性电子产品所设计的通用环境。
因为当时Java的应用对象只限于PDA、电子游戏机、电视机顶盒之类的消费性电子产品,所以并未被众多的编程技术人员所接受。
在Java出现以前,Internet上的信息内容都是一些静态的HTML文档。正是因为在Web中看不到交互式的内容,所以人们很不满意当时的Web浏览器。
他们迫切希望能够在Web上创建一类无序考虑软、硬件平台就可以执行的应用程序,并且这些程序还要有极大的安全保障。
正是由于这种需求,给Java带来了前所未有的施展舞台。
Sun的工程师从1994年起,把Java技术应用于Web上,并且开发出来HotJava的第一个版本。
从那时起,Java的名字便逐渐变得广为人知。
到2009年,Java已经发布了一系列的版本,并且它没发布一个版本,都有其自己特有的名字,如下表所示:
JDK版本 | 名字 | 中文名 | 发布时间 |
JDK 1.1.4 | Sparkler | 宝石 | 1997-09-12 |
JDK 1.1.5 | Pumpkin | 南瓜 | 1997-12-13 |
JDK 1.1.6 | Abigail | 阿比盖尔(女子名) | 1998-04-24 |
JDK 1.1.7 | Brutus | 布鲁图(古罗马政治家和将军) | 1998-09-28 |
JDK 1.1.8 | Chelsea | 切尔西(城市名) | 1999-04-08 |
J2SE 1.2 | Playground | 运动场 | 1998-12-04 |
J2SE 1.2.1 | none | 无 | 1999-03-30 |
J2SE 1.2.2 | Cricket | 蟋蟀 | 1999-07-08 |
J2SE 1.3 | Kestrel | 美洲红隼 | 2000-05-08 |
J2SE 1.3.1 | Ladybird | 瓢虫 | 2001-05-17 |
J2SE 1.4.0 | Merlin | 灰背隼 | 2002-02-13 |
J2SE 1.4.1 | grasshopper | 蚱蜢 | 2002-09-16 |
J2SE 1.4.2 | Mantis | 螳螂 | 2003-06-26 |
J2SE 5.0(1.5.0) | Tiger | 老虎 | 2004 |
J2SE 5.1(1.5.1) | Drangonfly | 蜻蜓 | 2005 |
J2SE 6.0(1.6.0) | Mustang | 野马 | 2006 |
Java SE 7.0 | Dolphin | 海豚 | 2010 |
2. 认识Java语言
作为一种程序设计语言,Java语言最具有简单高效、面向对象、不依赖于及其的结构、可移植性好、安全等特点,并且提供了并发机制,具有很高的性能。
其次,Java语言最大限度地利用了网络,Java的小应用程序(Applet)可在网络上传输而不受CPU和环境的限制。
另外,Java还提供了丰富的类库,使程序设计者可以很方便地建立自己的系统。
下面分别从语言特性、Applet和类库三个方面来讨论Java的特点,然后通过把Java与其他编程语言C、C++、C+进行比较,进一步指出它所具有的优点。
2.1 Java语言的特性
Java语言主要有简单高效、面向对象、网络分布计算、健壮性、安全性、跨平台、并发性以及动态扩展等一系列特点。
Java语言特性的具体说明如下:
1. 简单高效
Java语言最初是应用于电子产品的,如冰箱(只需要控制开和关即可完成制冷工作),所以相对来说比较简单。
Java语言提供了很多的功能实现类库,很多代码只需要简单修改便可以轻松地应用到其他的软件产品中,大大提高了代码的重用率,缩短了开发时间,提高了开发软件的效率。
2. 面向对象
世间万事万物皆是对象。程序员如果要对现实生活中的各种对象进行模拟并编写出大型程序,那么Java语言便是最好的选择。
在面向对象方面,Java语言比其他面向对象的编程语言更“纯”,所有的数据类型都有相应的类,完全可以用面向对象的方式来编写。
在很多应用中,Java语言的设计主要集中于对象及其接口,Java提供了简单的类机制以及动态的接口模型。
对象中封装了对象的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现代码的复用。
3. 网络分布计算
Internet的出现,为网络计算提供了一个良好的信息共享和信息交流的平台。
然而,要充分利用网络来处理各种信息,不同操作系统品台具有的不同的运行环境是一个严重的制约,Java技术的出现为解决网络分布计算提供了最佳途径。
Java语言是面向网络的编程语言,通过它提供的相应类库,可以很方便地处理分布在不同计算机上的对象。
4. 健壮性
Java程序一般不可能使计算机系统崩溃。
因为Java虚拟机系统会在编译时对每个Java程序进行合法性检查,以消除错误的产生。
在运行时,如果遇到出乎意料的事情,Java也可以通过异常处理机制,将异常抛出,并由相应的程序进行处理。
5. 安全性
用于网络分布环境下的Java产品必须要防止病毒的入侵。
Java语言之所以安全,是因为它不支持指针,并提供了字节码校验机制,禁止在自己的处理空间之外破坏内存。
6. 跨平台
Java源程序通过Java解释器解释后会产生与源程序对应的字节码指令,只要在不同的平台上安装配置好相应的Java运行环境,Java程序就可以随处运行。
7. 并发性
Java内建了对多线程的支持,多线程机制的引入,使Java程序的运行效率大大提高,同时也保证了对共享数据的正确操作。
通过使用多线程,程序设计者可以分别用不同的线程完成特定的功能,而不需要采用全局的事件循环机制,这样就可以很容易地实现网络上的实时交互行为。
8. 动态扩展
Java语言是一个不断发展的优秀编程语言。
Java语言的类库可以自由地加入新的方法和示例变量而不会影响用户的执行,并且通过接口机制,改进了传统多继承的缺点,使之比严格的类继承具有更灵活的方式和动态扩展性等。
2.2 Java Applet
Java语言的特性是它可以最大限度地利用网络。
Applet是Java的小应用程序,它是动态、安全、跨平台的网络应用程序。Applet可以嵌入HTML语言中,通过主页发布到Internet上。
网络用户访问服务器的Applet时,这些Applet从网络上进行传输,然后在支持Java的浏览器中运行。
由于Java语言的安全机制,用于一旦载入Applet,就可以放心地生成多媒体的用户界面或完成复杂的计算,而不必担心病毒的入侵。
虽然Applet可以如图像、声音、动画等一样从网络上下载,但它不用于这些多媒体的文件格式,它可以接收用户的输入,动态地进行改变,而不仅仅是动画的显示和声音的播放。
Applet在早期Internet上的应用比较广发,但当前的应用比较少。
2.3 丰富的类库
Java提供了大量的类,以满足网络化、多线程、面向对象系统的需要,类的主要应用领域包括以下几个方面:
(1) 语言包提供的支持包括字符串处理、多线程处理、异常处理、数学函数处理等,可以用它简单地实现Java程序的运行平台;
(2) 实用程序包提供的支持包括散列表、堆栈、可变数组、时间和日期等;
(3) 输入输出包用同一的“流”模型来实现所有格式的I/O(输入/输出),包括文件系统、网络、输入;
(4) 低级网络包用于实现Socket编程;
(5) 抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件,包括窗口、菜单、滚动条、对话框等,使得Java可以移植到不同平台的机器上;
(6) 网络包支持Internet的TCP/IP协议,提供了Internet的接口。网络包支持URL连接和WWW的即时访问,并且简化了用户/服务器模型的程序设计;
(7) 为了适应新的形势,在JDK5.0以后陆续加入了很多新的特性,如标注、泛型、反射等类。
2.4 Java的竞争对手
C++、Java、C#等变成语言基本上都来源与C语言,但又有很多区别。
业内人士经常将C比作爷爷,C++比作爷爷的儿子,Java和C#等语言比作孙子。
对于变量声明、参数传递、操作符、流控制等,Java使用了与C、C++相同的传统,而C++主要是对C的扩展,并融入了面向对象的思想。
Java和C#语言是纯粹的面向对象的编程语言,吸收了C、C++语言的很多优点,摒弃了很多缺点。
但C#编程语言的运行依赖于Windows平台,而Java语言不依赖于任何平台,因此使得熟悉C、C++、C#的程序员能够很方便地转向Java编程。
具体描述有如下几点:
1. Java与C、C++对比
(1) 全局变量
在Java编程的过程中,不能在类之外定义全局变量,例如:
public String name; // 错,不能再类之外定义全局变量 public class GlobalVar { public static String global_var; // 全局变量也叫作成员变量或成员属性 }
要定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量。
在类GlobalVar中定义变量global_var为public static,使得其他类可以访问和修改该变量。
Java对全局变量进行了更好的封装。而在C和C++中,依赖于不加封装的全局变量常常造成系统的崩溃。
(2) 剔除goto关键字
虽然在Java中将关键字goto保留了,但是Java不支持C、C++中的goto语句,而是通过异常处理语句try、catch、final等来代替C、C++中用goto语句来处理遇到错误时跳转的情况,使程序更易读,且更结构化。
(3) 良好的指针控制
指针是C、C++编程语言中最有魅力的特性,但它的超高使用难度加上超高灵活性,使得大部分程序员望而却步。
在学习C、C++语言进行编程的过程中,通过指针所进行的内存地址操作常常会造成不可预知的错误。
同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C或C++的私有成员,从而破坏安全性,造成系统的崩溃。
而Java语言对指针进行完全的控制,程序员不能直接进行任何指针操作。例如把整数转换为指针,或者通过指针释放某一内存地址等。
同时,数组作为类在Java中实现,姣好地解决数组访问越界这一问题。
(4) 自动垃圾回收
一般内存资源有限,很容易被程序破坏。
在C语言中,程序员通过库函数malloc()和free()类分配和释放内存,在C++中,则通过运算符new和delete来分配和释放内存。
再次释放已乙方的内存块或未被分配的内存块,都会造成系统的崩溃;而忘记释放不再使用的内存块也会逐渐耗尽系统资源。
但在Java中,所有的数据结构都是对象,通过运算符new为它们分配内存堆。
通过运算符new可以得到对象的处理权,而实际分配给对象的内存可能随程序运行而改变。
Java对此自动进行管理,并且进行垃圾收集,有效防止了程序员的误操作而导致的错误,并且更好地利用了系统资源。
(5) 固定的数据类型
在C、C++语言中,不同数据类型在不同的平台上所占的位数不一样。
例如,int类型的数据在IMB PC中占16位,在VAX-II中占32位,这就导致了代码的不可移植性。
但在Java中,对于这些数据类型都采用国际统一字符编码,即分配固定长度的位数。
例如,对int类型的数据,它在任何机器上都占32位,这就保证了Java的平台无关性。
(6) 严格控制数据类型转换
一种数据类型的数据转换成另外一种数据类型的数据时,常常会出现数据精度丢失的问题。在C、C++中,通过指针进行任意的数据类型转换极不安全。
而在Java中,运行时系统对对象的处理要进行类型兼容性检查,以防止不安全的转换。
(7) 库文件
编程语言中丰富的库文件能快速地开发出各种应用软件。
C、C++中用头文件来声明类的原型以及全局变量、库函数等,在大的系统中,维护这些头文件是很困难的。
而Java不支持头文件,类成员的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,防止对私有成员的操作。
同时,Java中利用import语句来与其他类进行通信,以便使用它们的方法。
(8) 类与结构体和联合体
安全是一个永恒的话题。C、C++中的结构和联合体重的所有成员均为公有,这就带来了安全性问题。Java中不包含结构体和联合体,所有的内容都封装在类中。
其实Java与C、C++编程语言还有很多的差别,如速度、内部类、方法嵌入等,但总体来说,Java提取了很多其他编程语言的优点,使它更适合于大众程序员的需求。
2. Java与C#对比
Java语言是开放式的世界语言,基本源代码都公开。
而C#作为Microsoft的一门主打语言也不甘示弱。一个开源,一个收费,它们两者基本上都对C、C++深涩的语法和语义进行了改进。
在语法方面,两者都摒弃了const修饰、宏替换等;在继承方面,两者都采用更易于理解的单继承和多接口实现方案;在源代码组织方面,两者都提出了声明与实现与一体的逻辑封装。
Java与C#的不同点主要体现在:C#在Microsoft的支持下提供了强大的Visual 开发平台,可以极好地提高C#程序开发效率。而且C#更善于利用Windows平台。
Java的设计宗旨是独立于任何平台,因此自然不会提供太多的Windows特性。但这也正体现了Java语言的跨平台优势。
对于一般的企业级应用来说,无法确定这个应用实在怎么的平台上运行(C#现可间接实现跨平台),因而企业级开发一般选择Java作为开发语言。
2.5 Java在应用领域的优势
下图是目前2016年4月统计的各种编程语言的使用排名(1~20名),Change列表示对比前一年的排名变化。
下图是目前2016年4月统计的以上语言的排名及市场占有率的升降趋势:
大家也可以自行百度编程语言排行榜查看详情,甚至往年的也可以。
从上面的图表中可以看出,Java语言依然是排名第一的语言,应用非常广泛。Java语言在应用领域占有强大优势,具体体现在以下几个方面:
(1) 开发桌面应用程序,如银行软件、商场结账软件等;
(2) 开发面向Internet的Web应用程序,如门户网站(工商银行)、网上商城、阿里巴巴、电子商务网站等;
(3) 提供各行业的数据移动、数据安全等方面的解决方案。
Java语言目前已发展成为最优秀的应用软件开发语言,它有着众多的开源工具。另外,Java为了实现高度的伸缩能力,增加了产品的复杂性。
尽管C、C++开发的程序运行速度快,但缺点是几本没有什么好的开源工具,学习难度大;C#虽然封装得较好,但它开发的程序不能跨平台运行(现可以间接性实现跨平台),并且需要安装大规模的运行环境。
基本以上原因,Java的使用者越来越多,Java在应用程序开发领域所占的份额也越来越大。
3. Java平台的体系结构
作为功能强大的编程语言,Java发展到今天按其应用来分可以分为三个版本,分别是Java SE、Java EE和Java ME,这也就构成了Java平台体系结构。
Java平台的体系结构基本上囊括了不同Java开发人员对特定时长的需求,下面具体介绍Java的这三个版本。
3.1 Java SE标准版
Java SE(Java Standard Edition)标准版是各种应用平台的基础,主要应用于桌面开发和低端商务应用的 方案。
Java SE也包含了支持Java Web服务开发的类库,并为Java EE提供了基础。
Java SE1.4与1.5以后的版本有很大的差别,现在大多数开发人员都是用1.6版本和1.7版本。
Java SE1.7的组成如下图所示:
开源组织采集了很多高级特性归纳到Java SE7.0中,但这些高级特性的普及使用应该还需要一小段过程。
Java SE中包含的主要技术如下:
(1) Java Beans Component Architecture:是一个为Java平台定义可重用软件组件的框架,可以在图形化构建工具中设计这些组件;
(2) Java Foundation Classes(Swing)(JFC):是一套Java类库,支持为基于Java的客户机应用程序构建GUI(Graphical User Interface,图形用户界面)和图形化功能;
(3) Java Help:是一个独立于平台的可扩展的帮助系统,开发人员可使用它将在线帮助集成到Applet、组件、应用程序、操作系统和设备中,还可以提供基于Web的在线文档;
(4) Java Native Interfacae(JNI):是JVM中运行的Java代码,可以与用其他编程语言编写的应用程序和库进行相互操作;
(5) Java Platform Debugger Architecture(JPDA):是用于JavaSE调试支持的基础结构;
(6) Java 2D API:是一套用于高级2D图形和图像的类(为图像组合和Alpha通道图像提供丰富的支持),一套提供精确的颜色空间定义和转换的类及一套面向显示的图像操作符;
(7) Java Web Start:允许用户通过一次单击操作下载并启动特性完善的应用程序(比如电子表格),而不需要进行安装,从而简化了Java应用程序的部署;
(8) Certification Path API:提供了一套用于创建、构建和校验认证路径(也成为“认证链”)的API,可以安全地建立公共密钥到主体的映射;
(9) Java Database Connectivity(JDBC):是一个API,它使用户能够从Java代码中访问大多数表格式数据源,提供了对许多SQL数据库的跨DBMS连接能力,并可以访问其他表格式数据源,比如电子表格和平面文件;
(10) Java Advanced Imaging(JAI):是一个API,提供了一套面向对象的接口,这些接口支持一个简单的高级编程模型,使开发人员能够轻松地操作图像;
(11) Java Authentication and Authorization Service(JAAS):是一个包,实现了标准的Pluggable Authentication Module(PAM)框架的Java版本并支持基于用户的授权,能够对用户进行身份验证和访问控制;
(12) Java Cryptography Extension(JCE):是一组包,提供了用于加密、密钥生成和协商以及Message Authentication Code(MAC)算法的框架和实现。JCE给对称、不对称、块和流密码提供加密支持,它还支持安全流和密封的对象;
(13) Java Data Objects(JDO):是一种基于标准接口的持久化Java模型抽象,使程序员能够将Java领域模型实例直接保存到数据库(持久化存储器)中,这可以替代直接文件I/O、串行化、JDBC/EJB、BMP(Bean Managed Persistence)或CMP(Container Managed Persistence)实体Bean等方法;
(14) Java Management Extensions:提供了用于构建分布式、基于Web、模块化且动态的应用程序的工具,这些应用程序可以用来管理和监视设备、应用程序和服务驱动的网络;
(15) Java Media Framework(JMF):可以将音频、视频和其他基于时间的媒体添加到Java应用程序和Applet中;
(16) Java Naming and Directory Interface(JNDI):为Java应用程序提供一个连接到企业中的多个命名和目录服务的统一接口,可以无缝地连接结构不同的企业命名和目录服务;
(17) Java Secure Socket Extensions(JSSE):是一组包,它们支持安全的互联网通信,实现了SSL(Secure Sockets Layer)和TLS(Transport Layer Security)的Java版本,包含了数据加密、服务器身份验证、消息完整性和可选的客户机身份验证等功能;
(18) Java Speech API(JSAPI):包含Java Speech Grammar Format(JSGF)和Java Speech Markup Language(JSML)规范,使Java应用程序能够将语言技术集成到用户界面中。JSAPI定义了一个跨平台的API,支持命令和控制识别器、听写系统及语音识别器;
(19) Java 3D:是一个API,它提供了一套面向对象的接口,这些接口支持一个简单的高级编程模型,开发人员可以使用这个API轻松地将可伸缩的独立于平台的3D图形集成到Java应用程序中;
(20) Metadata Facility:允许给类、接口、字段和方法标上特定的属性,从而使开发工具、部署工具和运行时能够以特殊方式处理它们;
(21) Java Content Repository API:是一个用于访问Java SE中独立于实现的内容存储库的API。内容存储库是一个高级信息管理系统,是传统数据存储库的超集;
(22) Enumerations:枚举是一种类型,允许以类型安全的方式将特定的数据表示为常量;
(23) Generics:泛型允许定义具有抽象类型参数的类,可以在实例化时指定这些参数;
(24) Concurrency Utilities:是一套中级实用程序,提供了并发程序中常用的功能;
(25) Java API for XML Processing(JAXP):允许Java应用程序独立于特定的XML处理,实现对XML文档进行解析和转换,允许灵活地在XML处理程序之间进行切换,而不需要修改应用程序代码。Java API for XML Binding(JAXB)允许在XML文档和Java对象之间进行自动的映射;
(26) SOAP with Attachments API for Java(SAAJ):使开发人员能够按照SOAP 1.1规范和SOAP with Attachments Note生成和消费信息。
3.2 Java EE企业版
Java EE(Java Platform,Enterprise Edition)企业版是以企业为环境开发应用程序的解决方案,这个版本以前成为J2EE。
企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务端Java应用程序。
Java EE是在Java SE的基础上构建的,它提供了Web服务、组件模型、管理和通信API。
可以用来实现企业级的面向服务体系结构(Service Oriented Architecture,SOA)和Web 2.0应用程序。
Java EE中包含的主要技术如下:
(1) Enterprise Java Beans(EJB):该技术使用一个组件模型来简化中间件应用程序的开发,提供了对事务、安全性和数据库连接等服务的自动支持;
(2) Portlet Specification:定义了一套用于Java门户计算的API,可以解决聚合、个人化、表示和安全性方面的问题;
(3) Java Mail:是一个API,提供了一套对右键系统进行建模的抽象类;
(4) Java Message Service(JMS):是一个API,它为所有与JMS技术兼容的消息传递系统定义一套通用的消息概念和编程策略,从而支持开发可移植的基于消息的Java应用程序;
(5) Java Server Faces(JSF):提供一个编程模型,帮助开发人员将可重用UI组件组合在页面中,将这些组件连接到应用程序数据源,将客户机生成的事件连接到服务器端的事件处理程序,从而轻松地组建Web应用程序;
(6) JavaServer Pages(JSP):允许Web开发人员快速地开发和轻松地维护动态的独立于平台的页面,并将用户界面和内容生成隔离开,这样设计人员就能够修改页面布局,而必须修改动态内容。这种技术使用类似XML的标记来封装为页面生成内容的逻辑;
(7) Standard Tag Library for Java Pages(JSTL):是一个定制标记集合,它以一种标准化的格式,用于许多常见的Web站点功能;
(8) Java Servlets:提供了一种基于组件的独立于平台的方法,可以构建基于Web的应用程序,同事避免了CGI程序的性能限制,从而扩展并增强了Web服务器的功能;
(9) J2EE Connector Architecture(JCA):为将J2EE平台连接到各种结构的企业信息系统(Enterprise Information System,EIS)定义了一个标准的体系结构,它定义了一套可伸缩的安全的事务性机制,使EIS厂商能够提供标准的资源适配器,可以将这些资源适配器插入到应用服务器中;
(10) J2EE Management Specification:为J2EE平台定义了一个信息管理模型。根据其设计,J2EE Management Model可与多种管理系统和协议进行互操作;包含模型到Common Information Model(CIM)的标准映射,CIM是一个SNMP Management Information Base(MIB);还可以通过一个驻留在服务器上的EJB组件 —— J2EE Management EJB Component(MEJB)映射到Java对象模型;
(11) Java Transaction API(JTA):是一个独立于实现和协议的高级API,它使应用程序和应用服务器可以访问事务。Java Transaction Service(JTS)指定了Transaction Manager的实现,它支持JTA并在这个API之下的层上实现OMG Object Transaction Service(OTS) 1.1规范的Java映射。JTS使用Internet Inter-ORB Protocol(IIOP)传播事务。
3.3 Java ME微型版
Java ME(Java Micro Edition):微型版致力于消费产品和嵌入式设备的最佳解决方案,这个版本以前成为J2ME。它是对标准版进行功能缩减后的版本。
Java ME为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。
Java ME包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的联网和离线应用程序的丰富支持。
基于Java ME规范的应用程序只需编写一次就可以用于许多设备,而且可以利用每个设备自身的功能。
Java ME中包含的主要技术如下:
(1) Connected Limited Device Configuration(CLDC):描述最基本的库和虚拟机特性,所有包含K虚拟机(K Virtual Machine,KVM)的J2ME环境实现中都必须提供这些库和特性;
(2) Mobile Information Device Profile(MIDP):提供核心应用程序功能,包括用户界面、网络连接、本地数据存储和应用程序生命周期管理;
(3) Connected Device Configuration(CDC):是一个基于标准的框架,用来构建和交付可以跨许多连接网络的消费类设备和嵌入式设备共享的应用程序;
(4) Mobile 3D Graphics API for J2ME(M3G):是一种轻量的交互式3D图形API,它作为可选的包,与J2ME和MIDP结合使用。
3.4 三个版本间的关系
Java EE几乎完全包含Java SE的功能,然后在Java SE的基础上添加了很多新的功能。
Java ME主要是Java SE的功能子集,然后再加上一部分额外添加的功能。
三个版本之间的关系如图:
4. Java SE环境安装和配置
用Java语言编写出来的程序要在各种平台上运行,必须要预先安装和配置好它的运行环境。对于编程开发者来说,最重要的就是要安装JDK。
4.1 什么是JDK
JDK(Java Development Kit)就是Java开发工具箱。
JDK中主要包括:
- JRE(Java RunTime Environment,Java运行时环境):它是JDK的子集合,包含了JDK中执行Java程序所需的组件,但未包含部署的组件;
- JVM(Java Virtual Machine,Java虚拟机):主要作用是进行Java程序运行和维护;
- Java API(Java Application Programming Interface,Java应用程序编程接口):主要作用是为编程人员提供已经写好的功能,便于快速开发;
- Java编译器(javac.exe)、Java运行时解析器(java.exe)、Java文档化工具(javadoc.exe)及其他工具和资源。
JRE的三项主要功能如下:
- 加载代码:由类加载器(Class Loader)完成;
- 校验代码:由字节码校验器(Bytecode Verifier)完成;
- 执行代码:由运行时解释器(Runtime InterPreter)完成。
以上三项功能的作用基本上都是以安全为出发点。只有安装了JRE才能运行Java程序。
Java程序就好比大海中的鱼,JRE好比水,操作系统(如Windows等)就好比地球。
跟鱼要想在地球上生存就必须有水一样,Java程序要想在Windows等平台上运行,就必须安装支持Java程序运行的环境。
4.2 JDK的安装目录和实用命令工具介绍
要获得最新版的JDK,可以打开官方下载地址(http://www.oracle.com/technetwork/java/javase/downloads/index.html)将jdk下载到本地,也可以打开非官方下载地址 (https://jdk7.java.net/)将JDK下载到本地 ,也可以下方回复邮箱,我百度云分享连接给大家。
在这里,我使用的是“JDK 7u67 Windows x64.exe”JDK7 x64位版本的做演示了:
【PS:】“7u67”的7表示JDK的版本,“u67”表示update 67(发布67版),“Windows”表示平台,"x64"表示64位平台,“i586”表示32位平台。
然后双击安装即可,过程如图:
点击“下一步”,进入功能安装选项,默认安装路径为“C:\Program Files\Java\jdk1.7.0_67\”。
在这里我将Java相关的环境全部安装在了“D:\Java\”下面,因为稍后要配置环境变量,如果路径中包含空格(例如Program Files中的空格),后面学习过程中可能会遇到特别逗逼的问题。
点击“下一步”之后,安装程序就开始安装JDK了:
待JDK安装完成后,还会弹出JRE运行时环境的安装选项,按照相同的做法,我将其也安装在了“D:\Java\”目录下了:
点击“下一步”,开始安装JRE运行时环境:
稍等片刻,JDK和JRE都安装完成,弹出成功界面:
点击“关闭”结束安装程序即可。
安装之后的“D:\Java\”目录结构如下:
其中,JDK目录所包含的文件如下:
主要的目录及文件功能介绍如下:
- bin目录:存放Java的编译器、解释器等工具(exe可执行文件)
- db目录:JDK6-7附带的一个轻量级的数据库,名字叫做Derby
- demo目录:存放演示程序(安装时为可选项,我这个JDK7安装文件中没有这个)
- include目录:存放用于本地方法的文件
- jre目录:存放Java运行环境文件
- lib目录:存放Java的类库文件
- sample目录:存放一些范例程序(安装时为可选项,我这里也没有安装这项)
- src.zip文件:JDK提供的类的源代码
感兴趣的朋友们可以双击打开目录“jdk\demo\jfc\Java2D”下面的Java2Demo.jar文件观看Java的演示程序(没有的可以自行百度下载或回复邮箱地址都可以),运行效果如图:
说明:
安装之后将会含有两套JRE。一套在安装目录之下,也就是我们安装JDK环境时,第二个弹出的那个JRE安装选项;另一套位于安装目录JDK安装目录下的jre文件夹中。
它们一个是为JDK目录中的应用程序服务的,一个是为用户开发Java程序服务的。
这样在执行时可以使用不同的JRE,减少搜索的时间,提高程序的执行速度。
4.3 设置环境变量
仅安装了JDK还不行,因为用户编写的程序可能放置于不同的位置,怎么能让Windows系统可以在任何路径下识别Java命令呢?这就需要设置环境变量了。
关于什么是环境变量呢?这个如果要详细介绍的话,估计又得写一个长篇大论了。。呵呵。
现在研究这个初学者没啥用,甚至会带你走向不归路。。大概明白它是干嘛的就可以了。
说简单点儿,就是系统会在执行一个文件时,在环境变量中使用对应的程序执行。举个例子,你也可以将QQ的快捷方式放入环境变量的path变量中,这样,在系统的cmd命令中直接执行“qq”就可以快速打开QQ了。。。
详细的,自行参考百度百科:《环境变量》。
设置环境变量需要配置以下两个参数(Path和CLASSPATH):
(1) Path
用于指定操作系统的可执行指令的路径,也就是告诉操作系统,Java编译器和运行器在什么地方可以找到并运行Java程序的工具。
大家可以在桌面上右键“我的电脑”图标,在弹出的快捷菜单中选择“属性”命令,弹出“系统属性”对话框,然后选择左侧的“高级系统设置”:
打开“系统属性”对话框,选择“高级”选项卡,然后点击下面的“环境变量”按钮:
打开“环境变量”设置界面后,按照下图箭头所示,在列表中找到并选择Path,点击“编辑”按钮:
在弹出的“编辑系统变量”界面中,我们可以发现,Path变量值中已经包含了很多路径了,其中包含系统驱动、系统文件及目录的位置等,每个路径中间都用英文半角的分号(;)隔开。
大家已经切记:不要删掉这里面的东西,不然系统万一啥玩意儿不好使了,别说我在这里没有提到。。。
复制JDK安装目录中的bin文件夹的路径,将其粘贴到Path变量的变量值中的最前面的位置,并用分号隔开后面本来就有的内容:
然后“确定”保存即可。这样就将java.exe、javac.exe、javadoc.exe工具的路径告诉了Windows。
(2)CLASSPATH
Java虚拟机在运行某个类时会按CLASSPATH指定的目录顺序去查找这个类。
CLASSPATH这个变量默认没有,需要我们自行创建:
点击“新建”打开“新建系统变量”对话框,变量名输入:CLASSPATH,值为“点(.)”和JDK安装目录中的lib目录: .;D:\Java\jdk1.7.0_67\lib 。
设置点“.”表示通过编译器产生的.class类文件存放的路径与当前路径一致:
设置完成后,点击“确定”保存并关闭即可。
说明:
JDK默认回到当前工作目录以及JDK的lib目录中查找需要运行的类文件,所以其实CLASSPATH环境变量中的lib可以不用配置也没啥大问题。
4.4 验证配置的正确性
选择“开始 - 运行”,或者按快捷键Win+R,打开运行对话框,并输入cmd命令,然后点击“确定”在弹出的“运行”:
打开DOS界面之后,在命令处输入javac,并按回车确定:
如果出现下图,则表示javac.exe编译器可以正常使用:
大家也可以输入java命令,试试解释器是否也可以正常执行,使用java -version还可以查看版本等等。
说明:
一般情况下建议大家在设置系统环境变量时设置JAVA_HOME变量。
一是为了方便引用。比如,JDK安装在D:\Java\jdk1.7.0_67目录里面,则设置JAVA_HOME为该目录路径。
那么以后要使用这个路径的时候,只需要输入%JAVA_HOME%即可,避免每次引用都输入很长的路径串。
二是归一原则,当JDK路径需要变化的时候,仅仅需要修改JAVA_HOME一个变量就可以了,反正其他的那些都是通过%JAVA_HOME%引用的这个父目录路径。
不然的话,你需要修改每个包含JDK路径的环境变量,要是万一漏掉一个没改全,某个程序找不到JDK,后果可想而知 —— 直接崩溃!
三是第三方软件会引用默认约定好的JAVA_HOME变量,不然,会不能正常使用该软件。MyEclipse或Eclipse会引用JAVA_HOME变量。
所以需要设置这个变量。
5. 课后练习
(1) Java语言最早发布于什么时候?有什么特点?
(2) Java体系结构中有哪几个版本?分别有什么作用?
(3) 为什么要设置环境变量?如何配置Java环境变量?
Java企业实训 - 01 - Java前奏的更多相关文章
- 【CC2530强化实训01】普通延时函数实现按键的长按与短按
[CC2530强化实训01]普通延时函数实现按键的长按与短按 [题目要求] 用一个按键实现长按与短按的功能已经是很多嵌入式产品的常用手法.使用定时器的间隔定时来进行按键按下的时间是通用的做法, ...
- 007 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 01 Java标识符
007 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 01 Java标识符 Java变量与常量主要内容 Java变量与常量主要内容如下,主要是对以下内容的学习,没 ...
- Java入门 - 语言基础 - 01.Java简介
原文地址:http://www.work100.net/training/java-intro.html 更多教程:光束云 - 免费课程 Java简介 序号 文内章节 视频 1 概述 2 主要特性 3 ...
- [零基础学JAVA]Java SE基础部分-01. Java发展及JDK配置
转自:http://redking.blog.51cto.com/27212/114976 重点要会以下两个方面: 1. 抽象类与接口 2. API==>类集 这是两个最重要部分,这两个部分理解 ...
- Java第一次实训作业
1.编写程序: 声明一个整型变量a,并赋初值5,在程序中判断a是奇数还是偶数,然后输出判断的结果. import java.util.Scanner; public class Hellowore { ...
- Java第一次实训课
//1.1 声明一个整型变量a,并赋初值5,在程序中判断a是奇数还是偶数,然后输出判断的结果. package mingye; public class Exc { public static voi ...
- Java第一次实训
package com.wsy.work; public class JudgeNumber { public static void main(String[] args) { int a = 5; ...
- java综合实训第二次
- Java基础实训
随机推荐
- Database Replay和Consolidated Database replay
简介 在数据库的迁移和升级场景中,我们经常会遇到一个问题:在做压力测试时,如何模拟真实的业务压力,解决这个问题的方法有很多,比如:应用方开发模拟程序或者使用压力测试工具模拟,如load runner, ...
- nodejs进阶(3)—路由处理
1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...
- Azure Service Fabric 开发环境搭建
微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...
- Js 原型和原型链
Js中通过原型和原型链实现了继承 Js对象属性的访问,首先会查找自身是否拥有这个属性 如果查到,则返回属性值,如果找不到,就会遍历原型链,一层一层的查找,如果找到就会返回属性值 直到遍历完Object ...
- ifconfig: command not found(CentOS专版,其他的可以参考)
ifconfig: command not found 查看path配置(echo相当于c中的printf,C#中的Console.WriteLine) echo $PATH 解决方案1:先看看是不是 ...
- Content Security Policy 入门教程
阮一峰文章:Content Security Policy 入门教程
- 原生javascript 固定表头原理与源码
我在工作中需要固定表头这个功能,我不想去找,没意思.于是就写了一个,我写的是angularjs 自定义指令 起了个 "fix-header" ,有人叫 "freeze- ...
- obj.style.z-index的正确写法
obj.style.z-index的正确写法 今天发现obj.style.z-index在js里面报错,后来才知道在js里应该把含"-"的字符写成驼峰式,例如obj.style.z ...
- 通过自定义特性,使用EF6拦截器完成创建人、创建时间、更新人、更新时间的统一赋值(使用数据库服务器时间赋值,接上一篇)
目录: 前言 设计(完成扩展) 实现效果 扩展设计方案 扩展后代码结构 集思广益(问题) 前言: 在上一篇文章我写了如何重建IDbCommandTreeInterceptor来实现创建人.创建时间.更 ...
- 在 SharePoint Server 2016 本地环境中设置 OneDrive for Business
建议补丁 建议在sharepoint2016打上KB3127940补丁,补丁下载地址 https://support.microsoft.com/zh-cn/kb/3127940 当然不打,也可以用O ...