《Java语言概述与开发环境.doc》由会员分享,可在线阅读,更多相关《Java语言概述与开发环境.doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateJava语言概述与开发环境Java语言概述与开发环境1.1Java语言发展简史1995年:sun公司发布Java语言。1996年年初:发布了JDK1.0。这个版本包括两部分:运行环境(即JRE)和开发环境(即JDK)。运行环境包括核心API、集成API、用户界面API、发布技术、Java虚拟机(JVM)5个部分;开发环境包括编译Java程序的编译器(即javac命令)
2、。1997年2月18日发布JDK1.1。JDK1.1增加了JIT(即时编译)编译器。JIT和传统的编译器不同,传统的编译器是编译一条,运行完后将其扔掉;而JIT会将经常用到的命令保存在内存中当下次调用时就不需要重新编译了,通过这种方式让JDK在效率上有了较大提升。1998年12月:sun发布了Java历史上最重要的JDK版本:JDK1.2,伴随JDK1.2一同发布的还有JSP/Servlet、EJB等规范,并将Java分成了J2EE、J2SE和J2ME三个版本。JDK1.2还把它的API分成了三大类:核心API、可选API、特殊API。2002年2月:sun发布了JDK历史上最为成熟的版本:J
3、DK1.4。2004年10月,sun发布了万众期待的JDK1.5,同时,sun将JDK1.5改名为Java SE5.0、J2EE、J2ME也相应的改名为Java EE和Java ME。JDK1.5增加了诸如泛型、增强的for语句、可变数量的形参、注释(Annotations)、自动拆箱和装箱等功能;同时,也发布了新的企业级平台规范,如通过注释等新特性来简化EJB的复杂性,并推出了EJB3.0规范。还推出了自己的MVC框架规范:JSF,JSF类似于ASP.NET的服务器端控件,通过它可以快速的构建复杂的JSP界面。2006年12月,sun公司发布了JDK1.6。2009年4月20日,Oracle
4、宣布将以每股9.5美元的价格收购sun,该交易的总价值约为74亿美元。2011年7月28日,Oracle发布了Java SE7,引入了二进制整数、支持字符串的switch语句、菱形语法、多异常捕捉、自动关闭资源的try语句等新特性。2014年3月18日,Oracle发布了Java SE8,这次版本升级为Java带来了全新的Lambda表达式等大量新特性。1.3Java程序运行机制1.3.1高级语言的运行机制Java语言是一种特殊的高级语言,它既具有解释型语言的特征,也具有编译型语言的特征,因为Java程序要经过先编译,后解释两个步骤。计算机高级语言按程序的执行方式可以分为编译型和解释型两种。现
5、有的C、C+、Objective-C、Pascal等高级语言都属于编译型语言。对于解释型语言,可以认为:每次执行解释型语言的程序都需要进行一次编译,因此解释型语言的程序运行效率通常较低,而且不能脱离解释器独立运行。但解释型语言有一个优势:跨平台比较容易,只需提供特定平台的解释器即可,每个特定平台上的解释器负责将源程序解释成特定平台的机器指令即可。解释型语言可以方便的实现源程序级的移植,但这是以牺牲程序执行效率为代价的。现有的Ruby、Python等语言都属于解释型语言。1.3.2Java程序的运行机制和JVMJava语言比较特殊,有Java语言编写的程序需要经过编译步骤,但这个编译步骤并不会生
6、成特定平台的机器码,而是生成一种与平台无关的字节码(也就是*.class文件)。当然,这种字节码不是可执行性的,必须使用Java解释器来解释执行。因此可以认为:Java语言既是编译型语言,也是解释型语言。或者说,Java语言既不是纯粹的编译型语言,也不是纯粹的解释型语言。Java程序的执行过程必须经过先编译、后解释两个步骤,如图1.1所示。Java语言里负责解释执行字节码文件的是Java虚拟机,即JVM(Java Virtual Machine)。JVM是可运行Java字节码文件的虚拟计算机。当使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码不面向任何具体平台,只面
7、向JVM。不同平台上的JVM都是不同的,但它们都提供了相同的接口。JVM是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和寄存器。Oracle公司制定的Java虚拟机规范在技术上规定了JVM的统一标准,具体定义了JVM的如下细节:指令集、寄存器、类文件的格式、栈、垃圾回收堆、存储区。1.4开发Java的准备1.4.1下载和安装JDKJDK的全称是Java SE Development Kit,即Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。Ja
8、va运行时环境,它的全称是Java Runtime Environment,因此也被称为JRE,它是运行Java程序的必须条件。注意:简单地说,JRE包含JVM。JVM是运行Java程序的核心虚拟机,而运行Java程序不仅需要核心虚拟机,还需要其他的类加载器、字节码校验器以及大量的基础类库。JRE除了包含JVM之外,还包含运行Java程序的其它环境支持。一般而言,如果只运行Java程序,可以只安装JRE(仅安装JVM是不够的),无需安装JDK。开发Java程序,则选择安装JDK,JDK包含了JRE。后来开发Java EE应用时,安装Java EE SDK就包含了JDK。安装JDK步骤:登录Or
9、acle官方网站,根据所用电脑系统选择合适的JDK版本。开始安装,注意不装public JRE,把它去掉。Development Tools是JDK的核心,包括编译Java程序必需的命令工具。实际上,它已经包含了JRE。安装Source Code这个选项将会安装Java所有核心类库的源代码。选择JDK的安装路径,系统默认安装在C:Program FilesJava路径下,但不推荐安装在有空格的路径下,会导致一些未知问题。示例路径:D:Javajdk1.8.0_60。基本目录解释:bin:该路径下存放了JDK的各种工具命令,常用的javac、java等命令就放在该目录下。db:该路径是安装Jav
10、a DB的路径。include:一些平台特定的头文件。jre:该路径下安装的就是运行Java程序所必需的JRE环境。lib:该路径下存放的是JDK工具命令的实际执行程序。javafx-src.zip:该压缩文件里存放的就是Java FX所有核心类库的源代码。src.zip:该压缩文件里存放的是Java所有核心类库的源代码。README和LICENSE等说明性文档。1.4.2设置PATH环境变量Windows不区分大小写,而Linux区分大小写,因此只需要设置PATH环境变量即可(就通用了)。在win10系统中右击计算机,选择属性,进入高级系统设置,选择环境变量,设置如下:在用户变量中(或者系统
11、变量(对所有用户有效)添加一个新变量:变量名:JAVA_HOME,变量值为:jdk安装目录,如D:Javajdk1.8.0_60设置PATH变量:在PATH变量的变量值前面添加%JAVA_HOME%bin;即可(注意不要丢失分号)。该步骤现在可以省略.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar; (classpath环境变量,1.5后可以不配)在Windows命令行界面键入javac或java命令,测试环境变量是否配置成功。1.6 Java程序的基本规则1.6.1 Java程序的组织形式Java程序必须以类(class)的形式存在,类(class
12、)是Java程序的最小程序单位。Java程序不允许可执行性语句、方法等成分独立存在,所有的程序部分都必须放在类定义里。Java解释器规定:如需某个类能被解释器直接解释执行,则这个类里必须包含main方法,而且main方法必须使用public static void来修饰,且main方法的形参必须是字符串数组类型(String args)。Java虚拟机就是从这个main方法开始解释执行。因此,main方法是程序的入口。对于一个大型的Java程序而言,往往只需要一个入口,也就是只有一个类包含main方法,而其它类都是用于被main方法直接或间接调用的。1.6.2 Java源文件的命名规则(1)
13、Java程序源文件的后缀必须是.java,不能是其它文件后缀名。(2) 在通常情况下,Java程序源文件的主文件名可以是任意的。但有一种情况例外,如果Java程序源代码里定义了一个public类,则该源文件的主文件名必须与该public类的类名相同。(因此一个Java源文件里可以包含多个类定义,但最多只能定义一个public类)。建议:一个Java源文件只定义一个类,不同的类使用不同的源文件定义,让Java源文件的主文件名与该源文件中定义的public类同名。1.7垃圾回收机制Java程序的内存分配和回收都是由JRE在后台自动进行的。JRE会负责回收那些不再使用的内存,这种机制被称为垃圾回收(
14、Garbage Collection,GC)。通常JRE会提供一个后台线程来进行检测和控制,一般都是在CPU空闲或内存不足时自动进行垃圾回收,而程序员无法精确控制垃圾回收的时间和顺序等。Java的堆内存是一个运行时数据区,用以保存类的实例(对象),Java虚拟机的堆内存中存储着正在运行的应用程序所建立的对象,这些对象不需要程序通过代码来显式地释放。除了释放没用的对象外,垃圾回收也可以清除内存记录碎片。垃圾回收使得Java虚拟机具有两个显著的优点。(1) 垃圾回收机制可以很好的提高编程效率。在没有垃圾回收机制时,可能需要花很长的时间来解决一个难懂的存储器问题。在用Java语言编程时,依靠垃圾回收
15、机制可大大缩短时间。(2) 垃圾回收机制保证程序的完整性,垃圾回收是Java语言安全性策略的一个重要部分。一个潜在缺点:它的开销影响程序性能。垃圾回收具有如下几个特点:(1) 垃圾回收机制的工作目标是回收无用对象的内存空间,这些内存空间都是JVM堆内存里的内存空间,垃圾回收只能回收内存资源,对其它物理资源,如数据库连接、磁盘I/O等资源则无能为力。(2) 为了更快的让垃圾回收机制回收那些不再使用的对象,可以将对象的引用变量设置为null,通过这种方式暗示垃圾回收机制可以回收该对象。(3) 垃圾回收发生的不可预知性。程序员可以通过调用Runtime对象的gc()或System.gc()等方法来建
16、议系统进行垃圾回收,但这种方法仅仅只是建议,依然不能精确控制垃圾回收机制的执行。(4) 垃圾回收的精确性主要包括两个方面:一是垃圾回收机制能够精确的标记活着的对象;二是垃圾回收器能够精确地定位对象之间的引用关系。(5) 现在的JVM有多种不同的垃圾回收实现,每种回收机制因其算法差异可能表现各异,有的当垃圾回收开始时就停止应用程序的运行,有的当垃圾回收机制运行时允许应用程序的线程运行,还有的在同一时间允许垃圾回收多线程运行。当编写Java程序时,一个基本原则是:对于不再需要的对象,不要引用它们。如果保持对这些对象的引用,垃圾回收机制暂时不会回收该对象,则会导致系统可用内存越来越少;当系统可用内存越来越少时,垃圾回收执行的频率就越来越高,从而导致系统的性能下降。-