新版Java教程.ppt_第1页
新版Java教程.ppt_第2页
新版Java教程.ppt_第3页
新版Java教程.ppt_第4页
新版Java教程.ppt_第5页
已阅读5页,还剩199页未读 继续免费阅读

下载本文档

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

文档简介

1、,目 录,第1章Java环境及配置 第2章 Java基本语法 第3章 类和接口,第1章Java环境及配置,1.1 Java概述 1.2 Java语言的特点 1.3 Java应用分类 1.4 JDK包的下载与安装 1.5 Java环境配置 1.6 例子程序,1.1 Java 概 述,Java是一种编程语言,它提供了一个同时用于程序开发、应用和部署的环境。Java语言主要定位于网络编程,使得程序可以最大限度地利用网络资源。,1.2 Java 语 言 的 特 点,1. 跨平台性 所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。这是软件发展的趋势和编程人员追求的

2、目标。之所以这样说,是因为计算机硬件的种类繁多,操作系统也各不相同,不同的用户和公司有自己不同的计算机环境偏好,而软件为了能在这些不同的环境里正常运行,就需要独立于这些平台。,而在Java语言中,Java自带的虚拟机很好地实现了跨平台性。Java源程序代码经过编译后生成二进制的字节码是与平台无关的,是可被Java虚拟机识别的一种机器码指令。Java虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障,使得Java语言具备跨平台性。,2. 面向对象 面向对象是指以对象为基本粒度,其下包含属性和方法。对象的说明用属性表达,而通过使用方法来操作这个对象。面向对象技术使得应用程序的开发变得简单易用,节

3、省代码。Java是一种面向对象的语言,也继承了面向对象的诸多好处,如代码扩展、代码复用等。,3. 安全性 安全性可以分为四个层面,即语言级安全性、编译时安全性、运行时安全性、可执行代码安全性。 语言级安全性指Java的数据结构是完整的对象,这些封装过的数据类型具有安全性。编译时要进行Java语言和语义的检查,保证每个变量对应一个相应的值,编译后生成Java类。运行时Java类需要类加载器载入,并经由字节码校验器校验之后才可以运行。Java类在网络上使用时,对它的权限进行了设置,保证了被访问用户的安全性。,4. 多线程 多线程在操作系统中已得到了最成功的应用。多线程是指允许一个应用程序同时存在两

4、个或两个以上的线程,用于支持事务并发和多任务处理。Java除了内置的多线程技术之外,还定义了一些类、方法等来建立和管理用户定义的多线程。,5. 简单易用 Java源代码的书写不拘泥于特定的环境,可以用记事本、文本编辑器等编辑软件来实现,然后将源文件进行编译,编译通过后可直接运行,通过调试则可得到想要的结果。,1.3 Java 应 用 分 类,1. 应用程序 典型的通用程序可以在具备Java运行环境的设备中独立运行,它又分为: GUI应用程序:即图形用户界面程序,可实现丰富的输入界面和输出显示。 命令行程序:无需界面,只需在命令行下运行,运行结果只在后台发生变化,可以将输出存放到文件中。 嵌入式

5、应用程序:Java语言的平台独立性决定了它可以嵌入到不同的设备中,且只需具备必要的运行环境即可。,2. Servlets服务器端应用程序 服务器端的应用程序用来收集客户端的数据输入,对数据进行处理之后,返回相应的响应给客户。它主要用来实现与客户端的交互。,3. Applets小应用程序 Applets应用于网络上,嵌入在HTML网页中,支持Java的浏览器都可以对它进行解释并运行。通常通过一个HTML标签来识别并运行Applets。小应用程序的类在服务器端,当浏览器显示网页时,它随之下载到本地,由本地的浏览器载入运行。,1.4 JDK包的下载与安装,Java Develop Kit简称为JDK

6、,是Sun公司免费发行的软件包,可以从Sun网站免费下载,也可以从其它国内地址下载。JDK版本从1.02开始,目前版本发展到1.6,其中高级版本对低级版本实现向下兼容。运用这个软件包,就可以对Java源程序进行编译和运行。本书中下载使用的JDK包为j2sdk-1_4_0_012-windows-i586.exe。 下载后双击图标,即可进行安装,默认的安装目录为C:j2sdk1.4.0_01。本书作者将安装目录改为D:j2sdk1.4.0_01。,1.5 Java 环 境 配 置,JDK包安装完成后,需要设置环境变量。用鼠标右键单击桌面上的图标“我的电脑”,选择“属性”项,出现标题为“系统特性”

