JAVA程序设计语言_第1页
JAVA程序设计语言_第2页
JAVA程序设计语言_第3页
JAVA程序设计语言_第4页
JAVA程序设计语言_第5页
已阅读5页,还剩283页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java程序设计语言 江苏微软技术中心Java程序设计语言119目录第一章Java概述11.1Java语言简介11.1.1 Java语言的发展历史及特点11.1.2 Java语言实现机制31.2Java体系结构71.2.1 JDK目录结构81.2.2 环境变量设置101.2.3 第一个Java程序11第二章数据类型和变量132.1数据类型概述132.2变量和常量142.2.1 标识符(Identifiers)142.2.2 变量(Variables)和常量(Constant VariabIes)162.3简单数据类型192.3.1 整型数据192.3.2 浮点型(实型)数据212.3.3 字符

2、型数据222.3.4 布尔型数据242.3.5 综合举例242.4各类型数据间的相互转换312.4.1 优先关系312.4.2 自动类型转换312.4.3 强制类型转换332.5Java类库中对简单类型数据的类包装332.6引用类型352.6.1 基本类型与引用类型的区别352.6.2 用new关键字创建对象372.7变量的作用域392.7.1 静态变量和实例变量的生命周期412.7.2 局部变量的生命周期462.7.3 成员变量和局部变量同名482.8对象的默认引用this50第三章运算符和表达式533.1运算符和表达式概述533.2算术运算符和算术表达式533.2.1 二元算术运算符543

3、.2.2 一元算术运算符553.2.3 算术运算符的优先级573.3关系运算符和关系表达式593.4布尔逻辑运算符和布尔逻辑表达式603.5位运算符和位运算表达式643.5.1 位逻辑运算符653.5.2 移位运算符673.5.3 位运算符的优先级693.5.4 位运算的应用703.6赋值运算符和赋值表达式723.6.1 赋值运算符733.6.2 扩展赋值运算符733.7条件运算符与条件表达式743.8各类运算符的优先级和复杂表达式753.9表达式语句76第四章流程控制784.1语句和流程控制结构概述784.2块作用域784.3分支结构794.3.1 条件结构794.3.2 多分支结构924.

4、4循环结构1004.4.1 不确定循环1004.4.2 确定循环1054.4.3 break语句1084.4.4 continue语句1124.5循环结构与分支结构的嵌套1154.6递归(recursion)120第五章数组1255.1一维数组1255.1.1 一维数组的定义1255.1.2 生成数组数组元素内存分配1265.1.3 一维数组的初始化1275.1.4 一维数组元素的引用1295.1.5 一维数组元素的复制1305.1.6 一维数组程序举例1315.2多维数组1355.2.1 二维数组定义1355.2.2 二维数组的初始化1365.2.3 二维数组元素的引用1385.2.4 二维

5、数组程序举例138第六章面向对象编程的基本概念1436.1面向对象编程的基本概念和特征1436.1.1 面向对象编程简介1436.2客观事物的抽象1446.2.1 类与对象的基本概念1446.2.2 消息与方法的基本概念1456.2.3 面向对象编程的基本特征146第七章JAVA & OOP1517.1类1517.1.1 类的定义1537.1.2 成员变量1547.1.3 成员方法1557.1.4 方法重载(Overload)1717.1.5 构造方法1727.1.6 main方法1777.2对象1797.2.1 对象的生成1797.2.2 对象的使用1857.2.3 对象的清除1937.3类

6、的继承1947.3.1 类继承的实现1957.3.2 成员变量的隐藏和方法重写1987.3.3 Super2027.3.4 运行时多态2067.3.5 abstract类和方法2107.3.6 final类2147.4内部类(Inner Class)215第八章包、接口2258.1程序包2258.1.1 声明自己的程序包2258.1.2 程序包的引用2268.1.3 Java的系统程序包2268.2接口2298.2.1 声明接口2298.2.2 接口的继承关系2308.2.3 在类中实现一个接口2318.2.4 在类中实现多个接口232第九章Java语言中的修饰符2349.1对类成员的访问权限

7、控制2349.2类成员的修饰符2389.2.1 static2389.2.2 final243第十章异常处理24510.1异常24510.1.1 基本概念24510.1.2 Throwable类及其子类24510.2异常处理的种类24610.2.1 运行时异常24710.2.2 捕获异常25010.2.3 声明异常25410.2.4 抛出异常25610.2.5 异常子类25710.3小结25910.3.1 优点25910.3.2 原则26010.3.3 建议260第十一章常用系统类26111.1字符串的表示和生成方法26111.1.1 作为string类实例的字符串常量26111.1.2 用S

