版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java语言程序设计案例教程第1章 Java语言概论 1.1 Java语言的发展过程 Java语言最早诞生于1991年,刚开始它只是Sun公司为一些消费性电子产品所设计的通用环境。因为当时Java的应用对象只限于PDA、电子游戏机、电视机顶盒之类的消费性电子产品,所以并未被众多的编程技术人员所接受。 在Java出现以前,Internet上的信息内容都是一些静态的HTML文档。正是因为在Web中看不到交互式的内容,所以人们很不满意当时的Web浏览器,他们迫切希望能够在Web上创建一类无须考虑软、硬件平台就可以执行的应用程序,并且这些程序还要有极大的安全保障。正是由于这种需求给Java带来了前所未
2、有的施展舞台。 Sun的工程师从1994年起把Java技术应用于Web上,并且开发出了HotJava的第一个版本。于是,Java的名字逐渐变得广为人知。 Java在Sun World95中被正式发布。Java的“Write Once,Run Anywhere(一次编写,处处运行)”口号使得Java一出现就引起了广泛的注意,用Java技术开发的软件可以不用修改或重新编译就可直接应用于任何计算机上。 从此以后,Java随着网络的快速发展,而成为一个应用最广泛的程序语言。“网络即是计算机”是Sun公司的格言。一时间,使用Java技术进行软件开发成为广大技术人员的一种时尚。 到2010年4月为止,Ja
3、va已经发布了一系列的版本,目前最新版本为JDK7.0(1.7.0)预览版。1.2 Java语言的工作原理及特点 Java是一种高级的、通用的、面向对象的、适用于网络环境的程序设计语言,同时它又是一种操作平台,为程序的运行提供一个统一通用的环境,屏蔽底层的操作系统及硬件环境的差异性。1.2.1 Java程序的处理过程 一个Java程序的执行必须经过编辑、编译、运行三个步骤。编辑是指在某个Java语言开发环境中进行程序代码的输入与编写,最终形成后缀名为.java的Java源文件。编译是指使用Java编译器(javac命令)把源文件翻译成二进制代码的过程,这期间也进行语法级别错误和引用错误的排查,
4、编译后将生成后缀名为.class的字节码文件。该字节码文件并不是一个可以直接运行的文件。运行是指使用Java解释器将字节码文件翻译成机器代码,执行并得到运行结果。这一过程如图1.1所示。1.2.2 Java字节码 字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码,它是一种二进制文件,是Java源文件由Java编译器编译后生成的目标代码文件。编程人员和计算机都无法直接读懂字节码文件,它必须由专用的Java解释器来解释执行,因此Java是一种在编译基础上进行解释运行的语言。1.2.3 Java虚拟机(JVM) Java解释器负责将字节码文件翻译成具体硬件环境和操作系统平台下的机器代码
5、,以便执行。因此Java程序不能直接运行在现有的操作系统平台上,它必须运行在被称为Java虚拟机的软件平台之上。 Java虚拟机(JVM)是驻留于计算机内存的虚拟计算机或逻辑计算机,实际上是一段负责解释并执行Java字节码的程序。Java解释器只是Java虚拟机的一部分。 在运行Java程序时,首先会启动JVM,然后由它来负责解释执行Java的字节码,并且Java字节码只能运行于JVM之上。这样利用JVM就可以把Java字节码程序和具体的硬件平台以及操作系统环境分隔开来,只要在不同的计算机上安装了针对于特定具体平台的JVM,Java程序就可以运行,而不用考虑当前具体的硬件平台及操作系统环境,也
6、不用考虑字节码文件是在何种平台上生成的。JVM把这种不同软硬件平台的具体差别隐藏起来,从而实现了真正的二进制代码级的跨平台移植。JVM是Java平台无关的基础,Java的跨平台特性正是通过在JVM中运行Java程序实现的。Java的这种运行机制可以通过图1.2说明。 Java语言这种“Write Once,Run Anywhere”的方式,有效地解决了目前大多数高级程序设计语言需要针对不同系统来编译产生不同机器代码的问题,即硬件环境和操作平台的异构问题,大大降低了程序开发、维护和管理的开销。 需要注意的是,Java程序通过JVM可以达到跨平台特性,但JVM是不跨平台的。也就是说,不同操作系统之
7、上的JVM是不同的,Windows平台之上的JVM不能用在Linux上面,反之亦然。1.2.4 垃圾回收 Java虚拟机使用两个独立的堆内存,分别用于静态内存分配和动态内存分配。其中一个是非垃圾回收堆内存,用于存储所有类的定义、常量池和方法表。另一个堆内存再分为两个可以根据要求往不同方向扩展的小块。用于垃圾回收的算法适用于存放在动态堆内存中的对象。垃圾回收器将在回收对象实例之前调用finalize( )方法。即使显示调用垃圾回收方法(System.gc( )),也不能保证立即运行,这是因为垃圾回收线程的运行优先级很低可能经常会被中断。1.3 Java SDK的安装与配置 若要编写Java程序,
8、就需要开发工具。现在可用于开发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 Platfo
9、rm,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语言和一般的应用开发,使用
10、Java SE版本足够了,本书采用的是Java SDK1.6版本。可以从Sun公司网站上下载,下载网站是:/javase/downloads/index.jsp 进入下载页面后,按网页提示进行操作,下载后的文件名称类似于jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe,不同更新版本的文件名可能有点差别。具体安装步骤如下:1)双击运行下载后的安装文件。在弹出的关于许可证协议的对话框中,单击“接受”按钮,接受许可证协议,否则不能安装。2)在弹出的“自定义安装”对话框中,选择JDK的安装路径。单击“更改”按钮可更改安装路径。为加快安装速度,Jav
11、a 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的安装。 在默认情
12、况下,安装后会在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系统
13、桌面上右键单击“我的电脑”图标,选择“属性”菜单项。在弹出的“系统属性”对话框中选择“高级”选项卡,然后单击“环境变量”按钮,将弹出“环境变量”对话框。2)在“环境变量”对话框中,单击“系统变量”区域中的“新建”按钮,将弹出“新建系统变量”对话框。3)在“新建系统变量”对话框中,在“变量名”文本框中输入“JAVA_HOME”,在“变量值”文本框中输入JDK的安装路径“C:Program FilesJavajdk1.6.0_10”,如图1.6所示。最后单击“确定”按钮,完成变量JAVA_HOME的创建。4)查看是否存在Path变量,若存在,则编辑该变量,在变量值后追加“;%JAVA_HOME%b
14、in”,如图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命令的使用帮助信息,如
15、图1.8所示。这说明JDK安装配置成功,否则需要检查上面各步骤的操作是否正确。 图1.8 显示javac命令的使用帮助1.4 Eclipse的安装与使用 Eclipse是一个基于Java的、开放源码的、可扩展的应用开发平台,它为编程人员提供了一流的Java集成开发环境(Integrated Development Environment,IDE)。它是一个可以用于构建集成Web和应用程序开发工具的平台。1.4.1 Eclipse的安装与启动 在Eclipse的官方网站可下载Eclipse的最新版本,下载后的文件一般为一个zip格式的压缩文件。1)将下载后的压缩文件解压后,双击eclipse.e
16、xe文件就可启动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)步骤中选择
17、的工作空间,则出现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 将光标停留在变量上, 按该快捷键可查找下一个同样的变量
18、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应
19、用程序,开发步骤如下:(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”。其他保
20、留默认配置,如图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”。由于本例只包含一个主类,因
21、此在下面勾选“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程序的例子,来了解这两类程序的构成和特
22、点。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行后面以“/”引导的内容称之为注释。注释是对程序进行解释说明的文字信息。
23、在程序中恰当地使用注释,可增加程序的可读性,但不会对程序的编译和运行产生任何影响。第2行开始是类的定义,保留字class用来定义一个类,本例中定义的类名为HelloApplication,保留字public用来声明该类是一个公共类。一个Java程序文件中可以定义多个类,但最多只允许有一个公共类。程序文件名必须与这个公共类的类名保持一致。 整个类定义由“”和“”包括起来,其内部称之为类体。 本例中在类体中定义了一个main( )方法,该方法必须用public static void进行限定。public指明所有类都可以访问这个方法;static指明该方法是一个类方法,可以直接通过类名进行调用;v
24、oid指明该方法不返回任何值。 对于一个Java Application来说,main( )方法是必须的,而且必须按照本例中的格式进行定义。Java解释器在没有生成任何对象的情况下,以main( )作为入口来执行程序。因此一个可运行的Java Application中只能有一个按照本例格式定义的main( )方法。main( )方法定义中,小括号内的String args是传递给main( )方法的参数,args是一个数组变量,它的元素是String类的实例。在main( )方法的方法体中(由紧跟在main( )后的“”和“”包括),只有一条语句:System.out.println( Hel
25、lo 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.appl
26、et.Applet类。这是本Applet程序需要的两个类:小程序需要继承Applet类实现;图形界面的Applet程序输出常用具有绘图功能的paint( )方法,该方法需要Graphics类的参数。与Java Application一样,所有的Java Applet也都是类,且必须是Applet类的子类。保留字extends指明HelloApplet是Applet类的子类。在类体中,重写了父类Applet的paint( )方法,其中参数g为Graphics类的对象,可以认为是用于绘图的画板。在paint( )方法中,调用对象g的方法drawString( ),在坐标(10,10)处显示字符串“
27、Hello World!”,坐标是用像素点表示的。 此程序中没有main( )方法,这是Applet与Application的主要区别之一。Applet程序是不能独立运行的,必须编写HTML文件,将Applet嵌入其中,然后用appletviewer来运行,或在支持Java的浏览器上运行。编写的HTML文件内容如下: 1.5.3 Java程序结构 过以上两个举例可看出,Java程序都是由类构成的。对于一个Java Application程序来说,必须在一个类中定义一个main( )方法。对于Java Applet程序来说,必须有一个类作为Applet类或JApplet类的子类,继承Applet
28、类或JApplet类的类是小程序的主类。1类的个数 一个Java程序源文件中最多只能有一个public类,其他类的个数没有限制。2命名 如果Java程序源文件中包含了一个public类,则该源文件的文件名必须以该类的名称来命名,注意字符的大小写也要一致。如,在例1.1和1.2中,分别包含的public类的类名为HelloApplication和HelloApplet,所以这两个源文件的文件名只能是HelloApplication.java和HelloApplet.java。如果Java程序中没有public类,则源文件的命名没有特殊要求。3程序结构package/0个或1个,包定义,必须放在文
29、件开始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的安装与配置:
30、从官方网站下载JDK安装程序包;运行JDK安装文件;配置系统环境变量path和classpath。(4)使用Eclipse编写运行Java程序:Eclipse是以Project的方式组织管理Java程序的;程序的输入与编辑方法;程序的运行和运行结果的查看等。第2章 Java语言基本语法2.1 Java语言的数据类型2.1.1 Java语言基本字汇 在第一章中,我们已经学习了第一个Java应用程序,本节将更正式的介绍Java的基本元素。Java程序由空白分隔符、标识符、注释、文字、运算符以及关键字组成。1. 空白分隔符 Java语言是一种形式自由的语言。这意味着你不需要遵循任何特殊的缩进书写规范
31、。例如,程序的所有代码可以写在一行上,也可以按自己喜欢的方式输入程序代码。前提是必须在已经被运算符或分隔符描述的标记之间至少留出一个空白分隔符。在Java中,空白分隔符可以是空格,Tab跳格键或是换行符。2. 标识符 标识符是代表类、方法或者变量等的名字。一个标识符可以是大写或小写字母、数字、下划线、美元符号的任意顺序组合,但不能以一个数字开头。否则容易与数字、常量相混淆。Java语言是区分大小写的,如VALUE和Value是两个不同的标识符。下面是一些有效的标识符:AvgTempcounta4$testthis_is_ok下面是一些无效的标识符名: 2counthigh-tempNot/ok
32、3. 常量 在Java语言中,常量也可以称为“字面值”,是表示在程序执行过程中值不发生变化的量。例如,下面是一些常量:10098.6XThis is a test表中从左到右,第一个数表示一个整数型常量,第二个数是一个浮点型常量,第三个数是一个字符型常数,最后一个数是字符串。常量能在任何地方被它所允许的类型使用,代表的是所属类型的一个值。4. 注释 Java语言中定义了3种注释类型。分别为:单行注释(/)、多行注释(/* */)和文档注释。第3种注释类型即文档注释以HTML文件的形式为你的程序作注释。文档注释以“/*”开始,以“*/”结束。5. Java关键字 目前Java语言中一共定义了48
33、个保留关键字(参见表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 i
34、f 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),长整型(lo
35、ng),字符型(char),浮点型(float),双精度型(double),布尔型(boolean),这些类型可分为4组:整数:该组包括字节型(byte),短整型(short),整型(int),长整型(long),它们有符号整数。浮点型数:该组包括浮点型(float),双精度型(double),它们代表有小数精度要求的数字。字符:该组包括字符型(char),它代表字符集的符号,例如字母和数字。布尔型:该组包括布尔型(boolean),它是一种特殊的类型,表示真/假值。 以下分别讨论各种数据类型。1. 整数类型Java语言中定义了4个整数类型:字节型(byte),短整型(short),整型(in
36、t),长整型(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 1281272. 浮点型 浮点数字,就是实数,当计算的表达式有精度要求时被使用。例如,计算平方根或超出人类经验的计算(如正弦和余弦),它们的计算结果的精度要求使用浮点型。Java语言中实现了标准(IEEE-754)的浮点型和运算符集。有2种浮点
37、型,单精度浮点型(float)及双精度(double)浮点型。它们的长度和变化范围如表2-3所示:表2-3 浮点型分类及其特性 名称 位数 数的范围double641.7e3081.7e+308float323.4E0383.4E+0383. 字符型 在Java语言中,存储字符的数据类型是char。但是,C/C+程序员要注意:Java的char与C或C+中的char不同。在C/C+中,char的宽度是8位整数。但Java语言中的情况不同。Java语言使用Unicode码代表字符。Unicode定义的国际化的字符集能表示迄今为止人类语言的所有字符集。它是几十个字符集的统一,例如拉丁文,希腊语,阿
38、拉伯语, 古代斯拉夫语,希伯来语,日文,匈牙利语等等,因此它要求16位。这样,Java中的char 类型是16位,其范围是065,536,没有负数的char。4. 布尔型 Java语言中,有一种表示逻辑值的简单类型,称为布尔型(boolean)。它的值只能是真(true)或假这(false)两个值中的一个。它是所有的诸如ab这样的关系运算的返回类型。布尔类型对管理像if、for这样的控制语句的条件表达式也是必需的。2.1.3 常量(字面量)1. 整数型常量 整数可能是在典型的程序中最常用的类型。任何一个数字的值就是一个整数字面量。例如1,2,3和42。这些都是十进制的值,这意味着对他们的描述基
39、于数字10。此外,在Java语言中还可以使用八进制(基数是8)和十六进制(基数是16)。对八进制的值通过在它的前面加一个前导0来表示。正常的十进制的数字不用前导零。这样,看起来有效的值09将在编译器编译时产生一个错误,因为9超出了八进制的范围07。程序员对数字更常用的是十六进制,通过前导的0 x或0X表示一个十六进制的字面量。十六进制数的范围是015,这样用A F(或af)来替代1015。Java语言中的整数字面量默认是int型。可以在字面量后面加上字母L表示是long型的整数常量,如1000L。2. 浮点型常量 浮点数代表带小数部分的十进制数。他们可通过标准记数法或科学记数法来表示。标准记数
40、法由整数部分加小数部分组成。例如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,假字面量的值也不等于
41、0,它们仅仅能被赋给已定义的布尔变量,或在布尔的运算符表达式中使用。3. 字符型常量 Java语言用Unicode字符集来表示字符(16位)。Java语言中的字符可以被转换为整数并可进行像加或减这样的整数运算。通过将字符包括在单引号之内来表示字符字面量。所有可见的ASCII字符都能直接被包括在单引号之内,例如a,z,and 。对于那些不能直接被包括的字符,可以采用转义序列方式,例如代表单个引号字符本身,n代表换行符字符。为直接得到八进制或十六进制字符的值也有一个机制。对八进制来说,使用反斜线加3个阿拉伯数字。例如,141是字母a。对十六进制来说,使用反斜线和u(u)加4个十六进制阿拉伯数字。例
42、如,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程序的一个基
43、本存储单元。变量由一个标识符,类型及一个可选初始值的组合定义。此外,所有的变量都有一个作用域用来定义变量的可见性和生存期。接下来讨论变量的这些元素。1. 声明一个变量 在Java语言中,所有的变量必须先声明再使用。基本的变量声明方法如下:type identifier = value,identifier = value . ;type是Java语言的基本类型之一,或类及接口类型的名字(类和接口类型在本书的后部分讨论)。标识符(identifier)是变量的名字,指定一个等号和一个值来初始化变量。初始化表达式必须产生与指定的变量类型一样(或兼容)的变量。声明指定类型的多个变量时,使用逗号将各变
44、量分开。以下是几个各种变量声明的例子。其中有一些进行了初始化。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 =
45、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语言中允许变量在任何程序块内被声明。程序块被包括在一对大括号
46、中。一个程序块定义了一个作用域。这样,每当开始一个新块,就创建了一个新的作用域。一个作用域决定了哪些对象对程序的其他部分是可见的,同时它也决定了这些对象的生存期。 在Java语言中2个主要的作用域是通过类和方法定义的。尽管类的作用域和方法的作用域的区别有点人为划定。因为类的作用域有若干独特的特点和属性,而且这些特点和属性不能应用到方法定义的作用域,但这些差别还是很有意义的。因为有差别,类(以及在其中定义的变量)的作用域将在下一章讨论。在这里仅考虑由方法或在一个方法内定义的作用域。 方法定义的作用域以它的左大括号开始。但是,如果该方法有参数,那么它们也被包括在该方法的作用域中且它们与方法中其他变
47、量的作用域一样。 作为一个通用规则,在一个作用域中定义的变量对于该作用域外的程序是不可见(即访问)的。因此,当在一个作用域中定义一个变量时,就将该变量局部化并且保护它不被非授权访问或修改。 作用域还可以进行嵌套。例如每当创建了一个程序块,也就创建了一个新的嵌套的作用域。这样,外面的作用域包含内部的作用域。这意味着外部作用域定义的对象对于内部作用域中的程序是可见的。但是,反过来就是错误的。内部作用域定义的对象对于外部是不可见的。 变量可以在程序块内的任何地方被声明,但是只有在他们被声明以后才是合法有效的。因此,如果在一个方法的开始定义了一个变量,那么它对于在该方法以内的所有程序都是可用的。 另一
48、个需要记住的重要之处是:变量在其作用域内被创建,离开其作用域时被撤消。这意味着一个变量一旦离开它的作用域,将不再保存它的值了。因此,在一个方法内定义的变量在几次调用该方法之间将不再保存它们的值。同样,在块内定义的变量在离开该块时也将丢弃它的值。因此,一个变量的生存期就被限定在它的作用域中。 如果一个声明定义包括一个初始化,那么每次进入声明它的程序块时,该变量都要被重新初始化。【例2.2】变量的作用域和生存周期应用举例。class LifeTime public static void main(String args) int x; for(x = 0; x 右移右移,左边空出的位以0填充=右
49、移赋值=右移赋值,左边空出的位以0填充=左移赋值1. 位逻辑运算符 位逻辑运算符有“与”(&)、“或”(|)、“异或()”、“非()”, 2-7表显示了每个位逻辑运算的结果。位运算符应用于每个运算数内的每个单独的位。 表2-7 位逻辑运算符的结果 A BA | BA & BA BA 0 00001 1 01010 0 11011 1 11100(1)按位非() 按位非也叫做补,“”是对其运算数的每一位取反。例如,数字42,它的二进制代码为:00101010 经过按位非运算成为11010101(2)按位与(&) 如果两个运算数都是1,则按位与运算结果为1。其他情况下,结果均为零。看下面的例子:0
50、0101010 42&000011111500001010 10(3)按位或(|) 两运算数中任何一个运算数为1,则按位或运算后结果为1。如下面的例子所示:00101010 42|00001111 1500101111 47(4)按位异或() 两运算数中,只有在两个比较的位不同时按位异或后运算结果是 1。否则,结果是零。下面的例子显示了“”运算符的效果。 0010101042 0000111115 00100101372. 左移运算符 左移运算符使指定值的所有位都左移规定的次数。它的通用格式如下所示: value num 这里,num指定要移位值value移动的位数。也就是,左移运算符使指定值
51、的所有位都右移规定的次数。它的通用格式如下所示: value num这里,num指定要移位值value移动的位数。也就是,右移运算符使指定值的所有位都右移num位。下面的程序片段将值32右移2次,将结果8赋给变量a:int a = 32;a = a 2; 当值中的某些位被“移出”时,这些位的值将丢弃。例如,下面的程序片段将35右移2次,它的2个低位被移出丢弃,也将结果8赋给变量a:int a = 35;a = a 2; 8 用二进制表示该过程可以更清楚地看到程序的运行过程:00100011 35 200001000 8 将值每右移一次,就相当于将该值除以2并且舍弃了余数。右移时,被移走的最高位
52、(最左边的位)由原来最高位的数字补充。例如,如果要移走的值为负数,每一次右移都在左边补1,如果要移走的值为正数,每一次右移都在左边补0,这叫做符号位扩展(保留符号位),在进行右移操作时用来保持负数的符号。例如,8 1是4,用二进制表示如下:11111000811111110044. 无符号右移 若希望移位后总是在高位(最左边)补0,即无符号移动。这时可以使用Java的无符号右移运算符,它总是在左边补0。 下面的程序段说明了无符号右移运算符。在本例中,变量a被赋值为-1,用二进制表示就是32位全是1。这个值然后被无符号右移24位,当然它忽略了符号位扩展,在它的左边总是补0。这样得到的值255被赋
53、给变量a。int a = -1;a = a 24;下面用二进制形式进一步说明该操作:11111111 11111111 11111111 11111111int型- 1的二进制代码 24 无符号右移24位00000000 00000000 00000000 11111111 int型255的二进制代码5. 位运算符赋值 所有的二进制位运算符都有一种将赋值与位运算组合在一起的简写形式。例如,下面两个语句都是将变量a右移4位后赋给a:a = a 4;a = 4; 下面的程序定义了几个int型变量,然后运用位赋值简写的形式将运算后的值赋给相应的变量:【例2.8】按位复合赋值运算示例。class Op
54、BitEquals public static void main(String args) int a = 1; int b = 2; int c = 3; a |= 4; b = 1; c 大于=大于等于=小于等于 这些关系运算符产生的结果是布尔值。关系运算符常常用在if控制语句和各种循环语句的表达式中。 Java语言中的任何类型,包括整数,浮点数,字符,以及布尔型都可用“=”来比较是否相等,用“!=”来测试是否不等。注意Java语言中(就像C或C+一样)比较是否相等的运算符是2个等号,而不是一个(注意:单等号是赋值运算符)。只有数字类型可以使用排序运算符进行比较。也就是,只有整数、浮点数
55、和字符运算数可以用来比较哪个大哪个小。 关系运算的结果是布尔(boolean)类型。例如,下面的程序段对变量c的赋值是有效的:int a = 4;int b = 1;boolean c = a b;在本例中,ab(其结果是false)的结果存储在变量c中。2.2.4 逻辑运算符 逻辑运算符的运算数只能是布尔型的数据。而且逻辑运算的结果也是布尔类型(见表2-9)。表2-9 布尔逻辑运算符及其意义运算符 含义&逻辑与|逻辑或异或|短路或&短路与!逻辑反&=逻辑与赋值(赋值的简写形式)|=逻辑或赋值(赋值的简写形式)=异或赋值(赋值的简写形式)=相等!=不相等?:三元运算符(if-else) 布尔逻
56、辑运算符“&”、“ |”、“ ”,对布尔值的运算和它们对整数位的运算一样。逻辑运算符“!”的结果表示布尔值的相反状态:!true = false 和 !false = true。各个逻辑运算符的运算结果如表2-10所示: 表2-10 逻辑运算符的运算A B A|BA&BAB !Afalse false false falsefalse truetrue false true falsetrue falsefalse true truefalsetrue truetrue true truetruefalse false下面的例子和前面讲的位逻辑运算的几乎一样,只不过本例中的运算数是布尔逻辑值而
57、不是二进制的位值:【例2.9】布尔逻辑运算符“&”、“ |”、“ ”的运算示例。class BoolLogic public static void main(String args) boolean a = true; boolean b = false; boolean c = a | b; boolean d = a & b; boolean e = a b; boolean f = (!a & b) | (a & !b); boolean g = !a; System.out.println( a = + a); System.out.println( b = + b); System
58、.out.println( a|b = + c); System.out.println( a&b = + d); System.out.println( ab = + e); System.out.println(!a&b|a&!b = + f); System.out.println(!a = + g); 程序运行结果为:a = trueb = falsea|b = truea&b = falseab = truea&b|a&!b = true!a = false2.2.5 赋值运算符 赋值运算符是一个等号“=”。它在Java语言中的运算与在其他计算机语言中的运算一样,其通用格式为:var
59、 = expression;这里,变量var的类型必须与表达式expression的类型一致。赋值运算符允许对一连串变量赋值。例如:int x,y,z;x = y = z = 100; 该例子使用一个赋值语句对变量 x、y、z 都赋值为100。这是因为“=”运算符产生右边表达式的值,因此 z = 100 的值是 100,然后该值被赋给 y ,并依次被赋给 x 。使用“串赋值”是给一组变量赋同一个值的简单办法。2.2.6 条件运算符(? :) Java语言中使用三元运算符(? : )可代替某个类型的if-else 语句。条件运算符的通用格式如下: expression1 ? expression
60、2 : expression3 其中,expression1是一个布尔表达式。如果expression1为真,那么expression2被求值;否则,expression3被求值。整个条件表达式的值就是被求值表达式(expression2或expression3)的值。expression2和expression3是除了void以外的任何类型的表达式,且它们的类型必须相同。下面是一个利用条件运算符的例子:ratio = denom = 0 ? 0 : num / denom; 当Java计算这个表达式时,它首先计算问号左边的表达式。如果 denom 等于0,那么在问号和冒号之间的表达式被求值,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省2026年春考《自动控制类》专业知识模拟试题(含答案解析)
- 2023-2024学年河北沧州献县一中高一下学期6月月考英语试题及答案
- 单招护理专业职业规划书
- 装配式建筑构件生产质量计划
- 消防安全隐患排查与整改指南课件
- 防坠床护理措施
- 2026年淮南市第二人民医院公开招聘22名工作人员笔试备考题库及答案解析
- 针灸推拿制度
- 2026内蒙古呼伦贝尔市林草执法人员招聘35人考试参考题库及答案解析
- 2026中国水利水电出版社有限公司招聘1人笔试参考题库及答案解析
- GB/T 24525-2009炭素材料电阻率测定方法
- GB/T 18092-2000免水冲卫生厕所
- 组织行为学-第六讲个人决策
- 羽衣甘蓝栽培技术课件
- (完整版)黄帝内经繁体版
- 呕吐中医护理的方案课件
- 外贸报价单中英文模板
- 板喂机-精选课件
- 《认识图形》(幼儿园课件)
- 幼儿园教学课件《 巴巴爸爸回到地球》课件
- 大学《中国文化概论》期末考试考点、重点总结
评论
0/150
提交评论