收藏 分享(赏)

java基础知识大全(必看经典).doc

上传人:tangtianxu1 文档编号:2955082 上传时间:2018-09-30 格式:DOC 页数:68 大小:215.86KB
下载 相关 举报
java基础知识大全(必看经典).doc_第1页
第1页 / 共68页
java基础知识大全(必看经典).doc_第2页
第2页 / 共68页
java基础知识大全(必看经典).doc_第3页
第3页 / 共68页
java基础知识大全(必看经典).doc_第4页
第4页 / 共68页
java基础知识大全(必看经典).doc_第5页
第5页 / 共68页
点击查看更多>>
资源描述

1、第一讲 Java 语言入门1.1 Java 的特点1.1.1 面向对象: 与 C+相比,JAVA 是纯的面向对象的语言 C+为了向下兼容 C,保留了很多 C 里面的特性,而 C,众所周知是面向过程的语言,这就使 C+成为一个“混血儿“。而 JAVA 语法中取消了 C里为兼容 C 所保留的特性,如取消了头文件、指针算法、结构、单元等。1.1.2 可移植(平台无关性): 生成中间字节码指令 与其他编程语言不同,Java 并不生成可执行文件(.exe 文件),而是生成一种中间字节码文件(.class 文件)。任何操作系统,只要装有 Java 虚拟机(JVM),就可以解释并执行这个中间字节码文件。这正

2、是 Java 实现可移植的机制。 原始数据类型存储方法固定,避开移植时的问题 Java 的原始数据类型的大小是固定的。比如,在任何机器上,整型都是 32 位,而 C+里整型是依赖于目标机器的,对 16 位处理器(比如 8086),整数用两个字节表示;在像 Sun SPARC 这样的 32位处理器中,整数用 4 个字节表示。在 Intel Pentium 处理器上,整数类型由具体的操作系统决定:对于 DOS 和 Win32 来说,整数是 2 个字节;对于 Windows 9x 、NT 和 2000,整数是 4 个字节。当然,使整数类型平台无关之后,性能必然有所下降,但就 Java 来说,这个代价

3、是值得的。Java 的字符串,则采用标准的 Unicode 格式保存。可以说,没有这个特性,Java 的可移植性也不可能实现。1.1.3 简单 JAVA 在语法上与 C+类似 JAVA 的语法与 C+很接近,有过 C 或者 C编程经验的程序员很容易就可以学会 JAVA 语法; 取消了 C+的一些复杂而低效的特性比如:用接口技术代替了 C+的多重继承。C中,一个类允许有多个超类,这个特性叫做“多重继承“,多重继承使得编译器非常复杂且效率不高;JAVA 的类只允许有一个超类,而用接口(Interface)技术实现与 C的多继承相类似的功能 其它被取消的特性包括:虚拟基础类、运算符过载等 JAVA

4、的基本解释器和类支持模块大概仅 40K 即使加入基本的标准库和支持线程的模块,也才 220K 左右。与 GUI(图形用户界面)相比,明显小很多1.1.4 健壮 取消了指针算法 C 的最关键的一个特性是它的强大指针算法,比如可以用指针访问字符串、数组甚至文件,很容易产生指针溢出,意外地改写内存和损毁数据。JAVA 里有一个指针模型,对于普通的任务,如访问字符串、数组,根本不用指针,而一旦需要,比如访问对象、文件时,也可以获得指针的强大能力,但 JAVA 同时有高度的指针安全保障,用户永远不可能访问一个坏掉的指针、不可能造成内存分配错误,也用不着专门提防可能出现的内存漏洞。1.1.5 多线程 强大