8、tring表示字符串26111.1.3 用StringBuffer表示字符串26311.2字符串的访问26311.2.1 对String的访问方法26411.2.2 对StringBuffer的访问方法26711.3对字符串的修改26811.3.1 对String的修改26811.3.2 对StringBuffer的修改27011.4字符串的比较、转化及链接操作27311.4.1 字符串的比较27311.4.2 字符串的转化27411.4.3 运算符“+”的重载27411.5标准输入/输出27511.5.1 标准输入方法27511.5.2 标准输出方法27711.6其他常用类27811.6.1

9、 数学函数类Math27911.6.2 日期类28011.6.3 随机数类Random285第十二章Linux下搭建开发环境28612.1争奇斗妍的开放世界28612.2下载安装RPM格式的JDK28612.2.1 下载RPM格式的JDK28612.2.2 安装RPM格式的JDK28712.3需要配置的环境变量28812.3.1 PATH环境变量28812.3.2 CLASSPATH 环境变量28912.3.3 JAVA_HOME环境变量28912.4配置环境变量的方法28912.4.1 修改/etc/profile 文件28912.5验证JDK安装情况29012.6Java version

10、查看版本信息29012.7下载安装 Eclipse29012.7.1 如何下载?29112.7.2 解开压缩包29112.7.3 运行Eclipse291第一章 Java概述 1.1 Java语言简介1.1.1 Java语言的发展历史及特点1 历史及版本1991年,Sun公司为解决消费电子产品以及更复杂计算而设立了一个“绿色项目”,并开发了一种与平台无关的名为“Oak”的语言,它就是Java语言的前身,由于受到家电科技发展的限制,这个项目当时并没有成功,此项目的几个主要成员是Bill Joy、Patrick Naughton、Mike Sheridan、James Gosling,其中Jame

11、s Gosling是Java语言的创始人。1994年,Internet的迅猛发展与WWW应用的快速增长,给1ava语言带来了无限生机,用Java编写的浏览器Hot Java以及applet在Web上的应用,使得它逐渐成为Internet上受欢迎的开发与编程语言,一些著名的计算机公司纷纷购买了Java语言的使用权,如Microsoft、lBM、HP、NetScape、Novell、Apple、DEC、SGI等,当时许多公司希望能将Java嵌入到它们的各种开发操作系统中,于是,Sun采用颁发许可证的办法来允许各家公司把Java虚拟机和Java类库嵌入它们开发的操作系统中,这使得开发人员能很容易地选

12、择多种平台来使用Java语言编程,不同的用户也就可以脱离Web浏览器来运行Java应用程序。因此,Java语言被美国的著名杂志PC Magazine评为1995年十大优秀科技产品。Java从1995年的一个小小的编程工具,发展到了今天可驾驭从智能卡、小型消费类器件到大型数据中心的Java 2平台,全球有67的大型企业在采用Java开发自己的信息系统,200多家公司从Sun获得了Java技术许可证;400余个应用取得100纯Java证书;Java开发者阵营拥有250万多位会员,Java已进入了主流计算模式。由此可见Java的发展速度是惊人的,让我们来回顾一下它的发展历程。1995年3月,Sun公

13、司公布了Java的Alpha 1.0a2版本1995年5月,Java的第一个办公版本发布1996年1月,Java的第一个开发包JDK v10发布1997年2月,Java的开发包JDK v11发布1998年12月,Sun发布Java 2平台,JDK v12发布,Java 2平台的发布是Java发展史的新里程碑,本书正是基于Java 2技术的教程。1999年6月,Sun公司重新组织Java平台的集成方法,并将Java企业级应用平台作为发展方向,因此,到今天Java的大家族中已有了下面三个主要成员:(1)J2MEJava 2 Micro Edition用于嵌入式Java消费电子平台。2000年12月

14、,Sun公司宣布,它将推出Java 2平台Micro(J2ME)开发版和适用于Palm OS平台的MID(Mobile Information Device)规范概要。这些新品的推出将使250多万Java技术开发商更容易为通用的Palm OS平台创建应用程序。此外,Sun和Palm公司还将通过JCP(Java Community Process)项目与业界的其他专家一起为个人数字助理(PDA)确定编程接口的技术规范。开发者因为能把他们的Java技术经验用在Palm OS平台上配置解决方案而受益;终端用户因为能将采用J2ME编写的应用程序用于新的企业、商务、娱乐和通信等解决方案而受益。有了相对于