7、的对话框,点击“高级”标签,可以看见有一个“环境变量”按钮,如图1.1所示。,图1.1 “系统特性”对话框,单击“环境变量”按钮,可以看见本机环境变量,如图1.2所示。上面为用户变量,下面为系统变量,随着操作系统或用户环境的不同,变量名、值有所不同。这里需要修改三个用户变量:include、lib和path,分别将JDK包安装之后的相应路径包含到这三个用户变量中。,图1.2 “环境变量”对话框,选中include变量,单击“编辑”按钮,弹出标题为“编辑用户变量”的对话框,如图1.3所示。在变量值一栏的最后添加“; D:j2sdk1.4.0_01include”,“;”表示与前面的各项隔开,后面

8、的路径是JDK包的安装路径下的include目录。图1.3为作者修改include变量的情况,注意你的安装路径可能与作者的有所不同,要以你的安装路径为基准进行修改。,图1.3 编辑include变量,选中lib变量,单击“编辑”按钮,弹出标题为“编辑用户变量”的对话框,如图1.4所示。在变量值一栏的最后添加“; D:j2sdk1.4.0_01lib”,“;”表示与前面的各项隔开,后面的路径是JDK包的安装路径下的lib目录。图1.4为作者修改lib变量的情况,注意你的安装路径可能与作者的有所不同,要以你的安装路径为基准进行修改。,图1.4 编辑lib变量,选中path变量,单击“编辑”按钮,弹

9、出标题为“编辑用户变量”的对话框,如图1.5所示。在变量值一栏的最后添加“; D:j2sdk1.4.0_01bin”,“;”表示与前面的各项隔开,后面的路径是JDK包的安装路径下的bin目录。图1.5为作者修改path变量的情况,注意你的安装路径可能与作者的有所不同,同样要以你的安装路径为基准进行修改。,图1.5 编辑path变量,1.6 例 子 程 序,【例1.1】源程序名称为HelloWorld.java,命令行提示符下输出字符串“Hello World”。源代码如下: /程序文件名称为HelloWorld.java public class HelloWorld public stati

10、c void main(String args) System.out.println(Hello World); ,用记事本或者专用的编辑工具如EditPlus等进行编辑,并将文件存为HelloWorld.java。建议使用像EditPlus这样的编辑软件,可使得代码更加清晰且风格良好。 运行“开始”菜单程序附件命令提示符,载入命令行程序,在命令行状态下,进入源程序所在的目录,图1.6所示的例子程序的目录在“E:_WorkJavasample”下,然后键入命令“javac HelloWorld.java”。若编译不通过,会产生错误提示。若编译通过,则没有任何提示,同时进入命令行等待状态,如图

11、1.6所示。这时,命令行虽然没有提示,但在源程序的路径下生成一个新的文件为HelloWorld.class。这个.class文件就是编译后生成的类文件,运行此文件,需在命令行状态中键入命令“java HelloWorld”,然后按回车键,此时程序就会运行并输出“Hello World”。输出完毕,立即退出程序,进入命令行等待状态,如图1.7所示。,图1.6 编译源程序HelloWorld,图1.7 运行HelloWorld应用程序,这里用到的命令Javac和Java都是JDK软件包自带的。从JDK安装路径的bin目录下可以看到javac.exe,这是编译程序,源程序编译通过后就生成.class

12、文件;而Java.exe就是载入类的运行程序,运行时根据源程序的指令要求产生正确的输出或结果。如果没有进行环境配置,直接编译或者运行Java源程序,系统会提示找不到这些命令,所以必须进行环境配置后再使用。,【例1.2】小应用程序的例子。输出“Hello World!”,如图1.8所示。源程序代码如下: /程序文件名称为HelloApplet.java import java.awt.Graphics; import java.applet.Applet; public class HelloApplet extends Applet public void paint (Graphics g

13、) g.drawString (Hello World!,50,25); ,小应用程序代码书写和编译完成后,无法独立运行,需要一个载体或者容器。下面的HTML网页代码就是小应用程序载入的容器。, HTML Test Page , HelloApplet will appear below in a Java enabled browser. ,图1.8 Applet显示“Hello World!”,第2章 Java基本语法,2.1 Java程序的构成 2.2 数据类型、变量和常量 2.3 运算符和表达式 2.4 流程控制 2.5 数组的使用,2.1 Java程序的构成,2.1.1 逻辑构成 J

