1、Java 面向对象目录第一章 面向对象原理与实现 .31.1 软件危机 31.2 软件设计方法 31.3 面向对象系统 41.4 Java 语言简介 5第二章 Java 的实现基础 82.1 Java 的标识符 82.2 Java 关键字 .92.3 数据类型 102.4 Java 的变量 .102.5 运算符 .112.6 编码约定 .132.7 流程控制 14第三章 类与对象(一) 183.1 类的创建 183.2 方法重载 193.3 类的构造函数 .193.4 继承 203.5 方法的覆盖(重写) .22包 .233.7 访问修饰符 243.8 Object 类 .243.9 Stri
2、ng 类 25第四章 类与对象(二) 294.1 类的静态成员 294.2 Math 类 .314.3 this 关键字 324.4 final 关键字 .344.5 抽象类的概念与实现 .344.6 接口的概念与实现 .364.7 封装类 374.8 内部类的实现 39第五章 异常与垃圾收集 .425.1 Java 异常处理机制 42第六章 Java 集合框架 536.1 集合框架的体系结构 536.2 集合类和接口 54第七章 Java 流类控制 627.1 File 类 627.2 java.io 包 647.3 字节输入/输出流 .64厚普教育 目录7.4 InputStream 体系
3、结构 .647.5 OutputStream 体系结构 667.6 字符输入/输出流 .707.7 Reader 体系结构 717.8 Writer 体系结构 72第八章 Swing.788.1 简介 788.2 Swing 结构 798.3 Swing 组件 80第九章 GUI 事件处理 .1159.1 分级模型 1159.2 委托模型 115第十章 Applet12810.1 Java Applet 基础 .128第十一章 Java 线程应用 13911.1 线程的概念 13911.2 创建线程 14311.3 线程优先级 145第十二章 Java 网络编程 15412.1 网络相关知识
4、15412.2 包 15712.3 Web 相关类 161Java 面向对象第一章 面向对象原理与实现本章目标:了解软件危机了解面向过程的软件设计方法了解面向对象的软件设计方法熟悉面向对象系统的基本概念初步了解 Java 语言本章重点:面向对象思想的了解本章难点:面向对象思想的理解在结束了 C 语言的学习,我们对面向过程的编程有了一定了解,现在,本章带领我们进入另一种不同的编程世界面向对象编程,把这种思想理解透彻对今后的学习至关重要。1.1 软件危机 什么是软件危机落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。早期出现的软件危机主要
5、表现在: 软件开发费用和进度失控。费用超支、进度拖延的情况屡屡发生。有时为了赶进度或压成本不得不采取一些权宜之计,这样又往往严重损害了软件产品的质量。 软件的可靠性差。尽管耗费了大量的人力物力,而系统的正确性却越来越难以保证,出错率大大增加,由于软件错误而造成的损失十分惊人。 生产出来的软件难以维护。很多程序缺乏相应的文档资料,程序中的错误难以定位,难以改正,有时改正了已有的错误又引入新的错误。随着软件的社会拥有量越来越大,维护占用了大量人力、物力和财力。进入 80 年代以来,尽管软件工程研究与实践取得了可喜的成就,软件技术水平有了长足的进展,但是软件生产水平依然远远落后于硬件生产水平的发展速
6、度。软件危机不仅没有消失,还有加剧之势。1.2 软件设计方法 1.2.1 面向过程的软件设计方法为了摆脱软件危机,必须按照工程化的原则和方法来组织软件开发工作,二十世纪七十年代流行的面向过程的软件设计方法,目的主要是解决面向过程语言系统的设计问题。它主要强调程序的模块化和自顶向下的功能分解在涉及大量计算的算法类问题上,从算法的角度揭示事物的特点,面向过程的分割是合适的。厚普教育 目录特点:1. 数据与功能分离2. 基于模块的设计方式3. 自顶向下的设计方式然而,现在的软件应用涉及社会生活的方方面面,面对变动的现实世界,面向过程的设计方法暴露出越来越多的不足,例如:限制了软件的可重用性,降低了开
7、发效率,导致最后开发出来的系统难以维护;软件修改困难;很难保持数据与功能的相容。为此,面向对象的设计方法应运而生。 1.2.2 面向对象的软件设计方法面向对象技术是目前主流的软件开发方法,它解决了面向过程开发中的很多不足与缺陷,它的诞生改变了整个软件世界,Java 就是一种典型的面向对象编程语言。面向对象的软件设计方法是一种非常强有力的软件开发方法特点: 它把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。 它将数据和对数据的操作作为一个相互依赖、不可分割的整体,采用数据抽象和信息隐蔽技术,力图使对现实世界问题的求解简单化优点: 把软件看成对象的集合,
8、这更贴近人类的自然思维方式。 软件需求的变动往往是功能的变动,而功能的执行者对象,一般不会有大的变化。这使得按照对象设计出来的系统结构比较稳定。 支持封装,抽象,继承和多态,提高了软件的可重用性,可维护性和可扩展性 它符合人们的思维习惯,同时有助于控制软件的复杂性,提高软件的生产效率,从而得到了广泛的应用 面向对象的基本理解“万物皆对象” ,现实中所有的事物都是对象,每个对象都有其自身的特征,并且表现出一定的行为。例:一个公交车可以看作一个对象,它有轮胎,有挡风镜,这是它的特征(也称属性) 。它能跑,能发出喇叭声,这是它的行为;同样,右边的人也是一个对象,他也有他对应的特征和行为。Java 面
9、向对象1.3 面向对象系统如果一个软件系统是使用面向对象技术来设计和实现的,我们认为这个软件系统是面向对象的,面向对象系统具有重用性强,扩展性强,可维护性强等优点。现在大部分软件系统都是面向对象系统。1.4 Java 语言简介 1.4.1 什么是 Java 语言Java 从 1995 年的暑假开始在计算机业界就受到了高度注意,特别是在 Internet 和多 媒体(Multimedia)相关产品类方面。Java 为何有如此这么大的魅力?人作如此的比喻: Java 在全球资讯网(World Wide Web, WWW)地位就如同电子表格(Spreadsheet)与个人计 算机(PC)的关系。那
10、Java 究竟有那些特色呢?Java 是一种软件技术 是一种由美国 SUN 计算机公司(Sun Microsystems, Inc.)所研究而成的语言 是一种为 Internet 发展的计算机语言 是一种使网页(Web Page)产生生动活泼画面的语言 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言是一种语言,用以产生小应用程序(Applet(s) 是一种简化的 C+语言 是一种安全的语言,具有阻绝计算机病毒传输的功能是一种将安全性(Security)列为第一优先考虑的语言 是一种使用者不需花费很多时间学习的语言 是一种突破用户端机器环境和 CPU 结
11、构的语言 是一种写一次即可在任何机器上执行的语言是有史以来第一套允许使用者将应用程序(Applications) 通过 Internet 从远端的服务器(Remote Server)传输到本地端的机器上并执行的语言 是一种应用程序提供者不需要知道使用者的计算机硬件( 如:Sun, Intel, 或 MAC 等) 与软件(如:SW- UNIX, MAC O/S, Windows, 或 NT 等)环境的语言。是一种面向对象的语言。 1.4.2 Java 语言的基本特点 简单 面向对象 分布式 健壮性 安全 体系结构中立 可移植性 解释执行 高性能 多线程 动态 1.4.3 Java 虚拟机厚普教育
12、 目录Java 虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。 Java 虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java 语言的一个非常重要的特点就是与平台的无关性。而使用 Java 虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入 Java 语言虚拟机后,Java 语言 在不同平台上运行时不需要重新编译。Java 语言使用模式 Java 虚拟机屏蔽了与具体平台相关的信息,使得 Java 语言编译程序只需生成在 Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行
13、。Java 虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。JVM 扮演的角色(示意图) 1.4.4 一个基本的 Java 应用程序/ /我们的第一个 Java 应用程序 / public class HelloWorld public static void main (String args) System.out.println (“Hello World!“); 程序输出“Hello World!”Java 面向对象本章练习一、解答题1阐述你对面向对象的理解2简单概述 Java 语言的特性与优点二、动手1编写自己的第一个 Java 程序厚普教育 第十章 用 C# 语言实现
14、常用算法第二章 Java 的实现基础本章目标:掌握 Java 的编程基础 标识符 Java 的关键字 数据类型 Java 的变量 运算符 表达式 编码约定 流程控制本章重点:均为必须掌握内容本章难点:基本概念的理解上一章我们进入了面向对象的世界,并且简单的了解了 Java 语言,本章将带领我们真正的进入 Java世界,让我们一起来学习 Java 这门经典的语言。2.1 Java 的标识符Java 语言中,为各种变量、方法和类等起的名字称为标识符Java 标识符的命名规则: 不能以数字开头 应以字母、下划线、美元符开头,后跟字母、下划线、美元符或数字 Java 标识符大小写敏感,长度无限制 标识
15、符不能是关键字,但是它可包含一个关键字作为它的名字的一部分 例:public class MyClassprivate void $myMethod()private String _strName=”xiaoli”;以上带颜色的均为正确的标识符,来看看下面错误的标识符public class 34MyClassprivate void new()注意,标识符的命名关系到你养成良好的编码风格,一般类的命名首字母大写,遇到第二个单词时首字母大写加以区分,如:private class MyFirstClass;方法与变量的命名首字母小写,遇到第二个单词时首字母大写加以区分,如:private v
16、oid myFirstMethod()、private int myAge=24。这些虽然不是强制性规定,但养成好的编码风格是很重要的!2.2 Java 关键字在搜索引擎行业,所谓关键字,英文是 keyword,就是希望访问者了解的产品、服务或者公司等内容名称的用语。譬如,有一个客户想在网上买鲜花,他将会在搜索框中输入关键字“鲜花”,寻找相关信息。简单的说,关键字就是用户在使用搜索引擎时输入的、能够最大程度概括用户所要查找的信息内容的字或者词,是信息的概括化和集中化。比如上面例子中的“鲜花”。在搜索引擎优化 SEO 行业谈到的关键字,往往是指网页的核心和主要内容。对于搜索引擎来说,你的网页主要
17、是讲关于哪方面的内容,那个方面就可以归结出一个(更多时候会是多个)关键字。补充一点:“请输入关键字” 这个词语许多朋友经常看到。这个词语是一些网站上面的搜索框中看到的。意思是提示你输入你想要搜索的信息的关键字。电脑语言用语关键字是用来标识文件中各个记录的特定数据项目的值。关键字是电脑语言里事先定义的,有特别意义的标识符 ,有时又叫保留字(有区别)在 Java 中关键字都是小写字母,列举如下:abstract continue for new switch default package synchronized boolean do if private this break double i
18、mplements protected throw byte else import public throws case instanceof return transient catch extends int short try char final interface static void class finally long volatile float native super while 注:true false null 不是关键字 保留字const,goto 厚普教育 第十章 用 C# 语言实现常用算法可以认为 Java 中的保留字是为 Java 预留的关键字,但还不是关键
19、字。2.3 数据类型在 Java 中有以下的数据类型:基本类型类型 关键字 值字节 byte 8 位带符号整数短整型 short 16 位带符号整数整型 int 32 位带符号整数长整型 long 64 位带符号整数单精度浮点数 float 32 位 IEEE 754 浮点数双精度浮点数 double 64 位 IEEE 754 浮点数字符 char 16 位 Unicode 字符布尔 boolean true、false类类型Button cmdOK=new Button(“确定”) ;Button.method接口类型implements KeyListenerKeyListener.me
20、thod数组类型String s=new String4;2.4 Java 的变量变量可以在程序块内的任何地方被声明,但是只有在他们被声明以后才是合法有效的。因此,如果你在一个方法的开始定义了一个变量,那么它对于在该方法以内的所有程序都是可用的。反之,如果你在一个程序块的末尾声明了一个变量,它就没有任何用处,因为没有程序会访问它。例如,下面这个程序段就是无效的,因为变量 count 在它被定义以前是不能被使用的。 count = 100; int count;另一个需要记住的重要之处是:变量在其作用域内被创建,离开其作用域时被撤消。这意味着一个变量一旦离开它的作用域,将不再保存它的值了。因此,
21、在一个方法内定义的变量在几次调用该方法之间将不再保存它们的值。同样,在块内定义的变量在离开该块时也将丢弃它的值。因此,一个变量的生存期就被限定在它的作用域中。如果一个声明定义包括一个初始化,那么每次进入声明它的程序块时,该变量都要被重新初始化变量定义格式类型名 变量名,;变量的赋值变量名=表达式;定义时赋值类型名 变量名=表达式,;2.5 运算符Java 的大多数运算符在形式上和功能上都与 C 和 C+的运算符非常类似,熟悉 C 和 C+的读者对此不会感到陌生。 1算术运算符 算术运算符包括通常的加(+)、减( 一)、乘(*)、除( )、取模(),完成整型或浮点型数据的算术运算。许多语言中的取
22、模运算只能用于整型数,Java 对此有所扩展,它允许对浮点数进行取模操作。此外,算术运算符还有“+”、 “一一” 两种,分别表示加 1 和减 1 操作。与 C+类似,“+i”和“i+” 的执行顺序稍有不同,前者在 i 使用之前加 1,后者先使用再加 1。 “-i”与“i-”的情况与此类似。 2关系运算符 关系运算符用来比较两个值,包括大于()、大于等于 (=)、小于(5)(对 unset 进行某种操作空串 unset 不能使用,因此不能访问 unset1ength(),但该 if()语句中的逻辑表达式是合法的且完全安全。这是因为第一个子表达式(unset!=nulI)结果为假,它马上导致整个表
23、达式的结果为假。所以case 结果 2:break;default:break;Java 的重复结构While 循环while (条件)Do while 循环do while (条件)for 循环for(x=0;x10;x+)break 和 continue 语句break 语句在循环中用于立即从当前循环终止控制。遇到 break 语句时,将跳出当前循环。厚普教育 第十章 用 C# 语言实现常用算法continue 语句则是从其调用处跳至循环的开始处。continue 语句之后的语句将不再执行。Java 的数组数组定义类型名 数组名;类型名 数组名;数组实例化数组名=new 类型名元素数;数组
24、元素引用数组名索引号数组定义并实例化类型名 数组名=new 类型名 元素数;类型名 数组名=;本章练习一、解答题1Java 标识符的命名规则有哪些?2Java 中有哪些数据类型?3在写 Java 代码时,应注意哪些东西?4Java 中常见的选择结构有哪些?二、动手1编写一个 Java 小程序,注意你的编码风格,在程序中用到选择结构和循环结构厚普教育 第十章 用 C# 语言实现常用算法第三章 类与对象(一)本章目标:掌握类的创建掌握方法重载掌握构造函数和初始化对象继承掌握方法覆盖掌握包的概念掌握访问修饰符Object 类String 类本章重点:均为必须掌握内容本章难点:基本概念的理解上一章我们
25、认识了 Java 中一些基本的概念与知识,本章我们将走进面向对象编成的核心思想与精粹。3.1 类的创建类 ( Class) 实 际 上 是 对 某 种 类 型 的 对 象 定 义 变 量 和 方 法 的 原 型 。 它 表 示 对 现 实 生 活 中 一 类 具 有共 同 特 征 的 事 物 的 抽 象 , 是 面 向 对 象 编 程 的 基 础 。类 是 对 某 个 对 象 的 定 义 。 它 包 含 有 关 对 象 动 作 方 式 的 信 息 , 包 括 它 的 名 称 、 方 法 、 属 性 和 事 件 。实 际 上 它 本 身 并 不 是 对 象 , 因 为 它 不 存 在 于 内 存
26、 中 。 当 引 用 类 的 代 码 运 行 时 , 类 的 一 个 新 的 实 例 , 即对 象 , 就 在 内 存 中 创 建 了 。 虽 然 只 有 一 个 类 , 但 能 从 这 个 类 在 内 存 中 创 建 多 个 相 同 类 型 的 对 象 。可 以 把 类 看 作 “理 论 上 ”的 对 象 , 也 就 是 说 , 它 为 对 象 提 供 蓝 图 , 但 在 内 存 中 并 不 存 在 。 从 这 个 蓝图 可 以 创 建 任 何 数 量 的 对 象 。 从 类 创 建 的 所 有 对 象 都 有 相 同 的 成 员 : 属 性 、 方 法 和 事 件 。 但 是 , 每 个对
27、 象 都 象 一 个 独 立 的 实 体 一 样 动 作 。 例 如 , 一 个 对 象 的 属 性 可 以 设 置 成 与 同 类 型 的 其 他 对 象 不 同 的 值 。类 是 创 建 对 象 的 模 版 。类的逻辑结构类名类的成员变量类的成员方法类的代码结构类修饰符 class 类名成员修饰符 数据类型 成员变量名;成员修饰符 返回类型 方法名(参数表)类的成员方法用于实现类的功能有 main 方法的类可被执行public static void main(String args)3.2 方法重载 方法重载是 Java 实现面向对象的多态性机制的一种方式。 同一个类中多个方法有相同的名
28、字,不同的参数列表,这种情况称为方法重载 返回类型不同并不足以构成方法重载。 当重载方法被调用时,编译器根据参数的类型和数量来确定实际调用哪个重载方法的版本。3.3 类的构造函数 构造函数名称与类名称相同 构造函数没有返回类型 其任务是在创建对象时初始化其内部状态厚普教育 第十章 用 C# 语言实现常用算法 如果没有构造方法,编译器自动提供一个空的构造方法重载的构造函数 Java 为每一个类自动提供缺省构造函数 缺省构造函数将成员变量的值初始化为缺省值 一旦创建了自己的构造函数,缺省的构造函数将不复存在。 重载构造函数提供了一组创建对象的方式,可以根据需要决定是否带初始参数。对象的初始化对象的
29、声明类名 对象名;这样只是声明出了一个对象,但是并没有对它实例化,以下是对一个对象进行实例化:对象名=new 类的构造函数;例:FirstClass first; /声明对象first=new FirstClass(); /实例化对象在声明时并实例化:类名 对象名=new 类的构造函数例:FirstClass first=new FirstClass(); /声明并实例化对象这里的构造函数可以是类的构造器中的任何一个构造函数,但是必须是存在的。3.4 继承在 java 中,当一个类通过 extends 关键字从另一个已有的类派生而出时,我们就称这个新有的类继承于那个已有的类 , 这个时候我们把
30、那个已有的类叫做超类(或父类) ,把那个新有的类叫做派生类(或子类) 。继承是 java 中非常重要的一种思想与技术。Java 中的继承符合下列规则:继承是可传递的如果 C 从 B 中派生,B 又从 A 中派生,那么 C 不仅继承了 B 中声明的成员,同样也继承了 A 中的成员Object 类作为所有类的基类派生类应当是对基类的扩展派生类可以添加新的成员但不能除去已经继承的成员的定义构造函数不能被继承除此以外的其它成员,不论对它们定义了怎样的访问方式,都能被继承基类中成员的访问方式只能决定派生类能否访问它们派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员但这并不因为这派生类
31、删除了这些成员,只是不能再通过派生类访问这些成员派生类能够重写基类成员,从而实现类展示多态性Java 中派生类只能从一个类中继承(单一继承)类的继承 当一个新类包含另一个类的成员变量和方法时,可以不重新编写相应代码,只要声明其继承关系 被包含的类叫超类,包含超类的类叫子类 子类可直接拥有超类的成员变量和方法 子类可定义自己的成员变量和方法class 子类名 extends 超类名 子类可以实例化父类,但父类不能实例化子类。Java 的单一继承性 在 Java 中,一个超类可以有多个子类 一个子类只能有一个超类 子类可访问超类的成员变量和方法(不是超类的所有变量和方法,由访问修饰符决定) 超类却
32、不能访问子类新增的变量和方法super 关键字 super 关键字用来解决如何直接访问或初始化从父类继承来的属性。 super 有两种通用形式:调用父类的构造函数、用来访问被子类的成员覆盖的父类成员。 它用在对象的构造函数中,将构造细节通过继承链往上传递。 super()必须是在子类构造函数中的第一个执行语句。厚普教育 第十章 用 C# 语言实现常用算法Instanceof 关键字 Instanceof 为对象引用运算符,在运算符左侧的对象是右侧类的实例时,它将返回 true. 使用此运算符可以确定对象是否属于一个特定的类3.5 方法的覆盖 (重写) 在类层次结构中,如果子类中的一个方法与父类
33、中的方法有相同的方法名并具有相同数量和类型的参数列表,这种情况称为方法覆盖。也称为方法的重写。 当一个覆盖方法通过父类引用被调用,Java 根据当前被引用对象的类型来决定执行哪个版本的方法。 可以通过 super 关键字调用直属父类中被覆盖的方法版本。 静态方法不能被覆盖为非静态方法 方法覆盖是 Java 实现多态性机制的另一种方式。对比 Java 语言中的覆盖和重载 override 可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。
34、除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点: 1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;2、覆盖的方法的返回值必须和被覆盖的方法的返回一致; 3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;4、被覆盖的方法不能为 private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。overload 对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM 就会根据不同的参数样式,来选择合适的方法执行。在使
35、用重载要注意以下的几点: 1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是 fun(int,float),但是不能为 fun(int,int)) ;2、不能通过访问权限、返回类型、抛出的异常进行重载; 3、方法的异常类型和数目不会对重载造成影响;包包的概念 在 Java 中,能被复用的代码被组织到一起,称为“包 ”。 包是类、接口或其他包的集合。 包实际上是一种把类组织到一起的结构。接口包类其他的包简单一点理解,包的实质其实就是文件夹。包的用途 包允许您将包含类代码的文件组织起来,易于查找和使用适
36、当的类。 包不止是包含类和接口,还能够包含其他包。形成层次的包空间。 它有助于避免命名冲突。当您使用很多类时,确保类和方法名称的唯一性是非常困难的。包能够形成层次命名空间,缩小了名称冲突的范围,易于管理名称。厚普教育 第十章 用 C# 语言实现常用算法3.7 访问修饰符public 修饰符:公有的,对任何成员都是可见的,无论是不是在同一包(即文件夹) 里面的。protected 修饰符:继承访问修饰符,对同一包里面的所有成员可见,当在不同包时,对其子类成员可见,非子类成员不可见。缺省修饰符(即 friendly):java 中的默认修饰符,不写明修饰符时就默认为缺省修饰符,该修饰符为包保护修饰
37、符,即对同一包里的成员都可见,包以外的成员均不可见。private 修饰符私有修饰符,该修饰符为类保护修饰符,即对同一类的成员都可见,类以外的任何成员均不可见。public protected 缺省 private同一类中成员 Yes Yes Yes Yes同一文件夹中其他类 Yes Yes Yes 不同文件夹的子类 Yes Yes 不同文件夹中其他类 Yes 3.8 Object 类 Object 类是类体系结构的根 Java 系统中的每个类都是 Object 类直接或间接的子类 Object 类包括在 java.lang 包中 此类定义了所有对象都具备的基本状态和行为 可以用类型为 Obj
38、ect 的变量来引用任意类型的对象类都派生于 Object 类 。实际上,如果在定义类时没有指定基类,编译器就会自动假定这个类派生于 Object。其重要性在于,除了自己定义的方法和属性外,还可以访问为 Object 定义的许多公共或受保护的成员方法。这些方法可以用于自己定义的所有其他类中。toString()方法 toString 用于返回对象的字符串表示。 建议所有子类都覆盖此方法。 使用“+”运算符将对象同一个字符串连接,Java 编译器会自动调用 toString 方法,获取对象的字符串表现形式。例: Derived d = new Derived();System.out.print
39、ln(“Derived 的 toString() : “ + d);自动调用d.toString 方法,获取对象的字符串表示形式厚普教育 第十章 用 C# 语言实现常用算法3.9 String 类String 类表示字符串。 在 Java 程序中所有的字符串常量,如 “abc“,都被实现为这个类的实例。字符串是常量;他们的值在生成后不能改变。字符串缓冲区支持可变的字符串。 因为字符串对象是不可变的,所以它们可以被共享。 例如: String str = “abc“;等价于: char data = a, b, c;String str = new String(data);下面是一些关于如何使
40、用字符串的更多的示例: System.out.println(“abc“);String cde = “cde“;System.out.println(“abc“ + cde);String c = “abc“.substring(2,3);String d = cde.substring(1, 2);String 类包括检查字符串序列中单个字符的方法,这些方法用于比较字符串、查找字符串、抽取子字符串、生成一个字符串拷贝和把所有字符都转换为大写或小写。 Java 语言提供对字符串连接操作符 ( + )和其它字符串对象相互转换的特殊支持。 字符串连结是通过 StringBuffer 类和它的 a
41、ppend 方法实现的。 字符串转换是通过 toString 方法实现的,该方法由 Object 定义并且被 Java 中的所有类继承。 String 类方法 charAt() : 返回字符串中某个特定位置的字符 indexOf() :返回字符串中某个特定字符或子字符串首次出现的索引 toUpperCase() : 将字符串内的所有字符从小写改为大写 toLowerCase() : 将字符串内的所有字符从大写改为小写 substring() : 返回子串字符串 创建一个 String 类的实例: String strName1 = “Humpty dumpty“; /字符串字面量 String
42、 strName2 = new String(“Egg“); 两个或多个字符串可以用“+”运算符合并起来。例如: strName3 = strName1+ “ is the name of an “ + strName2; 字符串的长度可以通过 String 类中的函数计算。例如: int numLength = strName2.length(); 也可将数字添加到字符串类型中。例如: String strVar = “Mark“ + 1;字符串池 Java 程序可包含许多字符串字面量 “字符串池 “存放在程序中创建的所有字符串字面量 任何时候创建字符串字面量,系统都会搜索字符串池,查看是否
43、存在该字符串字面量。厚普教育 第十章 用 C# 语言实现常用算法本章练习一、解答题1. 简述 java 中方法的重载与重写,并说明他们的区别2. java 中有哪些访问修饰符?并说明它们的访问权限。3. 包是什么?它有什么作用?二、动手1. 写一个类,该类要求有 5 个构造函数,实例化该类的对象时要求用不同的构造函数实例化2. 写一个类,该类拥有自己的方法,然后写一个新类继承该类,并重写该类的方法。3. 写一个类,该类中定义自己的成员变量,分别用不同的访问修饰符定义,探究其不同的权限。第四章 类与对象(二)本章目标:掌握类的静态成员(static)掌握 Math 类掌握 this 关键字掌握
44、final 关键字掌握抽象类的概念与实现掌握接口的概念与实现掌握封装类掌握内部类的实现本章重点:均为必须掌握内容本章难点:概念的理解上一章我们探讨了 java 中的类与对象的一些知识,本章将带领我们进一步探究4.1 类的静态成员类的静态成员分为类的静态属性和静态方法,都是用关键字 static 表示。厚普教育 第十章 用 C# 语言实现常用算法类的静态变量:即在声明变量时将在其前面加上 static 关键字,例:public class MyClasspublic static int num=10;当一个变量被声明为静态的时候,调用时可以通过创建对象来调用,也可以直接通过类名来调用,例:My
45、Class.num;静 态 变 量 的 类 型 说 明 符 是 static。 静 态 变 量 当 然 是 属 于 静 态 存 储 方 式 , 但 是 属 于 静 态存 储 方 式 的 量 不 一 定 就 是 静 态 变 量 , 例 如 外 部 变 量 虽 属 于 静 态 存 储 方 式 , 但 不 一 定 是 静 态变 量 , 必 须 由 static 加 以 定 义 后 才 能 成 为 静 态 外 部 变 量 , 或 称 静 态 全 局 变 量 。 对 于 自 动变 量 , 它 属 于 动 态 存 储 方 式 。 但 是 也 可 以 用 static 定 义 它 为 静 态 自 动 变 量
46、 , 或 称 静 态 局 部变 量 , 从 而 成 为 静 态 存 储 方 式 。由 此 看 来 , 一 个 变 量 可 由 static 进 行 再 说 明 , 并 改 变 其 原 有 的 存 储 方 式 。1. 静 态 局 部 变 量在 局 部 变 量 的 说 明 前 再 加 上 static 说 明 符 就 构 成 静 态 局 部 变 量 。例 如 :static int a,b;static float array5=1,2,3,4,5; 静 态 局 部 变 量 属 于 静 态 存 储 方 式 , 它 具 有 以 下 特 点 :(1)静 态 局 部 变 量 在 函 数 内 定 义 ,
47、但 不 象 自 动 变 量 那 样 , 当 调 用 时 就 存 在 , 退 出 函 数 时 就 消失 。 静 态 局 部 变 量 始 终 存 在 着 , 也 就 是 说 它 的 生 存 期 为 整 个 源 程 序 。(2)静 态 局 部 变 量 的 生 存 期 虽 然 为 整 个 源 程 序 , 但 是 其 作 用 域 仍 与 自 动 变 量 相 同 , 即 只 能 在 定义 该 变 量 的 函 数 内 使 用 该 变 量 。 退 出 该 函 数 后 , 尽 管 该 变 量 还 继 续 存 在 , 但 不 能 使 用 它 。(3)允 许 对 构 造 类 静 态 局 部 量 赋 初 值 。 若 未 赋 以 初 值 , 则 由 系 统 自 动 赋 以 0 值 。(4)对 基 本 类 型 的 静 态 局 部 变 量 若 在 说 明 时 未 赋 以 初 值 , 则 系 统 自 动 赋 予 0 值 。 而 对 自 动变 量 不 赋 初 值 , 则 其 值 是 不 定 的 。 根 据 静 态 局 部 变 量 的 特