15、Palm OS平台的Java技术发展规划,开发商们将会拥有标准化的适用于业界应用的解决方案。(2)J2SEJava 2 Standard Edition用于工作站、PC机的Java标准平台。在Java 2平台JDK1.2发布之后,Sun公司又相继发布了j2sdk1.3,j2sdk1.3.1,2001年9月发布了j2sdk1.4 Beta2版。它们都是支持分布式计算的免费的Java 2标准平台。Java2标准平台体现了Sun的开放精神,被称为“互联网上的世界语”,公布于互联网上供大家免费享用,甚至连源代码也不保密,可以在网上免费下载。(3)J2EEJava 2 Enterprise Editio

16、n可扩展的企业级应用Java 2平台。2001年1月,Sun公司在旧金山召开了关于Java 2平台企业版(J2EE)的新闻发布会。J2EE是分布式企业软件组件架构的规范,具有Web性能,具有更高的特性、灵活性、简化的集成性、便捷性,以及J2EE服务器之间的互操作性。目前已有9个取得J2EE技术许可的公司推出了基于J2EE技术的兼容性产品。这些公司都通过了J2EE兼容性测试(CTS)中的各项测试,满足了J2EE技术品牌中的所有要求。当前,有25个公司持有J2EE平台的许可证,他们代表了应用服务器市场的7690的厂商。2. Java的特点在Java诞生时,世界上已有上千种不同的编程语言,而当时最为

17、流行的是C+,由于C+是从C语言发展而来,它背负着沉重的包袱,不能做到完全面向对象。Java吸收了大量C+中的优秀特性,除去了那些模糊、复杂、容易出错的特性以及C和C+中影响程序健壮性的部分,如:指针,内存申请和释放等,并引入了很多独特的高级特性。首先,作为一种程序设计语言,Java是分布式的、面向对象的、不依赖于机器的结构,且具有可移植性、鲁棒性、安全性,并且提供了多线程并发的机制,以及动态下载程序代码的机制,而且还提供代码检验机制以保证安全性。其次,它最大限度地利用了网络,Java的applet可在网络上传输而不受CPU和环境的限制。另外,Java代码清晰合理、简明流畅,还提供了丰富的类库

18、,使程序设计者可以很方便地建立自己的系统。总之,Java是一种编程语言、一种开发环境、一种应用环境、一种部署环境、一种广泛使用的网络编程语言,它是一种新的计算概念。在面向对象的程序设计(OOP)中,使用Java语言的继承性、封装性、多态性等面向对象的属性可以较好地实现信息的隐藏、对象的封装,从而降低程序的复杂性,实现代码的复用,提高开发速度。Java面向对象程序设计是本书学习的重点内容,同时也是程序设计的关键。我们将在后面的章节逐一阐述,如:Java编程语言句法和面向对象的各种概念,以及Java运行环境的许多特性,对多线程和网络的支持等,并提供Java应用中所必需的面向对象的程序设计知识和技能

19、。1.1.2 Java语言实现机制1Java虚拟机(Java Virtual Machine)Java虚拟机(JVM)是在一台计算机上由软件模拟也可用硬件来实现的假想的计算机。它定义了指令集(相当于中央处理器CPU)、寄存器集、类文件结构栈、垃圾收集堆、内存区域。首先,Java编译器在获取Java应用程序的源代码后,把它编译成符合Java虚拟机规范的字节码(byte code)的class文件,class文件是JVM中可执行文件的格式。Java编译器针对Java虚拟机产生class文件,Java虚拟机规范为不同的硬件平台提供了不同的编译代码规范,该规范使Java软件独立于平台。然后,Java解

20、释器负责将Java字节码文件解释运行,边解释边运行,这样,运行速度受到一定影响。为了提高运行速度,Java提供了另一种解释运行方法JIT(Just In lime),可以一次解释完,再运行特定平台上的机器码,这样就实现了跨平台、可移植的功能。在Java的运行环境中,每个Java解释器,不管它是Java开发工具,还是可运行applets的Web浏览器,都可执行Java虚拟机。字节码的运行要经过下面三个步骤: (1)加载代码:由Class Loader完成。 (2)校验代码:由Byte code Verifier完成。 (3)执行代码:由Runtime Interpreter完成。部分校验过的字节