14、ava源程序逻辑构成分为两大部分:程序头包的引用和类的定义。 1. 程序头包的引用 主要是指引用JDK软件包自带的包,也可以是自己定义的类。引用之后程序体中就可以自由应用包中的类的方法和属性等。,2. 类的定义 Java源程序中可以有多个类的定义,但必须有一个主类,这个主类是Java程序运行的入口点。在应用程序中,主类为包含main方法的类;在Applet中,主类为用户自定义的系统Applet类的扩展类。在Java源程序中,主类的名字同文件名一致。 类的定义又包括类头声明和类体定义。类体中包括属性声明和方法描述。下面来看一个例子,其中斜体表示的语句行为主类类头,主类类头下面从大括号“”开始到“

15、”结束的部分称为主类类体。,【例2.1】下面是一个应用程序,也是一个Applet,既可以在命令行下运行,也可以嵌入到HTML网页中用appletviewer命令运行。运行时在界面上的第一个文本框中输入你的名字,按回车键后,在第二个文本框中会显示“XXX,欢迎你来到Java世界!”,运行结果如图2.1所示。,actionPerformed 方法,main主方法,图2.1 程序界面,2.1.2 物理构成 Java源程序物理上由三部分构成,分别为语句、块和空白。 (1) 语句指一行以分号“;”结束的语句。 (2) 块指用括号对界定的语句序列,块可以嵌套使用。 (3) 空白指语句之间、块内部或者块之间

16、的空白行。空白不影响Java源程序的编译和运行,适当地运用空白,可以形成良好的代码风格。,在例1.1中, Label lblName; TextField txtName; TextField txtDisp; 都是语句,而 lblName = new Label(请输入您的名字:); txtName = new TextField(8); txtDisp = new TextField(20); add(lblName); add(txtName); add(txtDisp); txtName.addActionListener(this); 是块,语句之间、块之间或块内部的空行都为空白。,

17、2.1.3 注释语句 注释语句主要用来进行一些说明,或者标记一些无用的程序语句。有两种注释方法,行注释为以/开始的行;块注释以/*开始和*/结束,Java编译器忽略注释后的程序语句或说明。 例如,下面的语句就是注释语句用来说明程序文件名称的。 /程序文件名称为WelcomeApplet.java 上述的语句注释可以更改为: /*程序文件名称为WelcomeApplet.java*/ 或 /* 程序文件名称为 WelcomeApplet.java */,2.1.4 标识符、关键字和转义符 在Java语言中,标识符是赋予变量、类和方法等的名称。标识符由编程者自己指定,但需要遵循一定的语法规范: (

18、1) 标识符由字母、数字、下划线(_)、美元符号($)组成,但美元符号用得较少。 (2) 标识符从一个字母、下划线或美元符号开始。 (3) Java语言中,标识符大小写敏感,必须区别对待。 (4) 标识符没有最大长度的限制,但最好表达特定的意思。 (5) 标识符定义不能是关键字。,关键字又称保留字,是指Java语言中自带的用于标志数据类型名或者程序构造名等的标识符,如public、double等。 转义符是指一些有特殊含义的、很难用一般方式表达的字符,如回车、换行等。所有的转义符以反斜线()开头,后面跟着一个字符来表示某个特定的转义符,如表2.1所示。,表2.1 转 义 符,2.2 数据类型、

19、变量和常量,2.2.1 数据类型 Java编程语言定义了八种基本的数据类型(见表2.2),共分为四类:整数类(byte、short、int、long)、文本类(char)、浮点类(double、float)和逻辑类(boolean)。,表2.2 Java的数据类型,1. 整数类 (1) 采用三种进制十进制、八进制和十六进制。 2 十进制值是2; 077 首位的0表示这是一个八进制的数值; 0 xBAAC 首位的0 x表示这是一个十六进制的数值。 (2) 具有缺省int。 (3) 用字母“L”和“l”定义long。 (4) 所有Java编程语言中的整数类型都是带符号的数字。,2. 文本类 (1)

