闫炜面向对象程序设计稿.doc_第1页
闫炜面向对象程序设计稿.doc_第2页
闫炜面向对象程序设计稿.doc_第3页
闫炜面向对象程序设计稿.doc_第4页
闫炜面向对象程序设计稿.doc_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

第一章 Java简介11.1 Java语言的发展历程11.2 Java语言的特点11.3 J2EE的基本概念21.4 Java开发工具(JDK)简介21.5 Java应用程序41.6 Java虚拟机原理7第二章 Java语言基础82.1 Java程序的基本结构82.2 Java符号集82.3 数据的简单类型92.4 常量102.5变量102.6运算符与表达式112.7流程控制语句14第三章 Java面向对象程序设计163.1 Java的类和对象163.2 域和方法173.3 访问控制符183.4继承203.5 多态性(polymorphism)213.6 上转型对象213.7 接口(interface)213.8 包(package)22第四章 Java数组和工具类244.1 数组244.2 字符串264.3 语言基础类库304.5 异常处理32第五章 Java高级编程365.1 Java多线程机制365.2 输入输出流类385.3 网络编程396.1 图形用户界面的构成406.2 布局管理41教师:闫炜第 47 页第一章 Java简介1.1 Java语言的发展历程1. 发展初期1991年,SUN公司的程序员James Gosling,以C+语言为基础,写了一种可在不同平台上工作、可令不同设备互相联系的程序语言oak(Java)。2. 发展中期1994年Web大发展,SUN的共同创始人Bill Joy坚信Oak是唯一可以令Web真正实现交互的途径。在他的推动下,Oak变成了一种用来创建一种叫Applet小程序的语言,这些Applet可在任何操作系统中运行。由于Oak(橡树)是Sun公司以前的一种编程语言的名字,所以改名为JAVA。3. 迅速推广1997年2月18日,JDK1.1发布。1999年6月,SUN公司发布Java的三个版本:1) J2SE(Java 2 Standard Edition)标准版:它是一组针对传统桌面应用的API和运行环境;2) J2EE(Java 2 Enterprise Edition)企业版:它是J2SE的扩展集,主要用于在服务器端开发可伸缩、可迁移、以数据库为核心的企业级应用;3) J2ME(Java 2 Micro Edition)微型版:它定义了一组针对嵌入式设备和消费电子设备的API和运行环境,这些设备包括无线手持设备、PDA、电视机顶盒以及其他缺乏足够的资源去支持J2SE的设备。把Java 2平台分成三种版本使得它能够更好地满足不同目标领域中开发者的需求,同时也使Java技术在保持其“编写一次,到处运行”精神的同时,在不同领域得到继续发展。4. 现状2005年6月,JavaOne大会召开,SUN公司公开Java SE 6(2007可以开始下载)。此时,Java的各种版本已经更名以取消其中的数字“2”: J2EE更名为Java EE; J2SE更名为Java SE, J2ME更名为Java ME。1.2 Java语言的特点1.2.1 简洁性1.2.2 安全性1 Java语言提供了内存管理机制,有一个自动搜集“内存垃圾”程序。2 Java在字节码的传输过程中使用了公开密钥加密机制(PKC)。3 而在运行环境提供了四级安全性保障机制: 字节码校验器(ByteCode Verifier) 类装载器(Class Loader) 运行时内存布局文件访问限制1.2.3 面向对象1 Java语言具有真正的面向对象语言的特点,除了数值、布尔和字符三种基本的数据类型外,其它类型都是对象。2 它支持封装、多态性和继承。1) 封装就是将对象内的数据和操作联编起来,形成一个对象;2) 多态性是指一个接口,有多个内在实现形式表示;3) 继承是指某一对象直接使用另一对象的所有属性和方法的过程。3 Java只支持单重继承,但支持接口,一个类可以实现多个接口。利用接口可以得到多继承的优点,又没有多继承混乱、复杂的问题。1.2.4 动态性1.2.5 体系结构中立和可移植性1.2.6 高性能性1.2.7 多线程1.2.8 分布式 1.3 J2EE的基本概念1.4 Java开发工具(JDK)简介Java开发工具JDK(Java Developers Kit),有SPARC/Solaris,X86/Solaris版本和Microsoft Windows 95,Windows NT版本。它们可以从站点处免费下载,也可以从其它一些镜象站点下载,但是从Sun公司站点能够得到JDK的最新的版本。JDK的安装及参数设置1. 从Sun的官方网站上下载,网址:/javase/download.jsp2. 下载SDK(JDK中包含了Java运行环境(JRE),而JRE是针对特定平台的,如Windows、Linux或Solaris等)3. 安装。4. JDK的PATH参数设置1) 对于Windows 2000或XP,用鼠标右键单击“我的电脑”,弹出快捷菜单,然后选择“属性”命令(或打开控制面板,双击“系统” ),弹出“系统属性”对话框,再单击该对话框的“高级”选项,然后单击“环境变量”按钮,就会弹出“环境变量”对话框。2) 找到“用户变量”中“Path”,加入“C:Program FilesJava”3) 如果环境变量中没有包含Path参数,单击“新建”按钮,就会弹出“新建用户变量”对话框,然后按照上一步进行设置。下面介绍JDK环境工具,包括有Java编译器javac,Java解释器java,Java类分解器javap,Java小应用程序观察器AppletViewer。1.4.1 Java编译器javacJava编译器本身就是一个Java语言编写的应用程序,它与其它的编译语言不同,它的作用是把Java源程序(.java文件)编译生成Java字节码(.class文件)。这种字节代码与机器代码类似,却不针对具体的机器。 Java语言编译器的编译格式为: javac options source_file其中,options为选项,source_file是扩展名为.java的源程序。 options有如下选项: -classpath :指定javac在编译过程中,查找出现的某个类定义搜索路径表,路径间以“;”分隔; -d :指定类文件存放的路径,目录间由“;”分隔;-g :为调试器生成附加信息,这是缺省方式; -ng :不生成附加信息; -nowarn :不显示警告错误信息; -o :代码优化;-verbase :编译器和链接程序显示编译和链接过程中的全部信息;-debug :设置容许调用Java调试器jdb。1.4.2 Java解释器java 编译后的字节代码是不能直接在机器上运行的,是通过Java解释器java解释执行。其调用格式为: java interpreter options classname program arguments其中,classname是扩展名为.calss的类名,即要执行的程序,在类名.class中必须包含一个main()方法,程序的执行是从main()开始的。program arguments部分,是输入保存在main()方法中的args数组中的参数,类要有一个如下格式声明main()方法: public static void main(String args) interpreter options有如下选项: -classpath :设置定义类搜索路径; -cs, -checksource :检查类加载后,类文件和源程序间的一致性; -debug :设置允许调用Java调试器jdb; -ms initmemk|m :设置初始内存池的大小,单位为kbyte或mbyte; -mx maxmemk|m :设置最大内存池的大小,单位为kbyte或mbyte; -noasyncgc :设置自动搜集无用空间动作; -noverify :关闭类文件检查; -verify :检查类文件所有代码; -verifyremote :对类加载器加载的类代码检查,为缺省方式; -oss stacksizek|m :设置每个线程代码大小,单位为kbyte或mbyte;-prof: :使解释器生成一个分析数据文件f或指定的file文件;-help :使用帮助信息; -ss stacksizek|m :设置初始内存池的大小,单位为kbyte或mbyte; -v,-verbose :显示类文件装载信息;-verbosegc :示自动搜集无用空间动作信息。-version :版本信息。Java解释器实质上是字节码解释器,指定一个类文件名,它会自动装载程序中需要的类文件,通过检查机制确定一个类是否合法,确保解释执行的字节码不会破坏Java语言的约定。Java解释器能够自动在.zip文件中查找到所需要的类,不过在这里zip文件是未压缩的。如果把长文件名的类打包在zip文件中,可以满足不支持长文件名系统的需要。1.4.3 Java类分解器javap Java类分解器javap是用于对类文件进行反汇编,分解类的组成单元,调用格式如下: javap options classname classname .其中,classname为类名,可以有多个类名,由空格间隔。options为选项表,其参数有: -p :显示类的全部方法和变量,包括私有及受保护类型的方法和变量; -c :显示出分解类的反汇编码; -classpath :指定javap查找类文件的搜索路径表,包括在zip文件中查找;-l :显示行号(带-o选项编译的类)或局部变量表(带-g选项编译的类)。-public :显示public属性的方法和变量;-protected :显示protected属性的方法和变量;-package :显示包信息;-private :显示private属性的方法和变量;-version :显示版本信息;-verigy :显示验证信息。 javap的输出依赖使用的选项,在缺省方式下,只显示公共,不受保护类型的变量和方法。1.4.4 小应用程序观察器AppletViewer applet是用Java编写的一类小程序,它能在小应用程序观察器AppletViewer或在支持Java的浏览器上执行。小应用程序观察器的作用是下载HTML文档中的applet,其调用格式为: appletviewer -debug urls 其中,-debug为可选项,它的作用是小应用程序观察器将由JDb内部启动,以便可以调试被HTML文档中所引用的applet。urls为Internet网上资源的名称和地址标识表。1.5 Java应用程序 Java有两类应用程序:一类是由Java解释器控制执行的Java application;另一类是嵌入到eb页面中,由Java兼容浏览器控制执行的Java applet。1.5.1 application程序编写与运行步骤Java application是可独立运行的Java程序,它由一个或多个类组成,其中必须有一个类中定义了main()方法,main()方法就像C语言的main函数一样是Java application运行的起始点。要实现application程序从编写到运行目的,则需要按下列步骤进行:1首先创建一个Java的application源程序(.java文件)为创建一个名为HelloWorldApp.java的文件,则可在任何字符编辑器上输入并保存下列Java源程序代码:import java.io.*;class HelloWorldApp public static void main(String args)System.out.println(Hello, World !);/end of main method/edn of class其实质是创建一个名为HelloWorldApp类,并把它保存在与它相同名字的文件中(即HelloWorldApp.java文件)。2第二步是对已创建好的Java源程序(.java)进行编译。该步骤是用Java编译器对Java源程序(.java)进行编译生成对应的字节代码程序(.class)。如果编译成功,会得到一个有相同文件名的带.class扩展名的字节码文件。其命令格式如下:javac HelloWorldApp.java如果编译中不出现错误,将会得到一个名为HelloWorldApp.class文件。编译选项使用的是缺省方式。3最后就可以解释执行已编译成功的字节码程序(.class) 用Java解释器java对Java字节码程序(.class)解释执行。 在上例得到的HelloWorldApp.class文件,现在可以用java解释执行了,其命令格式如下: java HelloWorldApp 运行的结果,将会在标准输出设备上输出: Hello, World ! Java解释器在解释执行时,解释处理的是类名,而不是文件名,所以在解释器java后面跟随的是类名,而不能写成文件名的形式(HelloWorldApp.class)。其选项也使用的缺省方式。这就是不依赖浏览器而独立运行的Java application应用程序,从编写到运行的基本步骤。这里只作了个简单介绍,如果想了解更详细的内容,请参阅后面的相关章节的内容。1.5.2 applet程序编写与运行步骤 Java applet程序是在Java兼容浏览器上执行的,它的创建和使用操作步骤,有别于application的操作步骤。1创建Java的applet源程序(.java文件) 用字符编辑器输入相应的applet的源程序,它的程序中并不需要一个main()方法,但必须有一个类是系统类Applet的子类,就是必须有一个类的类头部分以extends Applet结尾,其中,Applet是父类名,它可以是系统类,或者是其它已存在的用户自定义类;extends是关键字,代表新定义的类是父类的子类。 下面的例子是创建并保存在HTML目录中的一个文件名为HelloJavaApp.java的applet小应用程序。import java.awt.Graphics;import java.applet.Applet;public class HelloJavaApp extends Applet public void paint(Graphics g) g.drawString(Hello, Java Applet World !,50,25); 2第三步是对已创建好的applet源程序(.java)进行编译。 用Java编译器对Java的applet源程序(.java)进行编译生成对应的字节代码程序(.class)。 如果编译成功,会得到一个有相同文件名的带.class扩展名的字节码文件。这与application文件的编译是一样的。 其命令格式如下: javac HelloJavaApp.java 得到一个名为HelloJavaApp.class文件。编译选项使用的是缺省方式。3第四步创建applet嵌入到HTML文档中把编好的applet小应用程序,嵌入到HTML文档中,并保存在一个文件中。 下例是创建一个名为HelloWorld.HTML文件,并且将HelloJavaApp.class嵌入进去。 A Simple Program 4最后加载HTML文件 在Java兼容浏览器上的URL处,按下例格式输入新建的HTML文件:c:HTMLHelloJava.html在标准输出设备上显示出:Hello, Java Applet World !另外,JDK软件包中提供了一个模拟Web浏览器运行Applet的应用程序AppletViewer,使用它调式程序就不必反复调用庞大的浏览器了,其运行方式如下:AppletViewer HelloJava.html从上面的简单的介绍,可以建立对Java的application和applet操作概念。为后面章节的学习打下了基础。1.6 Java虚拟机原理 Java虚拟机(JVM:Java Virtual Machine)是虚拟运行Java代码的假想计算机。Java编译程序是将Java的源程序编译成JVM可执行代码,即字节码(byte-code),而不是象和+编译器,生成直接能运行于某种特定硬件平台的可执行代码。后者,在编译过程中就确定了内存分配情况;而前者,是由解释器在运行过程中创立内存布局的,这样,更加有效地保证了Java的可移植性和安全性。 Java虚拟机可定义为:运行经过编译的Java目标代码的计算机的实现。1.6.1 Java运行系统Java运行系统的组成情况如下图所示:类装配器字节码验证器代码生成器解释器运行支持库本地系统图1.3 Java运行系统解释器在JVM字节码运行中,分三个阶段: 代码的装入,是由类装载器(class loader)完成; 代码的校验,用于发现各种可能出现的错误; 代码的运行,在代码校验后就可以执行了。 代码的运行有两种执行方式: 即时编译方式:由代码生成器先将字节码转换成机器码,再全速执行该机器码; 解释执行方式:由解释器通过每次翻译并执行一小段代码来完成字节码程序的所有操作。第二章 Java语言基础2.1 Java程序的基本结构 Java语言的源程序是一个或多个以.java为扩展名的文件,这些文件就是Java编译器javac的编译单元。而每个单元又由package语句、import语句、类声明或接口interface声明语句构成。 1. 包(package)是类和接口的集合,即为类库。Java语言用类库管理类,这样能够方便管理,减少类名间的竞争。Java的类都包含在类库中,package语句可用来指定类所属的类库。 2. import语句类似或+语言中的包含语句include语句,为程序装载类或包,使程序能够使用Java环境下的其它类。 3. 接口(interface)声明语句是用来声明接口的各种属性的。类(class)声明语句是用来声明类的名字及相关属性等内容。 public static void main(String args)是ClassName类的main()方法的标识,其中main()方法的方法标记有三个修饰符,其含义分别为:public:表示main()方法能被任何对象调用;static:表示main()方法是一个类方法;void: 表示main()方法不反回任何值。2.2 Java符号集符号是构成程序的基本单位,不同的语言所采用的符号标准有所不同,在和+等一些语言中,一般都采用ASCII码,而Java则采用的是Unicode字符集,又称统一码字符集,它可以支持多种语言。2.2.1 关键字关键字是构成编程语言本身的符号,是一种特殊的标识符,又称保留字。2.2.2 标识符标识符是变量、类、方法等在程序中的唯一名字。构造出一个标识符的名字,需要按照一定的规则取名。在Java语言中,标识符取名的规则是:1) 必须由字母、下划线或美元符开头的;2) 并由字母、09的数字、下划线或美元符组成的;3) 不能与关键字名或布尔值(true和false)同名。在Unicode字符集中,字母包括英文的26个字母,还包括所有十六进制值大于00C0的Unicode码的字符。允许标识符中使用来自不同字符集的字母。例如,希腊语、俄语、希伯来语等等。取名除了符合上述规则外,还要注意以下几个方面:1) 标识符名字是要具有一定的实际含义的一串字符,以便增强程序的可读性;2) 尽量少用除英文字母、下划线、美元符以外的字母,以减少录入难度;3) 少用美元符,以利于链接代码时的处理;4) 对标识符开头的字母以及标识符中间单词的第一个字母大写,而其余的字母都小写,最好不要用全部大写的标识符。例如:HelloWorldApp。2.2.3 程序中的注释程序中合理的注释大大增强了可读性,为程序的调试和修改提供有益的帮助。注释内容本身不对程序执行产生任何影响,只是文字注解。Java语言可以用三种形式在程序中注释。前两种与+形式相同,而第三种是Java新增加的形式,如表2.1所示。在程序中加入注释是一个好的编程习惯,它不仅对程序调试和维护有益,而且更有利于阅读程序。表2.1 Java的注释形式形式作用/注释内容由/开始到行末的内容均被系统忽略/*注释内容*/所有处在/*到*/之间的内容均被系统忽略/*注释内容*/在声明之前的所有处在/*到*/之间的内容均被系统忽略另外在Java语言中,有一个用于提取注释的工具:javadoc,对于/*注释内容*/形式的注释,可生成十分专业的程序文档。2.3 数据的简单类型在Java语言中数据类型分为两大类:简单类型和引用(reference)类型。1. 简单类型包括:整型、浮点型、字符型和布尔型等,具体如表2.2所示2. 引用类型包括数组、类和接口,它是建立在其它类型之上的数据类型,是指向变量所代表的实际值或值的集合的引用。表2.2 简单数据类型数据类型关键字大小(位)缺省值布尔型boolean8false字节型整数byte80字符型char16u0000空格短整型short160整型int320长整型long640浮点型float320.0F双精度型double640.0D2.4 常量常量是指直接用于程序中的固定不变的值。 1 布尔型常量 布尔型常量包括true和false,表示“真”和“假”两种状态。2 整型常量Java整数类型常量有三种形式:十进制、八进制、十六进制。1) 十进制整数是由非0开头的数值表示,如100,-50;2) 八进制整数是由以0开头的数值表示,如017表示十进制的15。3) 十六进制整数是由以0x或0X开头的数值表示,如0X2F表示十进制的47。4) 整形常量又可分为:一般整形常量(占32位)和长整形常量(占64位),长整形常量尾部有一个大写的L或小写的l,如-286L,03356l。3 浮点数Java浮点数是带有分数的十进制数,它又分为以32位形式存储的单精度数和以64位形式存储的双精度数两种,我们可以分别用f/F和d/D作后缀来表示它们的类型。浮点数可以用小数点和科学记数法两种形式表示。例如,3.14159265f,6.07e8F,9.08418e30d,9.7823e10D4 字符型常量字符型常量用一对单引号括起来的单个Unicode字符表示。可以用带“”的字符来表示其中的一些不可显示或有特殊意义的字符,这类字符称为转义符。下面列出的是Java语言中的转义符:引用方法对应Unicode码意义bu0008退格tu0009水平制表符tabnu000a换行fu000c表格符ru000d回车”u0022双引号u0027单引号u005c反斜线5 字符串常量字符串常量是用双引号括起来的一串字符,可以是0个,例如:“Hello”、“MynJava”。在Java中可使用连接操作符“+”把两个或多个字符串常量串接起来,例如:“How are you?”+“nI am fine.”2.5变量变量是程序运行中可变的数据,通常用来记录运算中间结果或保存数据。2.5.1变量的声明变量声明包括两个部分:变量的数据类型和变量的名称。声明语句如下所示:type identidier,identidier;其中,type表示数据类型的关键字。它决定了变量能存储值的类型,以及对变量能进行何种操作;identifier表示标识符,即变量名字。在变量声明语句中,可以同时对多个变量声明成相同的类型,它们之间用逗号分隔。下面给出几个变量声明类型的例子char mychar = W;long mylong = -39884;int count = 5643;double salary, tax2.5.2变量的作用域变量的作用域是指能够访问变量的代码块。变量一经被声明,它在被声明的程序块中有效,也就建立了变量的作用域。依照作用域,变量可分为四类:1) 成员变量 成员变量是一个类或对象的成员,它是在类中声明的,但不是在类的方法中声明的。2) 局部变量 局部变量是方法中或方法中的一个代码块中声明的。一般而言,局部变量自声明处开始,到本段代码块结束处均是有效的。3) 方法参数 方法参数以及构造方法参数,是用来为方法和构造方法传值的。4) 异常处理方法参数异常处理方法参数是用来为异常处理方法传递值的。2.6运算符与表达式表达式是由变量、常量、对象、运算符和方法调用按照一定的运算规则组成的序列.2.6.1 赋值运算与类型转换1赋值运算符赋值运算符就是把右操作数的值赋给左操作数。左操作数必须是一个变量,而右操作数是表达式。变量或对象 = 表达式1 数据类型转换在赋值运算符两侧的操作数类型一致时,就直接将右侧的数据赋给变量;如果不一致,就需要转换右侧的数据,然后再赋值给左侧的变量。类型转换可分为自动类型转换和强制类型转换两种方式:1) 自动转换是指将数据自动地转换成目标类型格式的数据(拓宽类型);2) 强制转换是指将数据显式地转换成目标类型格式的数据(缩窄类型)。Java的类型转换有严格的规定:凡是将变量从占内存较小的短数据类型转化成占内存较多的长数据类型时,可自动转换;反之,则必须强制转换,其格式如下:(数据类型) 变量名或表达式例子:byte MyByte = 10;int MyInteger = -1;MyInteger = MyByte /自动转化MyByte = (byte)MyInteger /强制类型转换/整型和浮点型可以相互转换int x = 7;float y;y = (float)x/2;2.6.2 算术运算符1双目运算符 2单目运算符运算符运算例子+加a+b-减a-b*乘a*b/除a/b%取余a%b运算符运算例子功能等价+自加a+或+aa = a+1-自减a-或-aa = a-1-求相反数-aa = -a2.6.3 关系与逻辑运算1关系运算符关系运算符是比较两个数据之间大小关系的运算,其结果是布尔值。=(等于)!=(不等于)(大于)(小于)=(大于等于)=(小于等于)例子:int x = 5, y = 7;boolean b = (x=y);2逻辑运算符针对布尔型数据进行的运算,其结果仍是布尔型。运算符运算例子&与x&y|或x|y!非!x异或xy&简洁与x&y|简洁或x&y“&”和“|”被称为简洁与和简洁非,是因为运算符右边的表达式可能被忽略不加以计算,而“&”和“|”两边的表达式都会被执行。2.6.4 位运算位运算符是对操作数以二进制比特位为单位进行操作和运算,操作数和结果都是整型数。运算符例子运算规则x将x按比特位取反xax各比特右移a位xxax各比特右移a位,左边空位一律填零例子:十进制30-17二进制0001111011101111X20000011111111011负数补码的表示:1 符号位不变,尾数各位先变反,然后末位加1。2 符号位不变,尾数自低位向高位,第一个1及其前各位0保持不便,以后各位按位变反。2.6.5 其它运算符1三目条件运算符?:它的一般形式为:ExpreBool ? Expression1 : Expression2其中,ExpreBool为布尔运算式,它的值为true时,则执行Expression1,否则执行Expression2。2扩展赋值运算符是在“”的前面加上其它的运算符而构成的,它有如下形式:var op= expression 等价于: var = var op expression其中,var表示变量,op为运算符,op=为扩展赋值运算符,expression为运算式。例子:int a = 3;int b = 6;a += b; /等价于:a = a + ba *= b; /等价于:a = a * b3对象运算符对象运算符instanceof,用来测定一个对象是否属于某个特定类或其子类的实例,是返回true,否返回false。例如:Boolean b = MyObject instanceof TextField2.6.6 优先级运算符的优先级决定了表达式中不同运算执行的先后顺序,下表从高到低描述了各种运算符的优先级。最高优先级. ()单目运算- ! + - 强制类型转换符乘除运算* / %加减运算+ -移位运算 大小关系 =相等关系= !=与&异或或|简洁与&简洁或|三目条件运算符?:赋值=2.7流程控制语句流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:顺序结构、分支结构和循环结构,如下图所示:顺序分支循环2.7.1 分支语句Java中的分支语句有两个:一个是负责实现双分支的if语句;另一个是负责实现多分支的开关语句swich。1if语句if语句的一般形式是:if(条件表达式)语句块; /if分支else语句块; /else分支2switch语句switch语句的一般格式如下:switch(表达式)case判断值1:语句块1 /分支1case判断值2:语句块2 /分支2 case判断值n:语句块n /分支ndefault: 语句块n+1 /分支n+1switch语句在执行时,首先计算表达式的值,这个值必须是整形或字符型,同时应与各个case分支的判断值的类型相一致。计算出表达式值后,依次与各case语句比较,相同则执行相应分支语句,若都不相同则执行default分支,若无default分支,则跳出整个switch语句。2.7.2 循环语句循环语句中由初始化、条件判断、循环体和迭代方式四个部分组成。Java的循环语句共有三种:while语句、do_while语句和for语句。它们的条件表达式的返回值都是布尔型,循环体可以是单个语句,也可以是复合语句。1while语句while语句的一般语法格式如下:while(条件表达式)循环体while语句先判断条件表达式的值,若为真,则执行循环体;若为假跳出循环,执行while语句后面的语句。2do-while语句do语句的一般语法格式如下:do循环体while(条件表达式);do-while语句先执行一次循环体后,再判断条件表达式的值,若为真,则执行循环体;若为假跳出循环,执行do-while语句后面的语句。3for语句for语句一般语法格式如下:for(表达式1;表达式2;表达式)循环体其中表达式1用来完成变量初始化工作;表达式2是返回布尔值的条件表达式,为真,则执行循环体;表达式3用来修改循环变量。例子(略)。2.7.3 跳转语句Java支持的跳转语句有三种:continue语句、break语句和return语句。1continue语句continue语句必须用于循环结构中,它有两种使用形式。一种是不带标号的continue语句,它的作用是终止当前这一轮的循环,跳过本轮剩余语句,直接进入当前循环的下一轮。另一种是带标号的continue语句,其格式是:continue 标号名这个标号名应该定义在程序中外层循环语句的前面,用来标志这个循环结构。2break语句break语句的作用是使程序的流程从一个语句块内部或循环体内部跳转出来。它也有两种使用形式:一种是不带标号的,用于switch语句;另一种是带标号的其格式是:break 标号名这个标号名应该用来标志某个语句块。执行break语句就从这个语句块中跳出来,流程进入其后面的语句。3return语句return语句的一般格式是:return 表达式return语句用来使程序流程从方法调用中返回,表达式的值就是调用方法的返回值。第三章 Java面向对象程序设计3.1 Java的类和对象类是Java语言的最基本概念,是组成Java程序的基本要素;类是Java的执行单位,Java运行的就是Java类本身;它封装了该类对象的变量和方法。 对象是类的实例化,对象的创建是通过对象构造方法来实现的;我们可以生成多个对象,通过消息传递来进行交互,最终完成复杂的任务;消息传递是指激活指定的某个对象的方法,以改变它的状态或使其产生一定的动作。3.1.1 系统定义的类Java程序设计就是定义类的过程,它分为两大类:系统定义的类,即Java类库中的类;用户程序自定义的类。要提高编程效率和质量,必须熟练掌握尽可能多的Java类库,根据功能的不同,Java类库被划分成若干不同的包,每个包中都有不少具有特定功能和关系的类和接口。3.1.2 用户程序自定义类类的一般格式是:classHead classBody一个类的定义包含有两个部分的内容:classHead类头的声明和classBody类体的定义。3.1.3 创建对象与定义构造函数1创建对象创建对象的一般格式为:类名 新建对象名 = new 构造函数()例如: PhoneCard mycard = new PhoneCard();创建对象与声明基本数据类型的变量类似,赋值号右边的new是为新建对象开辟内存空间的算符。与变量相比,对象占用的内存空间要大得多,对象是以类为模板创建的具体实例。2构造函数构造函数是与类同名的方法,创建对象的语句用new算符开辟了新建对象的内存空间后,将调用构造函数初始化这个新建对象。构造函数是类的一种特殊方法,其特殊性如下:1 构造函数的方法名与类名相同。2 构造函数没有返回值。3 构造函数的作用是对类的对象初始化。4 在创建一个类的新对象的同时,系统会自动调用该类的构造函数。3.1.4 类的修饰符Java程序定义类时,可在class之前增加若干类的修饰符来限定所定义类的特性,类的修饰符分为访问控制符和非访问控制符,有些修饰符可用来修饰类中的域或方法,本节讨论类的非访问控制符。1抽象类 凡是用abstract修饰符修饰的类被称为抽象类,抽象类就是没有具体对象的概念类。2最终类 如果一个类被final修饰,说明该类不可以有子类了。我们可以把有继承关系的类看成一棵倒长的树,所有类的父类是树根,每个子类是一个分支,声明为final的类的叶结点,且不能再有子类了。3.2 域和方法3.2.1域域是类和对象的静态属性,它可以是基本数据类型的变量,也可以是其它类(系统类或用户自定义类)的对象,因此,定义域的操作就是说明变量或创建对象的操作。与类相似,域的修饰符也包括访问控制符和非访问控制符,本节讨论域的非访问控制符1静态域用static修饰的域就是静态域。静态域最本质的特点是:它们是类的域,不属于任何一个类的具体对象,它不保存在某个对象的内存区域中,而是保存在类的内存区域的公共存储单元。换句话说,对该类的具体对象而言,静态域是一个公共的存储单元。任何一个类的对象访问它,得到的都是相同的值;任何一个类的对象修改它,都是对同一内存单元进行操作。2静态初始化器 静态初始化器是由static引导的一对大括号括起来的语句组。它的作用与类的构造函数相似,都是用来完成初始化的工作,但两者也有根本性的不同:1) 构造函数是对每个新创建的对象初始化,而静态初始化器是对类本身进行初始化。2) 构造函数是在用new运算符产生新对象时由系统自动执行的,而静态初始化器则是在它所属的类加载入内存时由系统调用执行的。3) 不同于构造函数,静态初始化器不是方法,没有方法名、参数列表。3最终域程序中经常需要定义各种类型的常量,并为它们取一个类似于变量的标识符名字,这样就可以在程序中用这个名字来引用常量。final就是用来修饰常量的修饰符,一个类的域如果被声明为final,则它的取值在程序的整个执行过程中都不会改变。3.2.2方法方法是类的动态属性,标志了类所具有的功能和操作,用来把类和对象的数据封装在一起。Java的方法与其它语言中的函数或过程类似,是一段完成某种功能的程序段。方法由方法头和方法体组成,器一般格式如下:修饰符1 修饰符2 返回值类型 方法名(形式参数列表)throw异常列表 方法体个语句;其中形式参数列表的格式为:形式参数类型1 形式参数名1,形式参数类型2 形式参数名2,1抽象方法修饰符abstract修饰的抽象方法是一种仅有方法头,而没有具体的方法体和操作实现的方法。例如:在抽象类PhoneCard中定义一个抽象方法performDial()。abstract void performDial();注意:所有的抽象方法,都必须存在于抽象类之中。若一个抽象类的子类不是抽象类,则它必须为父类中的所有抽象方法书写方法体。2静态方法用static修饰的方法是属于整个类的方法,它的特点如下所示:1) 调用该方法时,应使用类名做前缀,而不是某个具体的对象名。2) Static方法是属于整个类的方法,它在内存中的代码将随着类的定义而分配和装载,不被任何对象专有;非static方法是属于某个对象的方法,在对象创建时在内存中拥有自己的专用代码段。3) static不能操作属于某个对象的成员变量,而只能处理属于整个类的成员变量,即:static方法只能处理static域。3最终方法用final修饰的方法是功能和内部语句不能被更改的最终方法。在面向对象程序设计中,子类可把从父类那里继承来的某个方法改写,形成与父类方法同名,解决的问题类似,但具体实现和功能不全一致的新的类方法,这个过程称为重载。如果类方法被final修饰了,则该类的子类就不能在重新定义与此方法同名的自己的方法,只能使用从父类继承来的方法。这样,可以防止子类对父类的关键方法的错误的重定义,保证了程序的安全性和正确性。注意:所有被private修饰的方法,以及包含在final类中的方法,都被缺省认为是final的。4synchronizedsynchronized修饰符主要用于多线程共存的程序中的协调和同步。如果synchronized修饰的是类的方法(static方法),那么在被调用前将对应当前类的对象加锁。如果Synchronized修饰的是一个对象的方法(非static方法),则在被调用前将当前对象加锁。3.3 访问控制符访问控制符是一组限定类、域或方法是否可以被程序里的其它部分访问和调用的修饰符。类的访问符只有public,域和方法的访问控制符有四个:public、private、protected、private protected。3.3.1公共访问控制符public

温馨提示

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

评论

0/150

提交评论