21、码被编译成原始机器码并直接运行于硬件平台。这就使Java软件代码能够以与C或C+接近的速度运行,只是在加载时,因为要编译成原始机器码而略有延迟。构成Java软件程序的字节码在运行时被加载、校验并在解释器中运行。当运行applets时,字节码可被下载,然后由建于浏览器中的JVM进行解释。解释器具备两种功能,一是执行字节码,二是对底层硬件平台做适当调用。JVM的工作流程如图1-1所示。Java虚拟机提供了编译代码规范,它要求代码的格式由字节代码构成,由JVM字节码编写的程序必须保持适当的类型约束。对这种类型约束的检查,大部分是在编译时完成的。Java虚拟机也提供了硬件平台规范,它能够解读独立于平台

22、的已编译好的字节码文件,每个由Sun批准的Java虚拟机必须能够运行任何含有class文件的程序,当然这些类文件应符合Java虚拟机规范中所指定的类文件格式,如:每个文件都包含最多一个public类。Java虚拟机的执行过程有三个典型特点: (1)多线程:Java虚拟机支持多个线程的同时运行,这些线程独立地执行Java代码,处理公共数据区和私有栈中的数据。 (2)动态连接:Java程序之所以适合在网络上运行,其主要原因是由于Java虚拟机具有动态连接特性。 (3)异常处理:Java虚拟机提供了可靠的异常处理。图1-1 JVM的工作流程图2垃圾回收机制(Garbage Collection)Ja

23、va语言中任何的事物都是封装在类中的,每个类都会创建一个或多个实例对象,每个对象都有生命周期,我们需要时就去创建、调用它,不用时就应清除它。这种动态的实例对象是被存放在内存堆(Memory Heap)中的,随着科技的发展,我们可以不断更新扩展硬件设施,但任何存储介质都是有极限的,那么内存也不异常,对于不再使用的对象,我们应该将其清除,从而释放资源。许多编程语言都允许在程序运行时动态分配存储器,分配存储器的过程由于语言句法的不同而不同,当不再需要分配存储器或存储器指针溢出范围时,程序或运行环境应停止继续分配存储器,进行内存回收,但如何进行内存回收却是一件很困难很复杂的事情,在C、C+或其他语言中

24、,程序员负责回收已分配的内存。由于存储器是动态分配的,通常我们无法准确判断存储器应在何时被释放。这就为程序运行留下隐患,当系统运行中没有能够被分配的存储器时,就会导致程序瘫痪。Java语言解除了程序员释放已分配存储器的责任,是通过提供一个系统级线程对内存使用进行跟踪实现的,由于Java是单根结构,任何一个类都直接或间接地继承于java.lang.Object类,所以系统级线程可以跟踪每一次存储器的分配情况,并且可以逐级回溯,定期检测出不再使用的内存,在系统空闲时自动进行回收。垃圾收集是在Java程序的生命周期中自动进行的,我们无法判断垃圾回收线程何时启动,要执行多长时间,这使得程序在运行期间出

25、现一种不连贯的状态,并目在一定程度上降低了程序的运行效率,但这个代价还是值得的。3代码安全性检测(Code Security)Java的安全性的考虑最初来源于Java Applet,由于它可以被轻易地下载到Web浏览器上运行,改变了以往传统模式下桌面计算机系统的应用软件的更新方式,这种移动代码可以经Internet的Web浏览器自动下载和更新,在享受便捷快速的技术更新的同时也带来了安全隐患。Java v10采用了沙箱(sandbox)安全模型,它的主要思想是像applet这样通过远程下载的代码只能受限地访问系统资源,如不能访问本地文件、不能建立新的网络连接等,它们的行为受限于沙箱之中。由于这个

26、模型约束太多,大大削弱了移动代码的优势。在Java 11中采用了信任安全模型,其主要思想是使用户可以有选择地授权给远程代码,如果远程某地的资源可以被信任,那么带有此地签名的代码将被授权可以访问本地的系统资源,其他不被信任的代码仍受限在沙箱内。Java 2平台则采用了域管理方式的安全模型,无论是本地代码还是远程代码都可以通过配置的策略,设定可访问的资源域,这种策略更好地支持了企业级应用,同时也消除了区分本地代码和远程代码带来的困难。上面已经讲过字节码需要进行校验,实际上Java代码在运行之前要经过几次检验,大都是从安全角度考虑的,JVM将代码输入一个字节码校验器以测试代码段格式并进行规则检查,检