20、 代表一个16 bit Unicode字符。 (2) 必须包含用单引号( )引用的文字。 (3) 使用下列符号: a一个字符。 t-一个制表符。 u? -一个特殊的Unicode字符,?应严格使用四个十六进制数进行替换。,3. 浮点类 默认为double类型,如果一个数字包括小数点或指数部分,或者在数字后带有字母F或f(float)、D或d(double),则该数字为浮点数。,4. 逻辑类 boolean数据类型有两种值:true和false。 例如:boolean flag = true; 上述语句声明变量flag为boolean 类型,它被赋予的值为true。,2.2.2 变量与常量 常量

21、是指整个运行过程中不再发生变化的量,例如数学中的= 3.1415,在程序中需要设置成常量。而变量是指程序的运行过程中发生变化的量,通常用来存储中间结果,或者输出临时值。 变量的声明也指变量的创建。执行变量声明语句时,系统根据变量的数据类型在内存中开辟相应的存储空间并赋予初始值。变量有一个作用范围,超出它声明语句所在的块就无效。,下面看一个使用各种类型变量声明并改变的示例。程序中pi为常量,s1、i1、l1、ch1、f1、d1、b1为全局变量,可以在方法change中发生改变,然后在方法main中输出。而s2、i2、l2、ch2、f2、d2、b2是方法main的局部变量,它们的作用范围只局限于方

22、法main中。 【例2.2】测试不同数据类型的变量,程序输出如图2.2所示。源程序代码如下: /程序文件名称为SetVariable.java public class SetVariable /全局变量,static double pi = 3.141592654;/数学常量static short s1; static int i1; static long l1; static char ch1; static float f1; static double d1; static boolean b1; public static void main(String args) ,/局部变

23、量 short s2 = 35; int i2 = -32; long l2 = 34555L; char ch2 = A; float f2 = 897.89F; double d2 = 34.345; boolean b2 = false; /输出常量 System.out.println(数学常量pi = + pi); /输出局部变量,System.out.println(*局部变量*); System.out.println(短整型变量s2 = + s2); System.out.println(整型变量i2 = + i2); System.out.println(长整型变量l2 =

24、+ l2); System.out.println(字符变量ch2 = + ch2); System.out.println(浮点数类型f2 = + f2); System.out.println(双精度型变量d2 = + d2); System.out.println(布尔型变量b2 = + b2); /调用方法修改全局变量的值,change(); /输出全局变量的值 System.out.println(*全局变量*); System.out.println(短整型变量s1 = + s1); System.out.println(整型变量i1 = + i1); System.out.pri

25、ntln(长整型变量l1 = + l1); System.out.println(字符变量ch1 = + ch1); System.out.println(浮点数类型f1 = + f1); System.out.println(双精度型变量d1 = + d1); System.out.println(布尔型变量b1 = + b1); ,/方法:修改全局变量的值 public static void change() s1 = 125; i1 = 88; l1 = 987654321L; ch1 = B; f1 = 3.2590F; d1 = -1.04E-5; b1 = true; ,图2.2

26、 变量输出结果,2.3 运算符和表达式,Java常用的运算符分为五类:算术运算符、赋值运算符、关系运算符、布尔逻辑运算符、位运算符。位运算符除了简单的按位操作外,还有移位操作。按位操作返回布尔值。 表达式是由常量、变量、对象、方法调用和操作符组成的式子。表达式必须符合一定的规范,才可被系统理解、编译和运行。表达式的值就是对表达式自身运算后得到的结果。 根据运算符的不同,表达式相应地分为以下几类:算术表达式、关系表达式、逻辑表达式、赋值表达式,这些都属于数值表达式。,2.3.1 算术运算符及算术表达式 Java中常用的算术运算符如下: +加运算符 -减运算符 *乘运算符 /除运算符 %取模运算(

27、除运算的余数) +增量运算符 -减量运算符,【例2.3】测试运算符及表达式,程序输出如图2.3所示。源程序代码如下: /程序文件名称为NumberOper.java public class NumberOper public static void main(String args) /变量初始化 int a = 30; int b = 20; /定义结果变量 int r1,r2,r3,r4,r5,r6,r7,r8,r9; /计算结果 r1 = a + b;,r2 = a-b; r3 = a * b; r4 = a / b; r5 = a % b; r6 = a +; r7 = b-; r8

