资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Java,语言程序设计案例教程,第,1,章,Java,语言概论,1.1 Java,语言的发展过程,Java,语言最早诞生于,1991,年,刚开始它只是,Sun,公司为一些消费性电子产品所设计的通用环境。因为当时,Java,的应用对象只限于,PDA,、电子游戏机、电视机顶盒之类的消费性电子产品,所以并未被众多的编程技术人员所接受。,在,Java,出现以前,,Internet,上的信息内容都是一些静态的,HTML,文档。正是因为在,Web,中看不到交互式的内容,所以人们很不满意当时的,Web,浏览器,他们迫切希望能够在,Web,上创建一类无须考虑软、硬件平台就可以执行的应用程序,并且这些程序还要有极大的安全保障。正是由于这种需求给,Java,带来了前所未有的施展舞台。,Sun,的工程师从,1994,年起把,Java,技术应用于,Web,上,并且开发出了,HotJava,的第一个版本。于是,,Java,的名字逐渐变得广为人知。,Java,在,Sun World95,中被正式发布。,Java,的,“,Write Once,,,Run Anywhere,(一次编写,处处运行),”,口号使得,Java,一出现就引起了广泛的注意,用,Java,技术开发的软件可以不用修改或重新编译就可直接应用于任何计算机上。,从此以后,,Java,随着网络的快速发展,而成为一个应用最广泛的程序语言。,“,网络即是计算机,”,是,Sun,公司的格言。一时间,使用,Java,技术进行软件开发成为广大技术人员的一种时尚。,到,2010,年,4,月为止,,Java,已经发布了一系列的版本,目前最新版本为,JDK7.0,(,1.7.0,)预览版。,1.2 Java,语言的工作原理及特点,Java,是一种高级的、通用的、面向对象的、适用于网络环境的程序设计语言,同时它又是一种操作平台,为程序的运行提供一个统一通用的环境,屏蔽底层的操作系统及硬件环境的差异性。,1.2.1 Java,程序的处理过程,一个,Java,程序的执行必须经过编辑、编译、运行三个步骤。,编辑是指在某个,Java,语言开发环境中进行程序代码的输入与编写,最终形成后缀名为,.java,的,Java,源文件。,编译是指使用,Java,编译器(,javac,命令)把源文件翻译成二进制代码的过程,这期间也进行语法级别错误和引用错误的排查,编译后将生成后缀名为,.class,的字节码文件。该字节码文件并不是一个可以直接运行的文件。,运行是指使用,Java,解释器将字节码文件翻译成机器代码,执行并得到运行结果。这一过程如图,1.1,所示。,1.2.2 Java,字节码,字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码,它是一种二进制文件,是,Java,源文件由,Java,编译器编译后生成的目标代码文件。编程人员和计算机都无法直接读懂字节码文件,它必须由专用的,Java,解释器来解释执行,因此,Java,是一种在编译基础上进行解释运行的语言。,1.2.3 Java,虚拟机(,JVM,),Java,解释器负责将字节码文件翻译成具体硬件环境和操作系统平台下的机器代码,以便执行。因此,Java,程序不能直接运行在现有的操作系统平台上,它必须运行在被称为,Java,虚拟机的软件平台之上。,Java,虚拟机(,JVM,)是驻留于计算机内存的虚拟计算机或逻辑计算机,实际上是一段负责解释并执行,Java,字节码的程序。,Java,解释器只是,Java,虚拟机的一部分。,在运行,Java,程序时,首先会启动,JVM,,然后由它来负责解释执行,Java,的字节码,并且,Java,字节码只能运行于,JVM,之上。这样利用,JVM,就可以把,Java,字节码程序和具体的硬件平台以及操作系统环境分隔开来,只要在不同的计算机上安装了针对于特定具体平台的,JVM,,,Java,程序就可以运行,而不用考虑当前具体的硬件平台及操作系统环境,也不用考虑字节码文件是在何种平台上生成的。,JVM,把这种不同软硬件平台的具体差别隐藏起来,从而实现了真正的二进制代码级的跨平台移植。,JVM,是,Java,平台无关的基础,,Java,的跨平台特性正是通过在,JVM,中运行,Java,程序实现的。,Java,的这种运行机制可以通过图,1.2,说明。,Java,语言这种,“,Write Once,,,Run Anywhere,”,的方式,有效地解决了目前大多数高级程序设计语言需要针对不同系统来编译产生不同机器代码的问题,即硬件环境和操作平台的异构问题,大大降低了程序开发、维护和管理的开销。,需要注意的是,,Java,程序通过,JVM,可以达到跨平台特性,但,JVM,是不跨平台的。也就是说,不同操作系统之上的,JVM,是不同的,,Windows,平台之上的,JVM,不能用在,Linux,上面,反之亦然。,1.2.4,垃圾回收,Java,虚拟机使用两个独立的堆内存,分别用于静态内存分配和动态内存分配。其中一个是非垃圾回收堆内存,用于存储所有类的定义、常量池和方法表。另一个堆内存再分为两个可以根据要求往不同方向扩展的小块。用于垃圾回收的算法适用于存放在动态堆内存中的对象。垃圾回收器将在回收对象实例之前调用,finalize(),方法。即使显示调用垃圾回收方法(,System.gc(),),也不能保证立即运行,这是因为垃圾回收线程的运行优先级很低可能经常会被中断。,1.3 Java SDK,的安装与配置,若要编写,Java,程序,就需要开发工具。现在可用于开发,Java,程序的工具很多,,Java SDK,是,Sun,公司(现被,Oracle,收购)提供的免费开发工具集。,Java SDK,的意思是,Java Software Development Kit,,即,Java,软件开发工具包,也称为,JDK,。截止,2010,年,4,月,提供下载的,Java SDK,标准版软件最新版本为,1.6Update 20,(,JDK 1.7,预览版也已发布),有不同操作系统的不同版本。下面介绍在,Windows XP,操作系统下安装和配置,Java SDK,的过程。,1.3.1,下载并安装,Java SDK,开发工具,Java SDK,目前有以下几个版本:,Java SE,(,Java Platform,,,Standard Edition,):即通常所说的,Java,平台标准版,提供基础,Java,开发工具、执行环境与,API,(,Application Program Interface,)。,Java ME,(,Java Platform,,,Micro Edition,):,Java,平台微型版,适用于消费性电子产品,提供嵌入式系统所使用的,Java,开发工具、执行环境与,API,。,Java EE,(,Java Platform,,,Enterprise Edition,):,Java,平台企业版,它是由,Sun,公司所提出的一组技术规格,规划企业用户以,Java,技术开发、分发、管理多层式应用结构。,作为学习,Java,语言和一般的应用开发,使用,Java SE,版本足够了,本书采用的是,Java SDK1.6,版本。可以从,Sun,公司网站上下载,下载网站是:,DB,、公共,JRE,、源代码等选项可不安装,但开发工具选项是必需的。如图,1.4,所示。,图,1.3 JDK,下载地址,3,)单击图,1.4,中的,“,下一步,”,按钮,开始安装。如果在图,1.4,中选择了安装公共,JRE,,则在安装的过程中还会弹出另一个,“,自定义安装,”,对话框提示用户选择,Java,运行时环境的安装路径,其操作过程与图,1.4,界面类似。,图,1.4,选择,JDK,安装路径,3,)单击图,1.4,中的,“,下一步,”,按钮,开始安装。如果在图,1.4,中选择了安装公共,JRE,,则在安装的过程中还会弹出另一个,“,自定义安装,”,对话框提示用户选择,Java,运行时环境的安装路径,其操作过程与图,1.4,界面类似。,4,)最后单击,“,完成,”,按钮完成,JDK,的安装。,在默认情况下,安装后会在,C,盘,“,Program Files,”,文件夹下产生如图,1.4,所示的文件夹结构,其中:,bin,文件夹下包含一些开发工具,这些开发工具能够帮助开发、执行、调试以及文档化,Java,程序。,jre,文件夹下包含,Java,虚拟机、类库和其他支持,Java,程序运行的文件。,lib,文件夹下包含开发工具所需要的附加类库和支持文件。,demo,文件夹下带有,Java,源文件的例子,这些例子包括使用,Swing,、,Java,的基础类和,Java,平台调试结构的例子。,图,1.5 Java SDK,安装文件夹结构,1.3.2 JDK,的配置与测试,JDK,安装完成后,需要设置环境变量及测试,JDK,配置是否成功,具体步骤如下:,1,)在,Windows,系统桌面上右键单击,“,我的电脑,”,图标,选择,“,属性,”,菜单项。在弹出的,“,系统属性,”,对话框中选择,“,高级,”,选项卡,然后单击,“,环境变量,”,按钮,将弹出,“,环境变量,”,对话框。,2,)在,“,环境变量,”,对话框中,单击,“,系统变量,”,区域中的,“,新建,”,按钮,将弹出,“,新建系统变量,”,对话框。,3,)在,“,新建系统变量,”,对话框中,在,“,变量名,”,文本框中输入,“,JAVA_HOME,”,,在,“,变量值,”,文本框中输入,JDK,的安装路径,“,C:Program FilesJavajdk1.6.0_10,”,,如图,1.6,所示。最后单击,“,确定,”,按钮,完成变量,JAVA_HOME,的创建。,4,)查看是否存在,Path,变量,若存在,则编辑该变量,在变量值后追加,“,;%JAVA_HOME%bin,”,,如图,1.7,所示;若不存在,则新建该变量,并设置变量值为,“,%JAVA_HOME%bin,”,。,5,)查看是否存在,Classpath,变量,若存在,则在变量值后加入:,.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar,图,1.6,创建,JAVA_HOME,变量,若不存在,则创建该变量,并设置同上的变量值。图,1.7,编辑,Path,变量,6,)测试,JDK,的安装和配置是否成功。依次单击,“,开始,”,按钮,单击,“,运行,”,菜单项,在弹出的,“,运行,”,对话框中输入,“,cmd,”,命令,进入命令提示符窗口。进入任意目录下输入,“,javac,”,命令,按,键执行该命令,系统会输出,javac,命令的使用帮助信息,如图,1.8,所示。这说明,JDK,安装配置成功,否则需要检查上面各步骤的操作是否正确。,图,1.8,显示,javac,命令的使用帮助,1.4 Eclipse,的安装与使用,Eclipse,是一个基于,Java,的、开放源码的、可扩展的应用开发平台,它为编程人员提供了一流的,Java,集成开发环境(,Integrated Development Environment,,,IDE,)。它是一个可以用于构建集成,Web,和应用程序开发工具的平台。,1.4.1 Eclipse,的安装与启动,在,Eclipse,的官方网站,ww.eclipse.org,可下载,Eclipse,的最新版本,下载后的文件一般为一个,zip,格式的压缩文件。,1,)将下载后的压缩文件解压后,双击,eclipse.exe,文件就可启动,Eclipse,。,2,)解压完成后,启动的,Eclipse,是英文版的,可以通过安装,Eclipse,的多国语言包,实现,Eclipse,的本地化。多国语言包可从,Eclipse,官方网站进行下载。具体的,Eclipse,汉化步骤请参看相关文献。,3,)每次启动,Eclipse,时,都需要设置工作空间,工作空间用来存放创建的项目。如图,1.9,所示。单击,“,Browse,”,按钮可选择一个存在的文件夹。可通过勾选,“,Use this as the default and do not ask again,”,选项屏蔽该对话框。,图,1.9,启动,Eclipse,时设置工作空间,4,)最后单击,“,OK,”,按钮,若是初次进入在第(,3,)步骤中选择的工作空间,则出现,Eclipse,欢迎界面,如图,1.10,所示。图,1.10 Eclipse,的欢迎界面,1.4.2 Eclipse,的使用,1,),Eclipse3.2,开发工具的常用快捷键如表,1.1,所示,熟悉这些快捷键可大幅提高您的工具使用效率。,表,1.1 Eclipse3.2,开发工具中常用快捷键,快捷键 功能,F3,跳转到类或变量的声明处,Alt+/,代码提示,Alt+,上下方向键 将选中的一行或多行向上或向下移动,Alt+,左右方向键 跳到前一次或后一次的编辑位置,,在代码跟踪时用 的比较多,Ctrl+/,注释或取消注释,Ctrl+D,删除光标所在行的代码,Ctrl+K,将光标停留在变量上,,按该快捷键可查找下一个同样的变量,Ctrl+Q,回到最后编辑的位置续表,Ctrl+Shift+K,和,Ctrl+K,键查找的方向相反,Ctrl+Shift+X,将所选字符转为大写,Ctrl+Shift+Y,将所选字符转为小写,Ctrl+Shift+/,注释代码块,Ctrl+Shift+,取消注释代码块,Ctrl+Shift+M,导入未引用的包,Ctrl+Shift+D,在,debug,模式中显示变量值,Ctrl+Shift+T,查找工程中的类,Ctrl+Shift+Down,复制光标所在行至其下一行,鼠标双击括号(小,括号、中括号、大括号)将选择括号内的所有内容,2,)使用,Eclipse,开发简单的,Java,应用程序下面应用,Eclipse,开发一个简单的,Java,应用程序,开发步骤如下:(,1,)启动,Eclipse,,弹出如图,1.9,所示对话框,通过该对话框选择一个工作空间,然后单击,“,OK,”,按钮进入,Eclipse,开发界面,如图,1.11,所示。图,1.11 Eclipse,开发界面,(,2,)依次单击菜单栏中的,“,File,”,/,“,New,”,/,“,Project,”,菜单项,将弹出,“,新建项目,”,对话框,如图,1.12,所示。图,1.12,新建项目对话框,(,3,)在图,1.12,所示对话框中选择,“,Java Project,”,选项,并单击,“,Next,”,按钮。(,4,)在弹出的,“,New Java Project,”,对话框中,在,“,Project Name,”,文本框中输入你的项目名称,本例中项目名称为,“,MyJava,”,。其他保留默认配置,如图,1.13,所示。,图,1.13,配置项目对话框,(,5,)单击,“,Finish,”,按钮,完成,Java,项目的创建,创建的项目会在,Eclipse,的左侧栏中进行显示,如图,1.14,所示。图,1.14,创建的,Java,项目,(,6,)添加一个,Java Class,。在图,1.14,的左侧栏,“,Package,”,中鼠标右键单击项目名,“,MyJava,”,,在弹出的快捷菜单中依次选择,“,New,”,/,“,Class,”,,弹出如图,1.15,所示的,“,New Java Class,”,对话框。图,1.15,添加类对话框,(,7,)图,1.15,中,在,“,Name,”,栏中输入要添加的类的名称,本例中我们输入,“,HelloApplication,”,。由于本例只包含一个主类,因此在下面勾选,“,public static void main(String args),”,选项,让,Eclipse,自动在类中创建,main,方法;若添加的不是主类,则无需勾选此选项。其它保持不变,单击,“,Finish,”,按钮完成类文件的添加。,Eclipse,会自动打开刚才添加的类文件,并且自动生成类定义和,main,方法定义的代码框架。在,main,方法中输入,【,例,1.1】,的主方法中的代码。最后界面如图,1.16,所示。图,1.16,添加类及其代码后的界面,1.5 Java,程序举例,Java,程序分为应用程序(,Application,)和小程序(,Applet,)。下面通过两个简单的,Java,程序的例子,来了解这两类程序的构成和特点。,1.5.1 Java Application,举例,【,例,1.1】,在控制台输出信息,“,Hello World,!,”,的,Java Application,。,/*,保存的文件名为,“,HelloApplication.java,”,*/,public class HelloApplication /,定义类,public static void main(String args)/main,方法,System.out.println(Hello World!);/,在控制台输出(显示)数据,程序第,1,行用,“,/*,”,和,“,*,/,”,包括起来以及第,2,行至第,4,行后面以,“,/,”,引导的内容称之为注释。注释是对程序进行解释说明的文字信息。在程序中恰当地使用注释,可增加程序的可读性,但不会对程序的编译和运行产生任何影响。,第,2,行开始是类的定义,保留字,class,用来定义一个类,本例中定义的类名为,HelloApplication,,保留字,public,用来声明该类是一个公共类。一个,Java,程序文件中可以定义多个类,但最多只允许有一个公共类。程序文件名必须与这个公共类的类名保持一致。,整个类定义由,“,”,和,“,”,包括起来,其内部称之为类体。,本例中在类体中定义了一个,main(),方法,该方法必须用,public static void,进行限定。,public,指明所有类都可以访问这个方法;,static,指明该方法是一个类方法,可以直接通过类名进行调用;,void,指明该方法不返回任何值。,对于一个,Java Application,来说,,main(),方法是必须的,而且必须按照本例中的格式进行定义。,Java,解释器在没有生成任何对象的情况下,以,main(),作为入口来执行程序。因此一个可运行的,Java Application,中只能有一个按照本例格式定义的,main(),方法。,main(),方法定义中,小括号内的,String args,是传递给,main(),方法的参数,,args,是一个数组变量,它的元素是,String,类的实例。在,main(),方法的方法体中(由紧跟在,main(),后的,“,”,和,“,”,包括),只有一条语句:,System.out.println(Hello World!);,其功能是在控制台上显示一行字符:,Hello World!,1.5.2 Java Applet,举例,【,例,1.2】,输出信息,“,Hello World,!,”,的,Java Applet,。,import java.awt.Graphics;,import java.applet.Applet;,public class HelloApplet extends Applet,public void paint(Graphics g),g.drawString(Hello World!,10,10);,程序的第,1,行和第,2,行用,import,语句引入,java.awt.Graphics,类和,java.applet.Applet,类。这是本,Applet,程序需要的两个类:小程序需要继承,Applet,类实现;图形界面的,Applet,程序输出常用具有绘图功能的,paint(),方法,该方法需要,Graphics,类的参数。,与,Java Application,一样,所有的,Java Applet,也都是类,且必须是,Applet,类的子类。保留字,extends,指明,HelloApplet,是,Applet,类的子类。在类体中,重写了父类,Applet,的,paint(),方法,其中参数,g,为,Graphics,类的对象,可以认为是用于绘图的画板。在,paint(),方法中,调用对象,g,的方法,drawString(),,在坐标,(10,10),处显示字符串,“,Hello World!,”,,坐标是用像素点表示的。,此程序中没有,main(),方法,这是,Applet,与,Application,的主要区别之一。,Applet,程序是不能独立运行的,必须编写,HTML,文件,将,Applet,嵌入其中,然后用,appletviewer,来运行,或在支持,Java,的浏览器上运行。,编写的,HTML,文件内容如下:,1.5.3 Java,程序结构,过以上两个举例可看出,,Java,程序都是由类构成的。对于一个,Java Application,程序来说,必须在一个类中定义一个,main(),方法。对于,Java Applet,程序来说,必须有一个类作为,Applet,类或,JApplet,类的子类,继承,Applet,类或,JApplet,类的类是小程序的主类。,1,类的个数,一个,Java,程序源文件中最多只能有一个,public,类,其他类的个数没有限制。,2,命名,如果,Java,程序源文件中包含了一个,public,类,则该源文件的文件名必须以该类的名称来命名,注意字符的大小写也要一致。如,在例,1.1,和,1.2,中,分别包含的,public,类的类名为,HelloApplication,和,HelloApplet,,所以这两个源文件的文件名只能是,HelloApplication.java,和,HelloApplet.java,。,如果,Java,程序中没有,public,类,则源文件的命名没有特殊要求。,3,程序结构,package/0,个或,1,个,包定义,必须放在文件开始,import/0,个或,1,个,引入类,必须放在所有类定义之前,public class/interface Definition/0,个或,1,个,公共类或接口定义,文件名必须与该其名相同,class Definition/0,个或多个,其他类定义,interface Definition/0,个或多个,其他接口定义,建议:书写源程序时,应该采取缩进方式的分层次的书写,这样有助于程序的阅读和理解,也便于程序后期的修改维护。,本章小结,(,1,),Java,程序的处理过程:编写源程序编译成字节码文件运行字节码程序。,(,2,),Java,程序的类型:,Java Application,和,Java Applet,。,(,3,),JDK,的安装与配置:从官方网站下载,JDK,安装程序包;运行,JDK,安装文件;配置系统环境变量,path,和,classpath,。,(,4,)使用,Eclipse,编写运行,Java,程序:,Eclipse,是以,Project,的方式组织管理,Java,程序的;程序的输入与编辑方法;程序的运行和运行结果的查看等。,第,2,章,Java,语言基本语法,2.1 Java,语言的数据类型,2.1.1 Java,语言基本字汇,在第一章中,我们已经学习了第一个,Java,应用程序,本节将更正式的介绍,Java,的基本元素。,Java,程序由空白分隔符、标识符、注释、文字、运算符以及关键字组成。,1.,空白分隔符,Java,语言是一种形式自由的语言。这意味着你不需要遵循任何特殊的缩进书写规范。例如,程序的所有代码可以写在一行上,也可以按自己喜欢的方式输入程序代码。前提是必须在已经被运算符或分隔符描述的标记之间至少留出一个空白分隔符。在,Java,中,空白分隔符可以是空格,,Tab,跳格键或是换行符。,2.,标识符,标识符是代表类、方法或者变量等的名字。一个标识符可以是大写或小写字母、数字、下划线、美元符号的任意顺序组合,但不能以一个数字开头。否则容易与数字、常量相混淆。,Java,语言是区分大小写的,如,VALUE,和,Value,是两个不同的标识符。下面是一些有效的标识符:,AvgTempcounta4$testthis_is_ok,下面是一些无效的标识符名:,2counthigh-tempNot/ok,3.,常量,在,Java,语言中,常量也可以称为,“,字面值,”,,是表示在程序执行过程中值不发生变化的量。例如,下面是一些常量:,10098.6XThis is a test,表中从左到右,第一个数表示一个整数型常量,第二个数是一个浮点型常量,第三个数是一个字符型常数,最后一个数是字符串。常量能在任何地方被它所允许的类型使用,代表的是所属类型的一个值。,4.,注释,Java,语言中定义了,3,种注释类型。分别为:单行注释(,/,)、多行注释(,/*,*/,)和文档注释。第,3,种注释类型即文档注释以,HTML,文件的形式为你的程序作注释。文档注释以,“,/*,”,开始,以,“,*,/,”,结束。,5.Java,关键字,目前,Java,语言中一共定义了,48,个保留关键字(参见表,2-1,)。这些关键字不能用于变量名、类名或方法名。,关键字,const,和,goto,虽然被保留但未被使用。在,Java,语言的早期,还有几个其他关键字被保留以备以后使用。目前,Java,语言中定义的关键字如表,2-1,所示。,表,2-1 Java,保留关键字,abstract const finally int public this,boolean continue float interface return throw,break default for long short throws,byte do goto native static transient,case double if new strictfp try,catch else implements package super void,char extends import private switch volatile,class final instanceof protected synchronized while,除了上述关键字外,,Java,语言中还有以下保留字:,true,,,false,,,null,。这些词是,Java,定义的值。也不能用这些词作为变量名,类名等。,2.1.2,简单数据类型,Java,语言中定义了,8,个简单(或基本)的数据类型:字节型(,byte,),短整型(,short,),整型(,int,),长整型(,long,),字符型(,char,),浮点型(,float,),双精度型(,double,),布尔型(,boolean,),这些类型可分为,4,组:,整数:该组包括字节型(,byte,),短整型(,short,),整型(,int,),长整型(,long,),它们有符号整数。,浮点型数:该组包括浮点型(,float,),双精度型(,double,),它们代表有小数精度要求的数字。,字符:该组包括字符型(,char,),它代表字符集的符号,例如字母和数字。,布尔型:该组包括布尔型(,boolean,),它是一种特殊的类型,表示真,/,假值。,以下分别讨论各种数据类型。,1.,整数类型,Java,语言中定义了,4,个整数类型:字节型(,byte,),短整型(,short,),整型(,int,),长整型(,long,)。,这些整数类型的长度和变化范围如表,2-2,所示:,表,2-2,整数的各种类型及特性,名称 长度 数的范围,长整型,64,9,223,372,036,854,775,808 9,223,372,036,854,775,807,整型,32,2,147,483,648 2,147,483,647,短整型,16,32,768 32,767,字节型,8,128127,2.,浮点型,浮点数字,就是实数,当计算的表达式有精度要求时被使用。例如,计算平方根或超出人类经验的计算(如正弦和余弦),它们的计算结果的精度要求使用浮点型。,Java,语言中实现了标准(,IEEE-754,)的浮点型和运算符集。有,2,种浮点型,单精度浮点型(,float,)及双精度(,double,)浮点型。它们的长度和变化范围如表,2-3,所示:,表,2-3,浮点型分类及其特性,名称 位数 数的范围,double641.7e,308,1.7e+308,float323.4E,038,3.4E+038,3.,字符型,在,Java,语言中,存储字符的数据类型是,char,。但是,,C/C+,程序员要注意:,Java,的,char,与,C,或,C+,中的,char,不同。在,C/C+,中,,char,的宽度是,8,位整数。但,Java,语言中的情况不同。,Java,语言使用,Unicode,码代表字符。,Unicode,定义的国际化的字符集能表示迄今为止人类语言的所有字符集。它是几十个字符集的统一,例如拉丁文,希腊语,阿拉伯语,古代斯拉夫语,希伯来语,日文,匈牙利语等等,因此它要求,16,位。这样,,Java,中的,char,类型是,16,位,其范围是,0,65,536,,没有负数的,char,。,4.,布尔型,Java,语言中,有一种表示逻辑值的简单类型,称为布尔型(,boolean,)。它的值只能是真,(true),或假这,(false),两个值中的一个。它是所有的诸如,ab,这样的关系运算的返回类型。布尔类型对管理像,if,、,for,这样的控制语句的条件表达式也是必需的。,2.1.3,常量(字面量),1.,整数型常量,整数可能是在典型的程序中最常用的类型。任何一个数字的值就是一个整数字面量。例如,1,,,2,,,3,和,42,。这些都是十进制的值,这意味着对他们的描述基于数字,10,。此外,在,Java,语言中还可以使用八进制(基数是,8,)和十六进制(基数是,16,)。对八进制的值通过在它的前面加一个前导,0,来表示。正常的十进制的数字不用前导零。这样,看起来有效的值,09,将在编译器编译时产生一个错误,因为,9,超出了八进制的范围,0,7,。程序员对数字更常用的是十六进制,通过前导的,0 x,或,0X,表示一个十六进制的字面量。十六进制数的范围是,0,15,,这样用,A,F,(或,a,f,)来替代,10,15,。,Java,语言中的整数字面量默认是,int,型。可以在字面量后面加上字母,L,表示是,long,型的整数常量,如,1000L,。,2.,浮点型常量,浮点数代表带小数部分的十进制数。他们可通过标准记数法或科学记数法来表示。标准记数法由整数部分加小数部分组成。例如,2.0,,,3.14159,,和,0.6667,都是有效的标准记数法表示的浮点数字。科学记数法是浮点数加一表明乘以,10,的指定幂次的后缀,指数是紧跟,E,或,e,的一个十进制的数字,它可以是正值或是负值。例子如,6.022E23,,,314159E-05,,及,2e+100,。其中,6.022E23,代表,6.0221023,。,Java,语言中的浮点字面量默认是双精度型。为了指明一个浮点字面量,可以在字面量后面加,F,或,f,,如,9.8F,。,3,布尔型常量,布尔型字面量很简单。布尔型字面量仅仅有,2,个逻辑值:真或假。真用,true,表示,假用,false,表示。,Java,语言中,真字面量的值不等于,1,,假字面量的值也不等于,0,,它们仅仅能被赋给已定义的布尔变量,或在布尔的运算符表达式中使用。,3.,字符型常量,Java,语言用,Unicode,字符集来表示字符(,16,位)。,Java,语言中的字符可以被转换为整数并可进行像加或减这样的整数运算。通过将字符包括在单引号之内来表示字符字面量。所有可见的,ASCII,字符都能直接被包括在单引号之内,例如,a,,,z,,,and,。对于那些不能直接被包括的字符,可以采用转义序列方式,例如,代表单个引号字符本身,,n,代表换行符字符。为直接得到八进制或十六进制字符的值也有一个机制。对八进制来说,使用反斜线加,3,个阿拉伯数字。例如,,141,是字母,a,。对十六进制来说,使用反斜线和,u,(,u,)加,4,个十六进制阿拉伯数字。例如,,u0061,因为高位字节是零,代表,ISO-Latin-1,字符集中的,a,。表,2-4,列出了转义字符序列。,表,2-4,字符转义序列,转义序列说明,ddd,八进制字符(,ddd,),uxxxx,十六进制,Unicode,码字符,单引号,“,双引号,反斜杠,r,回车键,n,换行,f,换页,t,水平制表符,b,退格,4.,字符串常量,Java,语言中的字符串字面量和其他大多数语言一样,将一系列字符用双引号括起来。如:,Hello World,和,twonlines,等。在,Java,语言中可以使用连接操作符,“,+,”,把两个或更多的字符串常量连接在一起,组成一个更长的新字符串。如:,”,abcd,”,+,”,efg,”,的结果是,”,abcdefg,”,。,2.1.4,变量,变量是,Java,程序的一个基本存储单元。变量由一个标识符,类型及一个可选初始值的组合定义。此外,所有的变量都有一个作用域用来定义变量的可见性和生存期。接下来讨论变量的这些元素。,1.,声明一个变量,在,Java,语言中,所有的变量必须先声明再使用。基本的变量声明方法如下:,type identifier =value,,,identifier=value.;,type,是,Java,语言的基本类型之一,或类及接口类型的名字(类和接口类型在本书的后部分讨论)。标识符(,identifier,)是变量的名字,指定一个等号和一个值来初始化变量。初始化表达式必须产生与指定的变量类型一样(或兼容)的变量。声明指定类型的多个变量时,使用逗号将各变量分开。,以下是几个各种变量声明的例子。其中有一些进行了初始化。,int a,b,c;,int d=3,e,f=5;,byte z=22;,double pi=3.14159;,char x=x;,2.,动态初始化,尽管前面的例子仅将字面量作为其初始值,,Java,语言中也允许在变量声明时使用任何有效的表达式来动态地初始化变量。,【,例,2.1】,下面的短程序在给定直角三角形两个直角边长的情况下,求其斜边长度。,class DynInit,public static void main(String args),double a=3.0,b=4.0;,double c=Math.sqrt(a*a+b*b);,System.out.println(Hypotenuse is +c);,这里,定义了,3,个局部变量,a,,,b,,,c,。前两个变量,a,和,b,初始化为常量。而直角三角形的斜边,c,被动态地初始化(使用勾股定理)。该程序用了,Java,语言中的另外一个方法,sqrt(),,它是,Math,类的一个成员,用来计算它的参数的平方根。这里关键的一点是初始化表达式可以使用任何有效的元素,包括方法调用、其他变量或字面量。,3.,变量的作用域和生存期,到目前为止,我们使用的所有变量都是在方法,main(),中被声明。然而,,Java,语言中允许变量在任何程序块内被声明。程序块被包括在一对大括号中。一个程序块定义了一个作用域。这样,每当开始一个新块,就创建了一个新的作用域。一个作用域决定了哪些对象对程序的其他部分是可见的,同时它也决定了这些对象的生存期。,在,Java,语言中,2,个主要的作用域是通过类和方法定义的。尽管类的作用域和方法的作用域的区别有点人为划定。因为类的作用域有若干独特的特点和属性,而且这些特点和属性不能应用到方法定义的作用域,但这些差别还是很有意义的。因为有差别,类(
展开阅读全文