27、查伪造指针、违反对象访问权限或试图改变对象类型的非法代码、对象域访问是否合法等。在运行时还要进行字节码校验,主要判断字节码是否符合JVM规范,是否破坏系统完整性,是否引起操作数堆栈上溢或下溢,代码的参数类型是否准确,有无非法数据转换,有无访问限制违例等。1.2 Java体系结构JVM是Java的基础,就像我们在11中介绍的那样,Java虚拟机是用软件模拟实现的虚拟的计算机,它提供了跨平台能力的基础框架。Java体系结构中不仅定义了Java的开发编译环境,也定义了Java的运行环境。为运行Java应用程序和applet,计算机上应安装JVM和Java运行时解释器,这两个部分构成了Java的运行环

28、境,其主要任务包括加载代码(由类加载器执行)、校验代码(由字节码校验器执行)、执行代码(由运行时的解释器执行)。(1)类加载器:为程序的执行加载所需要的全部类。类加载器将本地文件系统的类名空间与来自远程网络源的类名空间相分离,本地类总是首先被加载,以增加安全性。当全部类被加载后,可执行文件的存储器格式被确定。这时,特定的存储器地址被分配给符号引用并创建检索表格。由于存储器格式在运行时出现,因而Java解释器增加了保护以防止对限制代码区的非法进入。(2)字节代码校验器:基于代码的规范包括语法语义的检查以及如上所述的安全性检查。(3)Java运行时解释器:它是JVM的核心内容,实现把抽象的字节码指

29、令映射到本地系统平台下的库引用或指令。(4)API类库:实现标准Java平台API的一系列可执行代码。(5)硬件本地平台接口:提供对底层系统平台资源库调用的接口。层次结构图如1-2所示:图1-2 Java系统的层次结构下面我们从文件及程序结构入手,来熟悉Java环境。1.2.1 JDK目录结构Java产品面向的主流平台有Solaris、Windows、Macintosh,要想安装Java开发平台,可以从/products/下载,当前最新的版本是JDK6 update14。以JDK1.6 Windows版本为例,如:下载jdk-6u14-windows-i58

30、6.exe和jdk-6u10-docs.zip文件,其中jdk-6u14-windows-i586.exe是安装Java平台的软件部分,docs.zip解压后生成docs子目录,它包含了超文本形式的API文档,是我们编程的助手。下面以JDK 6u14 Windows为例来简要说明JDK目录及其所包含的文件,解压安装后,会出现如图1-3所示的目录结构。图1-3 目录结构1软件安装的根目录包含版权、许可及README文件。还包括:src.zip构成Java平台核心API的所有类的源文件的归档(例如c:jdk1.6.0_14)。2bin目录包含JDK开发工具的可执行文件。3lib目录开发工具使用的归

31、档包文件。包括:tools.jar,它包含支持JDK的工具和实用程序的非核心类,dt.jar是Beanlnfo文件的DesignTime归档,Beanlnfo文件用来告诉交互开发环境(IDE)如何显示Java组件以及如何让开发人员根据应用程序自定义它们。4jre目录Java运行时环境的根目录。除了文档外,它与可部署的JRE完全相同。它的子目录jrebin中包含Java平台使用的工具和库的可执行文件及DLL。子目录jrebinclassic包含经典虚拟机使用的Windows DLL文件。经典虚拟机是Java虚拟机的语言解释器版本。当新虚拟机可用时,它们的DLL将被安装在ire/bin的某个新子目

32、录中。子目录jrelib是Java运行时环境使用的代码库、属性设置和资源文件。包括:rt.jar为自举类(构成Java平台核心API的RunTime类)。i18n.jar为字符转换类及其他与国际化和本地化有关的类。子目录jrelibext是Java平台扩展的默认安装目录。例如,安装时javaHelp. jar文件的安装目录。包括:iiimp.jar为实现internetIntranet输入方法协议的类,供从使用国际字符集的设备上接收输入的应用程序来使用。子目录jrelibsecurity包含用于安全管理的文件。这些文件包括安全策略(java.policy)和安全属性(java.security

33、)文件。5demo目录含有源代码的程序示例,如:demoapplets,可用在网页上的applet。demojfc,使用Swing组件的示例。demojava2D,二维图形的示例。6include目录包含C语言头文件,支持Java本地接口和Java虚拟机调试程序接口的本地代码编程技术。1.2.2 环境变量设置在sun公司的网站上提供了JDK的下载。当前最新的版本是jdk6 update 14。下载地址如下:/javase/downloads/index.jsp。下载的JDK文件名为:jdk-6u14-windows-i586.exe。1) 双击jdk-6u1