28、 = + a; r9 = - b; /输出结果 System.out.println(a = + a + b = + b); /a,b的值 System.out.println(a+b = + r1); System.out.println(a-b = + r2);,System.out.println(a*b = + r3); System.out.println(a/b = + r4); System.out.println(a%b = + r5); System.out.println(a+ = + r6); System.out.println(b- = + r7); System.o

29、ut.println(+a = + r8); System.out.println(-b = + r9); ,图2.3 程序输出结果,2.3.2 关系运算符 关系运算符用于比较两个数据之间的大小关系,关系运算表达式返回布尔值,即“真”或“假”。Java中的常用关系运算符如下: = =等于 ! =不等于 大于 =大于等于 =小于等于,【例2.4】编写程序,测试关系运算符及其表达式,程序输出如图2.4所示。源程序代码如下:,/程序文件名称为TestRelation.java public class TestRelation public static void main(String args)

30、 /变量初始化 int a = 30; int b = 20; /定义结果变量 boolean r1,r2,r3,r4,r5,r6; /计算结果,r1 = a = b; r2 = a != b; r3 = a b; r4 = a = b; r6 = a b = + r3); System.out.println(a=b = + r5); System.out.println(a=b = + r6); ,图2.4 程序输出结果,2.3.3 布尔逻辑运算符,表2.3 布尔运算符及规则,图2.3为布尔逻辑运算符及其规则示例等。其中简洁与和简洁或的执行结果分别与非简洁与和非简洁或的执行结果是一致的,不

31、同在于简洁与检测出符号左端的值为假时,不再判断符号右端的值,直接将运算结果置为假;而简洁或与非简洁或的不同在于简洁或检测出符号左端为真时,不再判断符号右端的值,直接将运算结果置为真。 例如: Boolean a = false; Boolean b = true; a boolean b = true; /定义结果变量 boolean r1,r2,r3,r4,r5,r6; /计算结果,r1 = !a; r2 = a ,图2.5 程序输出结果,2.3.4 位运算符 Java中的常用位运算符如下: 位求反 int b = 2; /定义结果变量 int r1,r2;,/计算结果 r1 = a b;

32、r2 = a b = + r1); System.out.println(ab = + r2); ,图2.6 程序输出结果,2.3.5 赋值运算符 赋值运算符分为简单运算符和复杂运算符。简单运算符指“=”,而复杂运算符是指算术运算符、逻辑运算符、位运算符中的双目运算符后面再加上“=”。表2.4列出Java常用的赋值运算符及其等价表达式。,表2.4 赋值运算符及其等价表达式,2.3.6 其它操作符及其表达式 三目运算符(?:)相当于条件判断,表达式x?y:z用于判断x是否为真,如果为真,表达式的值为y,否则表达式的值为z。 例如: int x = 5; int a = (x3)?5:3; 则a的

33、值为5。如果x = 2,则a的值为3。,对象运算符(instanceof)用来判断一个对象是否属于某个指定的类或其子类的实例,如果是,返回真(true),否则返回假(false)。 例如: boolean b = userObject instanceof Applet 用来判断userObject类是否是Applet类的实例。,2.3.7 优先级,表2.5 运算符优先级,2.4 流 程 控 制,流程控制分为三种基本结构:顺序结构、分支结构和循环结构。顺序结构是指命令行顺序执行,这是最常见的一个格式;分支结构是一种选择结构,根据条件的值选择不同的执行流程,可以得到不同的结果。分支结构包括单分支

34、语句(if-else语句)和多分支语句(switch语句);循环结构是指对于一些重复执行的语句,用户指定条件或次数,由机器自动识别执行。循环结构包括次数循环语句(for语句)和条件循环语句(while语句)。,2.4.1 分支语句 分支语句分为两类:单分支语句和多选语句。 1. if-else语句 if-else语句的基本格式为: if(布尔表达式) 语句或块1; else 语句或块2; ,其中: (1) 布尔表达式返回值为true或false。 (2) 如果为true,则执行语句或块1,执行完毕跳出if-else语句。 (3) 如果为false,则跳过语句或块1,然后执行else下的语句或块