5、的多线程能力 多线程可以使程序有更好的交互性和实时性,并可以最大限度地利用多处理器系统。JAVA 有着强大的多线程处理能力,因为各主流操作系统平台在线程的实施方面有重大的差异,所以 JAVA 为不同的操作系统实现了专门的多线程机制。在这点上来说,JAVA 没有做到平台无关。 a1.2 Java 简史 首次亮相-1995 年 5 月 Java 技术起先是作为小型的计算机语言,用于消费类设备,比如有线电视交换盒等。因为这些设备的功能和内存均不足以运行大程序,所以程序要尽可能小;另外,由于不同的厂商可能选用不同的 CPU,所以要求这种语言不能受限于任何一种独立的体系结构。1995 年 5 月 23

6、日召开的 SunWorld 95 大会上,一种全新的浏览器(今天的 HotJava 的前身)亮相,标志着 Java 的诞生。 开始流行-1996 年 1 月 那时网景公司决定在 Netscape2.0 加入对 Java 的支持,Netscape2.0 在 1996 年 1 月发布,从这一版本开始,所有 Netscape 浏览器均支持 Java。注册了 Java 使用许可证的还有IBM、Symantec、Inprise 和其他许多公司。就连微软,也加入了这一行列(尽管他们支持的 Java 和标准的 Java 稍有不同)。 SUN 的第一个 JAVA 版本-1996 年初 Sun 公司于 1996

7、 年初发布了 Java 1.02,遗憾的是,Java1.02 还未摆脱其小型语言的影子,只适合用来做诸如网页上一个随机移动的文字之类的工作,并不适合用来做正规的程序开发。Java1.02作为一种正规的编程语言,可以说,准备得很不充分。 成熟-1998 年 1998 年 12 月,Java1.2 问世了。它是一个功能全面的、具有高度扩展能力的新版本。3 天后,Java1.2 被改进成 Java2,向“一次编写,到处运行“的目标前进了一大步。 现状 现在最新的 Java 版本是 JDK1.4,它是一个测试版,稳定的正式版是 JDK1.3。用户可以到http:/ IE6.0 中不再支持 Java,为

8、 Java的发展带来阴影。 1.3 JDK 的安装与编程环境的设定 1.3.1 Java 程序的开发过程经典的 Java 工具包是 JDK。尽管可以用任何文本编辑器,如记事本,都可以直接编写 Java 程序然后用 JDK 的命令编译和运行,为了调试方便,也为了初学者容易上手,本教程课件将使用一个叫JPadPro 的 Java 编写工具来调用 JDK 的工具。用户可以到 http:/ 下载这个工具。1.3.2 JDK 的安装1.3.3 安装运行之后,应该首先设置 JDK 工具包所在的路径。菜单栏的 JDK-select JDK Directory-选择刚才安装的 JDK 路径-OK。1.3.4

9、新建一个 project菜单栏的 File-new projects-选择路径, 输入 project 的名字。 1.4 两个简单的程序示例 1.4.1 Java 应用程序:Hello.java 编写 新建一个.java 文件。File-new-java file-输入一个名字:Hello-点 creat file.出现了一个空的 java 文件。 编译 JDK-compile Hello.java 或者点击如演示所示的按钮。实际上是执行 JDK 工具包里的javac.exe 命令,与 javac G:java2jiaochengexampleteach1Hello.java 是等价的。便已完

10、成之后在同一个文件夹就会有一个同名的.class 文件。 看编译结果,改错 错误举例:少写一个分号;录入错误; 运行 JDK-Run classes-选择要运行的 class,输入参数(这里,没有参数)或者点击如演示所示的按钮。一个有参数的例子 看运行结果 1.4.2 Java Applet: StarterApplet.java新建一个 Java Applet 文件。File-new-java Applet-输入一个名字:StarterApplet-出现了一个空的 java 文件和一个 Html 文件。 编译 JDK-compile StarterApplet.java 或者点击如演示所示的

11、按钮。实际上是执行 JDK 工具包里的 javac.exe 命令,与 javac G:java2jiaochengexampleteach1 StarterApplet.java 是等价的。注意 不要隐藏文件的扩展名,否则给编译时带来麻烦!可以在工工具/文件夹先项/查看/中修改! 看编译结果,改错 运行 JDK-Test Applet-选择要运行的 class,输入参数(这里,没有参数)或者点击如演示所示的按钮或者直接双击 Html 文件。 看运行结果 1.5 如果获得帮助 1.5.1 下载帮助JDK 并不包含帮助文件,需要到网站上下载,里面有示例和说明。http:/www.confluent