34、4-windows-i586.exe,按照安装提示安装好JDK。其中会提示选择安装目录,我们建议选择的安装目录为c:jdk1.6.0_14。2) 设置环境变量。设置用户变量,变量名:JAVA_HOME;变量值:c:jdk1.6.0_14。再设置系统path ,在变量值中加入“c:jdk1.6.0_14bin”。注意与其它的变量值之间用“;”分隔。该路径指向的是JDK中可执行文件所在的路径。1.2.3 第一个Java程序我们以Java Application应用程序以例(它是以main()方法作为程序入口,由Java解释器加载执行),给出一个例子,让我们来先睹为快。经典的Hello world应

35、用程序。我们通过一个记事本来编写这一程序。编写后将文件名保存为HelloWorld.java。public class HelloWorld public static void main(String args) /main方法,程序入口 System.out.print(Hello World); /在屏幕输出Hello World 代码说明:我们说java是一个面向对象的语言,一切都是对象。在java语言中没有脱离对象而独立存在的语句。程序的第一句public class HelloWorld就是定义了一个类,该类是一个公共可访问的,类的名字是HelloWorld。public stat

36、ic void main(String args),这一部分是应用程序的main方法,即应用程序的入口。该方法是一个公共的静态方法。System.out.print( )语句表示输入指定的字符串。其它的语法知识将在以后的章节中给出详细的介绍。在设置过环境变量后,我们可以在任意目录下通过命令行方式来编译和执行java程序:编译命令:javac.exe 对源文件进行编译,并生成class文件。格式:javac java源文件名javac HelloWorldJava编译后,生成字节码文件HelloWorldclass文件。执行命令:java.exe 执行编译后的程序。格式:java java文件名

37、java HelloWorld执行时屏幕输出:第二章 数据类型和变量2.1 数据类型概述数据类型指明了变量或表达式的状态和行为。Java语言的数据类型如表2-1所示。表2-1 Java语言的数据类型简单数据类型布尔类型(boolean)字符类型(char)整数类型(Integer)byteshortintlong浮点类型(Float)floatdouble复合数据类型(引用类型)类(class)接口(interface)数组与其他高级语言类似,Java语言中定义了简单数据类型,用来实现基本的数据类型。Java中的复合(引用类型)数据类型是用户根据自己的需要定义并实现的类型,它是由简单数据类型组

38、合而成的。另外在Java中,字符串没有被当作字符数组,而是被当作对象来处理,类String和StringBuffer都可以用来表示一个字符串。需要注意的是,Java不支持C、C+中的指针类型、结构体类型、联合类型和枚举类型。本章首先介绍变量和常量的概念,随后介绍八种简单数据类型,最后介绍混合类型数据运算时的优先顺序和类型转换。复合数据类型在后续章节中陆续介绍。2.2 变量和常量2.2.1 标识符(Identifiers)标识符和关键字是程序设计语言中最简单的内容,但同时又涉及程序设计中必须遵守的重要规则。在Java程序设计中,采用标识符对变量、方法、对象和类进行命名。在Java语言中,对标识符

39、的规定如下。(1)标识符是以字母、下划线( _ )、美元符( $ )开始的一个字符序列。(2)除开始的第一个字符外,后面可以跟字母、下划线、美元符和数字。(3)标识符是大小写敏感的。(4)没有最大长度限制。Java不采用通常计算机系统采用的ASCII代码集,而是采用Unicode这样一个国际标准字符集。在这种字符集中,每个字符用16位表示,整个字符集中共包含65536个字符。其中,ASCII代码集中的字符如英文字母“A”“Z”、“a”“z”和数字“0”“9”在Unicode字符集中还是用十六进制的0x00410x005a、0x00610x007a和0x300x39来表示,以表示对ASCII码的

40、兼容。另外,Unicode字符集涵盖了像汉字、日文、朝鲜文、德文、希腊文等多国语言中的符号。这样,Java中的“字母”和“数字”这两个术语涵盖的范围要广得多。其中,字母被定义成“A”“Z”、“a”“z”或国际语言中相当于一个字母的任何Unicode字符。比如,希腊用户可以使用一个“”或“”;甚至可以在变量名中使用汉字。类似地,数字范围除了传统的“0”“9”以外,还包含在任何一种语言中,地位与一个数字相当的任何Unicode字符。一般情况下,标识符中使用的字母包括下面几种。(1) “A”“Z”。(2) “a”“z”。(3) Unicode字符集中序号大于等于0x00c0的所有国际语言中相当于一个