35、2。,【例2.7】测试if-else语句,如果x10,则输出x的值,并提示结果正确,否则输出x= 10,提示结果不正确。程序输出结果如图2.7所示。源程序代码如下: /程序文件名称为TestIf.java public class TestIf /声明全局变量x static int x; public static void main(String args) x = 12; if(x10) ,System.out.println(x = + x + 结果正确); else System.out.println(x = 10 + 结果不正确); change(); System.out.pr

36、intln(修改x的值之后); if(x10) System.out.println(x = + x + 结果正确); else System.out.println(x = 10 + 结果不正确); ,/change方法:修改x的值 public static void change() x = 5; ,图2.7 程序输出结果,2. switch语句 switch语句的基本格式为: switch(表达式1) case 表达式2: 语句或块2; break; case表达式3: 语句或块3; break; case 表达式4: 语句或块4; break; default: 语句或块5; bre

37、ak; ,其中: (1) 表达式1的值必须与整型兼容。 (2) case分支要执行的程序语句。 (3) 表达式2、3、4是可能出现的值。 (4) 不同的case分支对应着不同的语句或块序列。 (5) break表示跳出这一分支。,【例2.8】测试switch语句,当x=1、2、3时,分别打印1、2、3,x不为这三个值时,打印x的值。程序输出结果如图2.8所示。源程序代码如下: /程序文件名称为TestSwitch.java public class TestSwitch public static void main(String args) /声明变量x int x; x = 12;,Sys

38、tem.out.println(x=12时打印的值); choose(x); x = 3; System.out.println(x=3时打印的值); choose(x); /choose方法:switch语句结构 public static void choose(int x) switch(x) ,case 1: System.out.println(1); break; case 2: System.out.println(2); break; case 3: System.out.println(3); break; default: System.out.println(x); ,图

39、2.8 程序输出结果,2.4.2 for循环语句 for循环语句实现已知次数的循环,其基本格式为: for(初始化表达式;测试表达式;步长) 语句或块; ,其执行顺序如下: (1) 首先运行初始化表达式。 (2) 然后计算测试表达式,如果表达式为true,执行语句或块;如果表达式为false,退出for循环。 (3) 最后执行步长。,【例2.9】用for循环统计1100(包括100)之间数的总和。程序输出结果如图2.9所示。源程序代码如下: /程序文件名称为TestFor.java public class TestFor public static void main(String args

40、) int sum = 0; for(int i = 1; i=100; i+) sum += i; System.out.println(1到100(包括100)的数的总和为: + sum); ,图2.9 程序输出结果,2.4.3 while循环语句 while循环语句实现受条件控制的循环,其基本格式为: while(布尔表达式) 语句或块; 当布尔表达式为true时,执行语句或块,否则跳出while循环。,上面for循环语句的例子改为while语句后如下所示: int sum = 0; int i = 1; while (i=100) sum += i; i+; System.out.pr

41、intln(1到100(包括100)的数的总和为: + sum);,2.4.4 do语句 do语句实现受条件控制的循环,其基本格式为: do 语句或块; while(布尔表达式),先执行语句或块,然后再判断布尔表达式。与while语句不同,当布尔表达式一次都不为true时,while语句一开始判断就跳出循环,不执行语句或块,而在do语句中则要执行一次。上面那个例子改为do循环为: int sum = 0; int i = 1; do sum += i; i+; while (i=100); System.out.println(1到100(包括100)的数的总和为: + sum);,2.5 数

42、 组 的 使 用,2.5.1 数组声明 数组的定义如下: (1) 首先是一个对象。 (2) 存放相同的数据类型,可以是原始数据类型或类类型。 (3) 所有的数组下标默认从0开始,而且访问时不可超出定义的上限,否则会产生越界错误。,数组声明时实际是创建一个引用,通过代表引用的这个名字来引用数组。数组声明格式如下: 数据类型 标识符 例如: int a;/声明一个数据类型为整型的数组a pencil b;/声明一个数据类型为pencil类的数组b,2.5.2 创建数组 由于数组是一个对象,所以可以使用关键字new来创建一个数组,例如: a = new int10;/创建存储10个整型数据的数组a