12、.fr/javadoc/jdk13e.html,下载下来时候,双击安装。1.5.2 使用帮助敲入想查找的关键字,按回车。 1.6 编程的一些约定 注意:在一个原文件中只能有一个 public 类!且文件名与 public 类同名!1.6.1 命名规则类名与文件名应该一致,否则编译出错。比如,class Hello 的文件名应该是 Hello.java类名首字母大写,每个单词开头大写,其他用小写。比如:Hello.java, StarterApplet.java。变量名用第一个单词用小写字母,第二个以后的单词首字母大写。比如:int myAge;方法的名字第一个单词用小写字母,第二个以后的单词首

13、字母大写,比如:getMyAge();1.6.2 注释/* Here is a block comment.*/表示完整的一段注释;if (condition) /* Handle the condition. */.表示注释该行以下部分if (a = 2) return TRUE; /* special case */ else return isPrime(a); / works only for odd a注释一行1.6.3 分行如果一行太长需要换行。比如:someMethod(longExpression1, longExpression2, longExpression3, long

14、Expression4, longExpression5);var = someMethod1(longExpression1,someMethod2(longExpression2,longExpression3); var = someMethod1(longExpression1, someMethod2(longExpression2,longExpression3);讲演计划 第三讲 语句Java 的语句可以分为以下 4 种: 表达式语句 方法调用语句 控制语句 3.1 表达式语句 一个表达式加上一个分号就构成了一个语句。分号表示一个语句的结束,缺少分号,编译将出错。最典型的表达式语

15、句是赋值语句。比如:int x;x=23;3.2 方法调用语句 调用一个类的对象的方法:类名(或对象名).方法名(参数列表)。比如:System.out.println(“Hello“).如果方法有返回值,还可以把返回值赋值给一个变量。比如:String s=“Hello“,int len;len=s.length();3.3 控制语句 Java 语言的控制语句有 2 种:条件语句、循环语句。条件语句:条件语句有两种:if 语句和 switch 语句。 if 语句: if (条件) 代码块 1else 代码块 2如果条件为真,则执行代码块 1,否则执行代码块 2。else 部分是可选的,也就是

16、说,可以没有 else。如果有 else,则与最近的 if 结合: switch 语句 switch 语句是多分支的开关语句,它的一般格式定义如下:switch(表达式)case 常量值 1:代码块 1break;case 常量值 2:代码块 2break;default:代码块语句中表达式的值必须是整型或者字符型;常量值 1 到常量值 n 必须也是整型或者字符型。switch 语句首先计算表达式的值,如果表达式的值和某个 case 后面的常量值相同,就执行该 case里的若干个语句直到 break 语句为止。如果没有一个常量与表达式的值相同,则执行 default 后面的若干个语句。defa

17、ult 是可有可无的,如果它不存在,并且所有的常量值都和表达式的值不相同,那么 switch 语句就不会进行任何处理。需要注意的是,在 switch 同一个语句中,case 后的常量值必须互不相同。 3.3 控制语句 Java 语言的控制语句有 2 种:条件语句、循环语句。条件语句:条件语句有两种:if 语句和 switch 语句。 if 语句: if (条件) 代码块 1else 代码块 2如果条件为真,则执行代码块 1,否则执行代码块 2。else 部分是可选的,也就是说,可以没有 else。如果有 else,则与最近的 if 结合: switch 语句 switch 语句是多分支的开关语

18、句,它的一般格式定义如下:switch(表达式)case 常量值 1:代码块 1break;case 常量值 2:代码块 2break;default:代码块语句中表达式的值必须是整型或者字符型;常量值 1 到常量值 n 必须也是整型或者字符型。switch 语句首先计算表达式的值,如果表达式的值和某个 case 后面的常量值相同,就执行该 case里的若干个语句直到 break 语句为止。如果没有一个常量与表达式的值相同,则执行 default 后面的若干个语句。default 是可有可无的,如果它不存在,并且所有的常量值都和表达式的值不相同,那么 switch 语句就不会进行任何处理。需要

19、注意的是,在 switch 同一个语句中,case 后的常量值必须互不相同。 循环语句: 循环语句,顾名思义,是反复执行的语句。比如,计算 100 的阶乘,1*2*3*.*100,就需要用到循环语句,不然,就要写一百遍乘法。循环语句需要特别小心,很容易陷入死循环,所以循环体的代码块里需要有能使循环结束的语句。Java 有三种循环语句:while 语句,do-while 语句和 for 语句。 while 语句: while 语句的格式是:while(条件)代码块当条件成立的时候,执行代码块,再检查条件,如果还成立,再执行代码块,直到条件不成立。比如,计算 10 的阶乘: do-while 语句

20、 do-while 语句的格式是:do代码块while(条件)do-while 语句和 while 语句的区别在于:while 语句先检查条件,如果条件不成立,则不进入循环体;do-while 语句先执行循环体的代码,再检查条件,如果条件成立,则在此执行循环体的代码。所以,do-while 语句至少要执行一遍循环体的代码块。比如,计算 10 的阶乘: for 语句 for 语句是 Java 语言中用得最多的循环语句。它的格式如下:for(表达式 1,表达式 2,表达式 3)代码块其中,表达式 1 完成变量的初始化,表达式 2 时布尔类型的表达式,是循环条件,表达式 3 是党执行了一遍循环之后,

21、修改控制循环的变量值。for 语句的执行过程是这样的:首先计算表达式 1,完成必要的初始化工作;然后判断表达式 2的值,如果表达式的值为 true,则执行循环体;如果为 false,则跳出循环。执行完循环体之后紧接着计算表达式 3,以便改变循环条件,这样一轮循环就结束了。第二轮循环从计算表达式开始,如果表达式的值仍为 true,则继续循环;否则循环结束,执行 for 语句后面的语句。比如,计算 10 的阶乘: 嵌套循环 经常可以遇到嵌套循环的例子。所谓嵌套循环,是指一个循环体里还有一个或者更多个循环。比如计算 10 以内的阶乘之和,或者求 50 以内的素数,就需要用到嵌套循环。我们以求 50

22、以内的素数为例,说明嵌套循环的用法;求 10 以内的阶乘之和,将留作作业。循环语句里的 break 语句和 continue 语句:在循环体中,遇到 break 语句,那么整个循环语句就结束;如果遇到 continue 语句,那么本次循环就结束,就是说,不再执行本次循环中 continue 语句后面的语句,而是转入下一次循环。 3.5 变量的作用域 变量是由作用域的。所谓变量的作用域,是指一个变量在什么地方生效。总的来说,变量的作用域是声明它的块。所谓块,是指用一对花括号包围起来的任意数量的 Java 语句。变量只在声明它的块中有效,在这块以外,变量是无效的。然而,不可以在两个嵌套的块中声明两

23、个完全同名的变量。注意,在 C+中,这是允许的,内部定义会掩盖外部定义。这很容易造成错误,所以 Java 不允许这样做。 小结 这一讲,我们主要学习了 Java 的语句,主要是流程控制语句,包括条件语句和循环语句等。语句是程序的基本组成部分,是我们进一步学习 Java 的基础。希望同学们切实掌握好这部分内容,为我们的进一步学习打下坚实的基础。 习题 1. 编一个计算 1!+2!+10!的应用程序 编写一个应用程序计算 100 以内的全部质数 2. 一个数如果恰好等于它的因子之和,这个数就称为“完数”,编写一个应用程序,求 1000 之内的所有完数。 3. 求 45 和的最大公约数和最小公倍数。

24、 第四讲 数组和字符串4.1 什么是数组?为什么要数组?除了基本数据类型,Java 还提供一种导出类型:数组。数组是相同类型的数据按顺序组成的一种复合数据类型,通过数组名和下标,可以使用数组中的数据。下标从 0 开始。数组是所有编程语言中常用的数据结构。为什么要数组呢?我们来举一个例子。假设我们需要表示一个班 50 个人的数学成绩,要求求出平均成绩。如果没有数组,我们需要用前面学过的声明变量的方法,声明 50 个变量,写 50 次加法运算!数组可以大大地简化类似的问题!我们只要声明一个长度为 50 的整型数组,结合上一讲我们学过的循环语句,就可以很方便地解决这个问题!在以前的编程语言比如 C

25、或者 C+中,字符串也使用数组来表示的:字符串是字符数组!所以字符串与数组有着天然的联系。但是在 Java 中,提供了一种更方便的表示字符串的方法:用一个String 类来表示。类是面向对象的语言特有的概念,对于初次接触面向对象技术的人来说,比较难理解。所以,这一讲,我们将学习表示字符串的 String 类,也对类的使用有一个粗略的了解,作为下一讲详细学习类的准备。需要指出的是,C 语言里的其他两种导出类型:结构体和共用体,在 Java 里已经被取消。下面,我们来学习数组和字符串。 4.2 数组的声明、创建和初始化 1. 数组的声明: 声明数组,包括声明数组的名字、数组包含的元素的数据类型。数

26、组可以一维的,也可以是二维或者多维的。举例来说:一个班有 50 个人,我们用一个长度为 50 的一维数组表示;如果要表示每个同学的五门高考成绩,那我们就需要用一个第一维长度为 50,第二维长度为 5 的二维数组。声明一维数组有两种格式: 数组元素类型 数组名 ; 数组元素类型 数组名; 比如:int student ; 或者: int student;类似地,声明二维数组有两种格式: 数组元素类型 数组名 ; 数组元素类型 数组名; 比如:int score ; 或者: int score;下面,我们主要以一维数组为例,学习数组的用法。2. 数组的创建: 声明数组仅仅给出了数组名字和元素的数据

27、类型,想要真正使用数组还必须为数组分配内存空间,也就是创建数组。在为数组分配内存空间时必须指明数组的长度。为数组分配内存空间的格式如下: 数组名 = new 数组元素的类型 数组的长度 例如:student = new int 50;score = new int 50 4;事实上,数组的声明和创建可以一起完成,比如:int student = new int 50;一旦数组被创建,数组的大小就不能改变。如果在程序运行期间,需要对数组的大小进行扩展,通常需要使用另一种数据对象:Vector。有关向量和扩展数组,有兴趣的同学可以在 Java 帮助中查找 Vector 的帮助。student 数组

28、创建之后,其内存模式如图:3. 数组的初始化: 创建数组后,系统会给每个元素一个默认的值,比如,整型数组的默认值是 0。我们也可以在声明数组的同时给数组一个初始值,我们称之为初始化。int num = 2, 4, 4, 1。这个初始化动作相当于:int num = new int 4;num 0=2; num 1=5; num 2=4; num 3=1;4.3 数组的使用 1. 数组的访问 前面我们已经看到,数组通过下标访问数组元素,比如:student 0 =70,student 49=87等。注意,下标从 0 开始,如果数组长度为 n,则下标是 0 n -1,如果使用 n 或者以上的元素,

29、将会发生数组溢出异常。比如:student 50 = 79,虽然编译的时候能通过,程序运行时将中止。二维数组的使用与之类似。2. 数组的复制 可以把一个数组变量复制给另一个,但两个变量引用的都会是同一个内存空间,所以改变一个数组的值,另一个数组变量的值也会改变。比如:int num = 2, 3, 5, 1;int numcopy =num;numcopy2 =5;现在,num2也变成了 5。如果真的想把一个数组的所有值都复制到另一个数组中,就需要采用 System . arrarycopy()方法:System . arrarycopy ( num, 0, numcopy, 0, 4)。这样

30、,num 和 numcopy 将指向不同的内存空间,numcopy 的值的改变,不会在影响 num。有兴趣的同学可以参考帮助文件。 4.4 字符串 前面已经说过:Java 使用 java.lang 包中的 String 类来表示字符串,尽管我们可以用字符数组来实现类似的功能。关于类的详细知识,我们下一讲将会讲到。由于类是面向对象编程语言最核心的概念,学习起来有些难度,我们在这里先通过 String 类对类的概念有一个粗略的了解,以使我们下面的学习更顺利一些。字符串,顾名思义,就是一串字符。比如:“student100“, “China“等。用一对双引号表示字符串。我们也可以把字符串看成字符数组

31、(事实上,C 就是把字符串当作字符数组来处理),但是把它视为类更方便一些。为什么?我们下面马上会看到。 字符串的声明、创建 字符串声明的格式是: String 字符串名比如:String s;字符串的创建格式:字符串名 = new String(字符串常量)或者 字符串名=字符串常量比如:s = new String ( “student“ ); 或者:s = “student“;声明和创建可以一步完成,比如:String s = new String ( “student“ ); 或者 String s = “student“;大家是不是觉得:String 这个类的声明,跟前面我们学过的基本

32、数据类型的声明的格式是一样的,比如:整型的声明:int n; 比较一下: String s; 事实上,类型 变量名这种格式是类的声明的一般格式,你可以把类当作基本数据类型一样来声明。另一方面,变量名= new 类名(参数列表);比如 s = new String ( “student“ );这是类的一般创建格式。 4.5 与字符串有关的操作 字符串的长度 length()方法:String s = “student“;int len=s.length();需要指出的是,s.length()这种调用方法,是面向对象编程语言特有的方法,我们把 s 叫做String 类的对象,就像 int n,我们

33、把 n 叫做整型变量一样;把 length()叫做 String 类的方法。下面我们可以看到,String 类的方法,都是通过 对象名.方法名()这种方式调用的。 取子串 String s = “I am a Chinese“;String subs;subs = s.substring (7); 字符串的比较 String tom = “my name is tom“;String jane = “my name is jane“;tom.equals(jane);返回 false。表示不相等pareTo(jane),返回一个负整数,因为第一个不相等的字符 t 和 j 相比,t在 j 的后面

34、;如果返回 0,表示相等;如果返回一个正整数,表示 tom 和 jane 第一个不相等的字符,tom 的在 jane 的前面。注意,不要用 tom= =jane 判断两个字符串是否相等,因为这样的话比较的是它们在内存中的地址是否相同,而不是我们所希望的比较字符串的内容是否相同。 字符串连接 String s = “ I am“;String s2 = “a Chinese“;String s4, s4;s4 = s+s2;s4=s + 24;整数型 24 将会自动转换为字符串。 字符串检索 字符串检索是指判断一个字符串是否包含某一个字符或者子字符串,如果有,返回它的位置,如果没有,返回一个负数

35、。String s = “I am a Chinese“;s.indexOf(“Chinese“ ), 返回 7;s.indexOf(a); 返回 2; 字符串转换为数值 如果一个字符串是一串数字,可以把它转换成相应的数值。o 转换为整型: String s = “21“;int x; x= Integer.parseInt (s);o 转换为浮点型 String s = “22.124“;float f; f = Float.valueOf(s).floatValue();o 当然,也可以把整数或者浮点数转换为字符串类型: String s;int n = 24;s = String.val

36、ueOf ( n );o 其他 与字符串有关的方法还有很多,我们不可能一一讲解。前面我们说过,我们要学会使用帮助。我们查找关于 String 的帮助,就可以看到,有关于 String 的所有方法的详细讲解。希望同学们可以学会使用帮助。 小结 这一讲,我们学习了数组的一些知识,并通过 String 类,一方面学习了字符串的使用,另一方面先对类的一些概念和用法,比如类的方法调用,有了一些粗略的了解。数组是我们经常要用到的数据结构,它是一种导出型的数据结构,对我们处理大规模的数据,有很大帮助。前面我们说,用 String 类表示字符串,比我们自己用字符数组来做更方便。因为 String 类为我们提供

37、了很多现成的可以直接使用的对字符串的操作方法。比如 substring( ),equals( )等方法。如果我们要用字符数组来完成与 substring 类似的功能,就只能自己把子串的每一个字符复制到另外一个字符数组中;与 equals()类似的功能,就只能自己一个一个字符地检查两个字符船是否相等。提供对自己的成员数据的完整的操作方法,也就是把数据和对数据的操作封装起来,是类的最大的好处。如果现在还不能理解这句话,不要紧,我们现在只需要知道:使用 String 类这种方法,非常方便。 习题 1. 声明一个数组,存一个学生的五门成绩。求该学生总成绩、平均成绩。 2. 将一个数组中的值按逆序重新存

38、放,例如,原来顺序为:9,5,7,4,8,要求改为:8,4,7,5,9。 3. 编写一个应用程序,连接两个字符串:“I am”和“a student”,并求出第 7 个字符是什么?找出“am”在该字符串中的位置,最后把所有字符都变成大写字符。 4. 统计一个字符串中字母、空格和数字的个数。 第五讲:类、对象和接口(1)5.1 什么是类上一讲我们使用了一个 String 类,我们说过:类把一类对象的成员函数和方法封装起来,使用起来很方便。那么,什么是类呢?要理解类,我们先来了解“对象“的概念,因为类就是用来创建对象的模板,它包含了被创建的对象的状态描述和方法定义。我们可以把长虹牌电视机看成是一个

39、对象。我们不必关心电视机里面的集成电路是怎样的,也不用关心电视机的显像管的工作原理,我们只需要知道电视机的遥控器上提供了对这台电视机的什么操作,比如选台、调节色彩、声音等。这样,我们虽然不知道电视机内部是怎么工作的,但我们可以使用这台电视机。听起来这跟编程没什么关系,但面向对象的思想正是与它类似:对象,对外只提供操作该对象的方法,内部的实现对外是隐藏的。我们把这种技术叫做数据隐藏。这样,程序员不必了解一个对象内部是怎么实现的,但可以很方便地使用这个对象。类,就是对象的模板。比如,电视机是一个类,而某一台电视机就是这个类的一个对象,也叫一个实例。我们前面使用的 String 类,虽然我们不知道,

40、也不必知道里面的实现细节,但我们只要知道他的操作方法,就可以很方便地使用它。这样,对别的程序员编写的程序,我们可以很方便地拿来使用,从而提高软件的复用程度和编程的效率。比如,我们构造一个类:TV,然后对外提供一些对它的操作方法,选台 selectChannel( )等。然后用这个类创建一个对象:TV kongKai;然后就可以这样操作这台电视: kongKai.selectChannel。类的另一个特性,也是它的一个大好处,是继承。继承的概念类似于这样一种表达:电视是一种电器。如果我们有一个电器类,那么,我们说,电视机类继承了电器类。继承有什么好处呢?设想电器类有一些属性,比如工作电压,功率,

41、有些一些方法,比如:打开 open( ), 关闭:close( )。这时候,如果电视类继承了电器类,电视类就自动拥有了电器类的这些属性和方法,而不用再自己重写一遍(当然,如果想重写,也可以,我们把这种技术叫做重载)。这样做有什么好处呢?最明显的好处就是减轻编程的工作量。假设我们有令一个类:VCD 类,它也继承了电器类,对于打开关闭等,同样不用重新编写。好了,既然面向对象的方法有这么多好处,我们下面就来学习类和对象的一些基本知识。 5.2 一个例子 下面是一个完整的类的例子,我们用这个例子详细讲解类的一些用法。class Employee private String name;private

42、double salary;private int hireYear;private static String company=new String(“IBM“);public Employee(String n, double s, int d) name = n;salary = s;hireYear = d;public void print() System.out.println(name + “ “ + salary + “ “ + getHireYear() + “ “+ getCompany();return;public void raiseSalary(double by

43、Percent) salary *= 1 + byPercent / 100;public void raiseSalary(int byAbsolute) salary +=byAbsolute;public int getHireYear() return hireYear;public static String getCompany()return company;为了测试这个类,我们写了一个测试程序:package teach4;public class EmployeeTest public static void main(String args) Employee emp =

44、new Employee (“Tony Tester“, 38000, 1990);emp.print();emp.raiseSalary(5.0D);emp.print();int raise=1000;emp.raiseSalary(raise);emp.print();5.3 类的结构 class Employee 表示一个类的声明,其中,class 是关键字,Employee 是类名。在一对大括号中的内容,我们叫做类体,是这个类的实现部分。前面我们说过,类把数据和在数据上的操作方法封装起来,所以,类体中有两部分,一部分是数据,另一部分是方法。数据部分是:private String n

45、ame;private double salary;private int hireDay;分别是 String 类型的 name,代表该员工的姓名,double 类型的 salary,代表该员工的薪水;int 类型的 hireDay,代表该员工的雇佣年份。private 是一个关键字,是私有的意思,表明这些数据,只能被类里面的方法访问,外部程序是不能直接访问这些数据的。这正是类的一个好处:对外隐藏数据。我们建议,始终保持数据的私用,也就是始终用 private 来修饰数据,来是我们的程序更安全。这个类的方法部分是:public Employee(String n, double s, Day

46、 d)public void print()public void raiseSalary(double byPercent)public void raiseSalary(int byAbsolute)public int getHireYear()public static String getCompany()所谓方法,就是对数据的操作,有过 C 编程时间的同学,可以把它理解为函数,只是这些函数是放在类里并对类的数据进行操作的。比如这个方法:public void raiseSalary(double byPercent)就是对数据 salary 的操作。public 是一个关键字,是公

47、有的意思,表明该方法可以用 对象名.方法名 的方式调用。比如我们的测试程序中: emp.raiseSalary(5.0D),就是对这个方法的调用。否则,如果是 private,该方法就只能被类里的方法调用,像 emp.raiseSalary(5.0D)这种调用是非法的。void 表明方法的返回类型为空,也就是什么都不返回。public int getHireYear()这个方法的返回类型是 int。一般来说,返回类型这部分是不能缺少的,即使方法什么都不返回,也要用一个void 关键字修饰。有一个例外:构造函数。我们后面会讲到。raiseSalary(double byPercent)是方法名,

48、前面我们已经说过方法的命名规则,第一个单词小写,以后没个单词首字母大写。这样可以增加可读性,根据 raiseSalary 这个名字就可以知道这个方法的功能是涨工资。括号里是参数列表,类似于我们前面学过的变量的声明。如果有多个参数,用逗号隔开,比如 Employee(String n, double s, int d)。方法的一对大括号里是方法的实现,就是我们前面学过的语句的组合。比如 print( )方法,是打印出该员工的姓名工资等信息;raiseSalary( )方法是根据参数,把员工工资涨相应的比例。注意,如果方法有返回类型且不为 void,那么在方法的实现中必须有 return 语句,返回相应的类型。比如hireYear( )方法,就有 return 子句。相反,如果返回类型是 void,那么不能返回任何数据,但可以是一个 return 语句,后面不带返回值,比如 print( )方法里就有一个空的 return 语句。 5.4 构造方法 我们注意到,有一个方法是与类名同名的,而且没有返回类型,比如这个例子中的 public Employee(String n, double s, int d),我们把它叫做构造方法。构造方法是做什么用的呢?构造方法是在声明对象的时候,自动调用的方法,其作用是为对象的数据做一些

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 专业基础教材

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报