41、字母的任何Unicode字符。为了准确,可以使用Character类中的boolean isJavaIdentifierStart (char ch)方法和 boolean isJavaIdentifierPart(char ch)方法测试参数变量ch中的Unicode字符是否可以作为标识符的开始字符或后续字符。下面举例说明Java语言中的标识符。合法的标识符:intTest Maneger_Name _var $var var3不合法的标识符:3var (数字不能作为第一个字符) My# (含有非法字符) switch (关键字)在Java语言中,有一部分标识符是系统定义的,它们有着专门的意

42、义和用途,不能当作一般的标识符使用,这些标识符称为保留字(reserved word)或关键字(keyword)。下面列出了Java语言中的大部分保留字,完整的保留字信息请参阅附录或Java语言相关文档。abstractbreakbytebooleancatchcaseclasscharcontinuedefaultdoubledoelseextendsfalsefinalfindfloatforfinallyifimportimplementsintinterfaceinstanceoflonglengthnativenewnullpackageprivateprotectedpublicr

43、eturnswitchsynchronizedshortstaticsupertrytruethisthrowthrowstranientvoidvolatilewhile注意 在Java中,常量true、false、null都是小写的,不像C+中都是大写的。在Java中,没有sizeof操作符,所有数据类型的长度都是确定的,与平台无关。2.2.2 变量(Variables)和常量(Constant VariabIes)Java语言中的数据类型,必须将其实例化才能在程序中使用。各种数据类型实例化后的表示方式都可分为两种:变量和常量。1 变量变量表示Java程序中的基本存储单元。Java的变量有

44、两大类型:基本类型和复合类型。基本类型包括数值型(整数型和浮点型)、布尔型和字符型;复合类型包括数组类和接口。变量的定义包括变量名、变量的类型、变量的初始值和变量的属性,其定义格式如下:VariableModifier typeSpecifier varName=value,varname=value;其中,前边带方括号的部分是可选项,表示变量的属性;typeSpecifier是Java中任意合法的变量类型;varName是变量名,可以是Java中任意合法的标识符,变量名应具有一定的意义,以增加程序的可读性;value是给变量赋的初始值,该值应与变量的数据类型相符,该项也为可选项,如果没有给变

45、量赋初值,则对方法中定义的局部变量来说,可以事后再专门给该变量赋值;而对类成员变量来说,变量的初值为该变量类型的默认初始值(例如数值型变量的默认值是0或0.0,字符型变量的默认值是16位的0,布尔型变量的默认值是false)。变量的属性主要说明变量的作用域。变量的作用域指明可访问该变量的一段代码,声明一个变量的同时也就指明了变量的作用域。按作用域来分,变量可以有下面几种:局部变量、类成员变量、方法参数和异常处理参数。u 局部变量在方法或方法的一个代码块中声明,它的作用域为它所在的代码块(整个方法或方法中的某块代码)。u 类成员变量在类中声明,而不是在类的某个方法中声明,它的作用域是整个类。u

46、方法参数传递给方法,它的作用域就是这个方法。u 异常处理参数传递给异常处理代码,它的作用域就是异常处理部分。在一个确定的域中,变量名应该是惟一的。通常,一个域用大括号 来划定。有关类成员变量的属性、方法的参数传递以及异常处理将在后续章节中讲述。变量的定义举例如下:Int a, b,c; /指定变量a,b,c为int型double d1, d2=0.0; /指定变量d1,d2为double型,d2的初始值为0.0char ch1,ch2; /指定变量ch1,ch2为char型其中,多个变量间用逗号隔开,d2=0.0对实型变量d2赋初值0.0,只有局部变量和类成员变量是可以这样赋初值的,而方法参数