43、b = new pencil20;/创建存储20个pencil类数据的数组b 数组创建时,每个元素都按它所存放数据类型的缺省值被初始化,如上面数组a的值被初始化为0,也可以进行显式初始化。在Java编程语言中,为了保证系统的安全,所有的变量在使用之前必须是初始化的,如果未初始化,编译时会提示出错。有两种初始化数组的方式,分别如下:,(1) 创建数组后,对每个元素进行赋值。 a0=5; a1=4; . a9 = 10; (2) 直接在声明的时候就说明其值,例如: int a = 4,5,1,3,4,20,2; 说明了一个长度为7的一维数组。,【例2.10】编写程序测试数组,程序输出结果如图2.1

44、0所示。源程序代码如下: /程序文件名称为TestArray.java public class TestArray public static void main(String args) /声明数组 int a; char b; /创建数组,a = new int3; b = new char2; /数组初始化 for (int i = 0; i3; i+) ai = i*3; b0 = a; b1 = b; /快速初始化数组 int c = 0,1*3,2*3; /输出结果 System.out.print(数组an);,for (int i = 0; i2; i+) System.ou

45、t.print(bi + ); System.out.print(n数组cn); for (int i = 0; i3; i+) System.out.print(ci + ); ,图2.10 程序输出结果,第3章类和接口,3.1 类 3.2 接口 3.3 常用数据结构及类,3.1 类,3.1.1 类的定义和声明 Java编程语言是面向对象的,处理的最小的完整单元为对象。而现实生活中具有共同特性的对象的抽象就称之为类。类由类声明和类体构成,类体又由变量和方法构成。下面给出一个例子来看一下类的构成。 【例3.1】自定义一个apple类,在主类SetApple中创建实例并调用方法,输出结果如图3.