47、和异常处理参数的变量值是由调用者给出的。另外,在变量的属性定义中,final属性可用来定义一个常量。所谓常量或最终变量,是指该变量一旦被赋值,则在程序中不能再修改它的值(如果用final修饰类,则该类不能被继承。例如:final int MAX_ARRAY_SIZE=22 ; /*指定常量MAX_ARRAY_SIZE为int型,其值为22 */final double PI=3.14159; /指定常量PI为double型,其值为3.14159final int MIN_VALUE=0 ; /指定常量MIN_VALUE为int型,其值为0变量被final修饰时,可以在声明时给出初始值;也可以在

48、声明时不给出初始值,稍后再给定值。但无论哪种情况,一经给定值,便不允许再被修改。下面的例子中,类Student中的成员变量、NO被final修饰,NO的值通过构造方法给出:public class Student /声明类Student private final int NO; /在类Student中声明标识符常量NOpublic Student(int i) /构造方法 NO = i; /在构造方法中给NO赋值 public int getNO() /方法getNO() return NO;常值变量或标识符常量的使用场合是:该常量在程序中经常被使用,当其值不准确或需要被修改时,如定义为标识

49、符常量,则只需要修改程序中给标识符常量赋值的一条语句;否则,需要修改程序中的多处。使用final关键字与static(静态)属性相结合,将常值变量定义为一个类(或静态)而不是实例的常值变量,可以增加该常值变量的作用范围。例如:class ClassNamestatic final double E = 2.71828183;static returnType classMethod(paramlist).为了清楚起见,Java制订了编码规定。习惯上,简单类型的标识符常量名用由下划线分开的大写的词表示,如MAX_VALUE、MY_NAME;类成员变量名通常不用下划线,也不用$符号,类成员变量名的

50、第一个字母均为小写,当类成员变量名用由多个词组成的混合方式表示时,则用大写字母隔开两个词,如nextItem、currentValue、getTimeOfDay。另外,常量名和变量名均应有一定的意义。2 常量常量是在程序运行期间不能被修改的量,常量分为普通常量(常数)和标识符常量,标识符常量就是常值变量,使用前需要先被定义;而普通常量(常数)可以直接使用。和变量一样,常量也有各种数据类型。Java中,常量分整数、浮点数、布尔数、字符和字符串五种类型。如布尔常量true和false,整数常量869,浮点型常量5689,字符常量“g”,字符串常量“This is a constant string

51、”等。2.3 简单数据类型2.3.1 整型数据整型数据是一种数值型数据,是指那些没有小数部分的数字。1 整型变量Java为整型变量提供了byte、short、int、long四种类型。表2-2列出各类型所在内存的位数和其表示范围。表2-2整型变量的范围数据类型所占位数数的范围Byte8-27(27-1)Short16-215(215-1)Int32-231(231-1)long64-263(263-1)int类型是最常使用的一种整数类型。它所表示的数据范围足够大,而且适合于32位、64位处理器。但对于大型计算,常会遇到很大的整数,超出int类型所表示的范围,这时要使用long类型。由于不同的机

52、器对于多字节数据的存储方式不同,可能是从低字节向高字节存储,也可能是从高字节向低字节存储,这样,在分析网络协议或文件格式时,为了解决不同机器上的字节存储顺序问题,用byte类型来表示数据是合适的。而通常情况下,由于其表示的数据范围很小,容易造成溢出,应避免使用。short类型则很少使用,它限制数据的存储为先高字节,后低字节,这样在某些机器中会出错。注意,Java没有提供任何无符号整数类型。整型变量的定义举例如下:byte b; /指定变量b为byte型short s; /指定变量s为short型int i; /指定变量i为int型long l; /指定变量l为long型整型变量的默认初始值为0

53、。注意,局部变量无默认初始值,必须赋值。在计算机做数学处理后,如果一个数超出了计算机的表达范围,称为溢出;如果超出最大值,称为上溢;如果超过最小值,称为下溢。在一个整型类型数的最大值加1后,产生上溢而变成了同类型的最小值:最小值减1后,产生下溢而变成了同类型的最大值。Java语言在简单数据类型包装类中提供了四个常值变量表示最大和最小的整型值如表2-3所示。表2-3Java整型常量的最大值和最小值最大值最小值int型Integer.MAX_VALUEInteter.MIN_VALUElong型Long.MAX_VALUELong.MIN_VALUE2 整型常量与C、C+相同,Java的整常数有三

54、种形式:(1)十进制整数,如236,-365,0。(2)八进制整数,以0开头,如0124表示十进制数84,-012表示十进制数-10。(3)十六进制整数,以0x或0X开头,如0xl24表示十进制数292,-0Xl3表示十进制数-19。整型常量默认在机器中占32位,具有int型的值,对于long型值,则要在数字后加L或l,如125L。表示一个long型的长整数,它在机器中占64位。2.3.2 浮点型(实型)数据实型数据也是一种数值型变量,是指那些含有小数部分的数字。1 实型变量实型变量的类型有float和double两种,表2-4列出这两种类型所占内存的位数和其表示范围。表2-4实型变量的数值范围数据类型所占位数数的范围float323.4e-038 3.4e+038double641.7e-308 1.7e+308双精度类型dou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论