46、1所示。源程序代码如下:,/程序文件名为SetApple.java public class SetApple public static void main(String args) apple a = new apple();/创建apple类 a.appleweight = 0.5;/实例变量赋值 System.out.println(苹果的重量为1两); System.out.println(a.bite();/调用实例方法 a.appleweight = 5; System.out.println(苹果的重量为5两); System.out.println(a.bite(); ,/自

47、定义类 class apple /属性 long applecolor;/对应苹果的颜色 double appleweight;/苹果的重量 boolean eatup;/是否吃完 /类方法 public boolean bite() if (appleweight1) System.out.println(苹果已经吃完了!哈哈); eatup = true; ,else System.out.println(苹果吃不下了!:(); eatup = false; return eatup; ,图3.1 自定义类的应用,1. 类声明的基本格式 访问说明符 class 类名 extends 超类名

48、 implements 接口名 其中: (1) 访问说明符为public或者缺省。public用来声明该类为公有类,可以被别的对象访问。声明为公有的类存储的文件名为类名。 (2) 类名:用户自定义的标识符,用来标志这个类的引用。 (3) 超类名:是指已经存在的类,可以是用户已经定义的,也可以是系统类。 (4) 接口名:即后面讲到的接口。,例如: public class HelloApplet extends Applet 访问说明符为public,类名HelloApplet,扩展类为JDK包自带的java.applet.Applet类。由于public的存在,所以文件名必须存为HelloAp

49、plet.java,同类名保持一致。,2. 类体 类体包括成员变量和方法。 (1) 成员变量:指类的一些属性定义,标志类的静态特征,它的基本格式如下: 访问说明符 数据类型 变量名 其中: 访问说明符有public、private和protected三种: public:省略时默认为公有类型,可以由外部对象进行访问。 private:私有类型,只允许在类内部的方法中使用,若从外部访问,必须通过构造函数间接进行。 Protected:受保护类型,子类访问受到限制。 数据类型包括基本类型以及用户自定义的扩展类型。,(2) 方法:是类的操作定义,标志类的动态特征,它的基本格式如下: 访问说明符 数据

50、类型 方法名(数据类型1 变量名1, 数据类型2 变量名2) 其中: 访问说明符为public、private和protected,其使用方法与成员变量访问说明符的使用方法一致。 数据类型:包括基本数据类型和用户自定义的扩展类型。 数据类型为参数。,3. 创建类的实例 使用关键字 new进行创建,例如: HelloApplet hp = new HelloApplet(); 例3.1中,自定义类apple,访问标识符缺省,定义三个属性: long applecolor;/对应苹果的颜色 double appleweight;/苹果的重量 boolean eatup;/是否吃完,一个方法为: p

51、ublic boolean bite()/类方法. 公有类SetApplet中引用自定义类,首先创建类的实例: apple a = new apple(); 其次赋初值: a.appleweight = 0.5;/实例变量赋值 最后调用它的方法: System.out.println(a.bite();/调用实例方法,3.1.2 类的单继承性 Java编程语言中允许用extends关键字从一个类扩展出一个新类,新类继承超类的成员变量和方法,并可以覆盖方法。 【例3.2】测试类的单继承性,程序输出结果如图3.2所示。源程序代码如下: /程序文件名TestExtend.java public cl

52、ass TestExtend extends Employee public static void main(String args) System.out.println(覆盖的方法调用: + getSalary(王一,500);,System.out.println(继承的方法调用: + getSalary2(王一,500); System.out.println(覆盖的方法调用: + getSalary(王飞,10000); System.out.println(“继承的方法调用:” + getSalary2(“王飞,10000); public static String getSa

53、lary(String name, int salary) String str; if (salary5000) str = 名字: + name + Salary: + salary; else str = 名字: + name + Salary: 低于5000;,return str; ; class Employee public String name;/名字 public int salary;/薪水 public static String getSalary(String name, int salary) String str; str = 名字: + name + Sala

54、ry: + salary; return str; ,public static String getSalary2(String name, int salary) String str; str = 名字: + name + Salary: + salary; return str; ;,程序中定义了父类Employee类,它有两个方法getSalary和getSalary2,方法体的实现都是一致的,都为输出名字和薪水的值。在TextExtend主类中覆盖了getSalary方法,方法体重新定义为薪水低于5000时并不输出薪水的值而是输出“低于5000”,用于和继承的getSalary2方

55、法进行比较。由图3.2可以看出覆盖的方法按主程序中重定义的方法调用,而继承的方法直接调用父类中的方法。,图3.2 测试单继承性程序的输出结果,3.1.3 特殊变量 类中有两个特殊变量super和this。 1. super 类声明中用关键字extends扩展了其超类之后,super用在扩展类中引用其超类中的成员变量。 【例3.3】使用super变量,输出结果如图3.3所示。源程序代码如下: /程序文件名为UseSuper.java public class UseSuper ,public static void main(String args) Manager m = new Manage

56、r(); = 王飞; m.salary = 10000; m.department = 业务部; System.out.println(m.getSalary(); class Employee ,public String name;/名字 public int salary;/薪水 /方法 public String getSalary() String str; str = 名字: + name + nSalary: + salary; return str; class Manager extends Employee, public String department;

57、/部门 /方法 public String getSalary() /使用super变量调用超类的方法 return super.getSalary() + nDepartment: + department; ,图3.3 测试super变量的输出,2. this this变量指向当前对象或实例。 str = 名字: + name + nSalary: + salary; 上例中的语句可以换成下面的语句。 str = 名字: + + nSalary: + this.salary; 这两者是等同的,因为在Java编程语言中,系统自动将this关键字与当前对象的变量相关联。但有

58、一种情况例外,就是当在某些完全分离的类中调用一个方法并将当前对象的一个引用作为参数传递时。例如: Day d = new Day(this);,3.1.4 构造函数 类中的构造函数用来初始化一个类。构造函数为公有类型,无返回值,用来从类实例中访问类时初始化此类的私有变量。 【例3.4】基于例3.3将公有变量改成私有变量之后,增加两个构造函数,访问通过外部调用构造函数实现初始化赋值,得到如图3.3所示的结果。 /程序文件名为UseConstruct.java public class UseConstruct public static void main(String args) ,Manager m = new Manager(王飞,10000,业务部);/初始化赋值 System.out.println(m.getSalary(); class Employee private String name;/名字 private int salary;/薪水 /构造函数 public Employee(String _name, int _salary) ,name = _name; salary

温馨提示

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

评论

0/150

提交评论