Microsoft Word - 第2章.doc

Similar documents
软件工程文档编制

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

Microsoft Word - 新1-12.doc

无类继承.key

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

模板

教案模板4-2

chap07.key

Microsoft Word - word模板-教师.doc

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点


使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

Microsoft Word - JCS5.doc

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

《大话设计模式》第一章

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

untitled

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

Guava学习之Resources

untitled

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

public class Phone { String brand; double price; void call(){ System.out.println("hi,how are you doing"); 案例 3-2 对象的创建及对象内存图 1 考核知识点对象的创建和引用 掌握创建对象的方式

電機工程系認可證照清單 /7/1

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

chp6.ppt

EJB-Programming-3.PDF

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

96年特種考試第一次司法人員考試試題解答

untitled

Chapter 9: Objects and Classes

EJB-Programming-4-cn.doc

1.5招募说明书(草案)

chp4

设计模式 Design Patterns

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

untitled

一、


Microsoft Word - ch04三校.doc

JavaIO.PDF

全国计算机技术与软件专业技术资格(水平)考试

使用MapReduce读取XML文件

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

OOP with Java 通知 Project 3: 4 月 19 日晚 9 点

拦截器(Interceptor)的学习

Microsoft Word - 第5章.doc

The Embedded computing platform

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

附录J:Eclipse教程

javaexample-02.pdf

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

c_cpp

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

untitled

Struts2自定义类型转换.doc

untitled

Microsoft Word - 第3章.doc

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检

untitled

第3章.doc

<4D F736F F D204A617661B3CCD0F2C9E8BCC6D3EBCAB5BCF9BDCCB3CCA3A8B5DA32B0E6A3A920B5DA35D5C22E646F63>

Strings

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

建模与图形思考

Chapter 9: Objects and Classes

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

Microsoft PowerPoint - 07 派生数据类型

0 本章掌握内容 C# 是一门语言 Framework 是运行库和类库 Visual Studio.NET 是开发环境 / 工具 VS2010 的使用 ( 程序 debug) C# 应用程序一般结构 控制台应用程序 窗体应用程序

untitled

Java

Microsoft Word - chap10.doc

untitled

chp5_1

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

工程合同管理 一 民事法律关系概述 1-1 主体 拥有权利承担义务的当事人 法律关系三要素 客体 当事人权利义务所指的对象 内容 具体的权利和义务的内容 图 1-1 法律关系的构成要素

Strings

Microsoft PowerPoint - L17_Inheritance_v4.pptx

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

3 下面是编写 WelcomeLogic 类, 依据 03 对项目结构的分析设计 中的分析, 编写其方法代码 这里要插一点, 因为三个方法要涉及打开三个窗体类, 而目前我们还没有建窗体类, 所以先建界面包和需要的窗体类 界面包起名 swing,3 个窗体类分别是 DisplayStudent Dis

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

新版 明解C++入門編

Microsoft Word - 01.DOC

<4D F736F F D20B5DA32D5C220C3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6B3F5B2BD2E646F6378>

Microsoft Word 軟體設計第二部份範例試題_C++_ _1_.doc

Transcription:

2 第第 2 章 学习第 1 章后, 读者已经对 Java 语言有了初步的了解, 本章将具体解析 Java 类的组成元素 任何一个 Java 类, 都有 5 种基本组成元素 : 属性 方法 构造方法 块和内部类 其中属性 方法 构造方法是使用最多的元素, 而块 内部类使用较少 本章将对各种元素进行学习 Java 类基本结构 2.1 类 类 Java 类的声明形式 访问权限修饰符 修饰符 class 类名 { 类体 类的声明形式及作用 要学习 Java 类的组成, 首先要了解 Java 类的声明形式 类的声明方式如下 ( 代表可选项 ): 访问权限修饰符 修饰符 class 类名 { 类体 假设有一个员工类, 类名为 Employee, 则声明形式如下 : public class Employee{ 其中 public 是访问权限修饰符,Employee 是类的名字 访问权限修饰符的相关知识将在后面章节详细学习 该类的类体目前为空, 类体往往包括属性 方法 构造方法 块 内部类等元素, 下面将详细学习 008

Java 语言中的标识符有哪些规则? 标识符可以由字母 数字 下画线 $ 符组成, 但是不能以数字开头 类名的首字母要大写, 属性 方法名首字母小写, 第二个单词的首字母大写 标识符中可以包含关键字, 但是不能直接使用关键字 如类名 Employee 方法名 getname 都是合法且规范的标识符 而 1test class 都是不合法的标识符 2.2 属性 属性的声明形式及作用 类是对象的模板, 对象都会有不同的属性, 所以类里应该声明该类所具有的属性 属性即对象的数据, 如员工的姓名 薪水 数量, 就是员工类的属性 属性的声明方式如下 ( 代表可选项 ): 访问权限修饰符 修饰符 数据类型属性名 = 初值 ; 在 Employee 类中声明姓名 薪水 数量 3 个属性, 代码如下 : private String name; private double salary; private static int count=0; 其中,private 是访问权限修饰符的一种, 表示私有权限 ;static 是修饰符的一种, 表示静态变量, 二者都不是必须使用 String double int 均为数据类型,name salary count 均为属性名称 其中 count 的初始值为 0 权限修饰符 修饰符 数据类型, 均在下面章节详细展开 009

2.3 方法 2.3.1 方法的声明形式 方法的声明形式及作用 对象除了具有属性外, 还有自己的行为, 即方法 所以类里除了要声明属性外, 还要声明类的所有方法 如员工对象可以修改姓名 修改薪水 查看姓名 查看薪水, 这些就是 Employee 类应该声明的方法 方法的声明方式如下 ( 代表可选项): 访问权限修饰符 修饰符 返回值数据类型方法名 ( 形式参数列表 ){ 方法体 在 Employee 类里声明修改姓名 修改薪水 查看姓名 查看薪水 4 个方法, 代码如下 : public String getname() { return name; public void setname(string name) { public double getsalary() { return salary; public void setsalary(double salary) { 上述代码中声明了 4 个方法 其中 getsalary 是一个有返回值的方法, 必须以一个带值的 return 语句返回 若方法没有返回值, 则返回值类型用关键字 void 表示, 如 setsalary 方法 如果方法需要参数, 则需要声明形式参数, 如 setname 方法的 String name 为该方法的形式参数列表, 形式参数可以有多个, 用逗号隔开即可 方法中的细节问题, 请参见相关章节 this 是什么意思?this 关键字, 在此处代表的是当前对象的引用, 由于方法的局部变量与类的属性同名, 所以就必须借助 this 来区分 this.salary 的 salary 是类的属性,= 后的 salary 是方法的形式参数 010

至此,Employee 类的类体已经不再是空, 而包含了 3 个属性 4 个方法, 代码如下 : public class Employee { private String name; private double salary; private static int count; public String getname() { return name; public void setname(string name) { public double getsalary() { return salary; public void setsalary(double salary) { 2.3.2 方法重载 方法重载 假设 Employee 的薪水调整还有另外一种方案, 即根据员工级别, 按照一定比例调整薪水, 那么在 Employee 类中增加如下方法 : public void setsalary(char level){ switch(level){ case 'a':salary=salary*1.1;break; case 'b':salary=salary*1.2;break; case 'c':salary=salary*1.3;break; 至此, 在 Employee 类中, 就有两个名字为 setsalary 的方法, 只不过参数不同 在 Java 语言的类中, 如果有多个同名但是不同参数的方法, 称为 方法重载 (overload) 所谓不同参数, 可能是形式参数的个数不同, 也可能是类型不同 方法重载能够增强程序的可读性 如 Employee 类中的 setsalary(char level) 方法, 命名为 setsalary2 也可以, 不会影响使用, 但是可读性将降低 两个方法都跟薪资调整有关, 不过是算法不同 参数不同, 所以应该使用同样的名字, 可读性将提高 011

一个类中, 可以出现两个同名同参但是返回值不同的方法吗? 答案是否定的, 这种情况会发生编译错误 因为调用方法时, 是通过指定方法名和参数调用的, 如果两个方法的名字和参数都相同, 那么调用的时候就会混淆, 所以方法的返回值是不具备区分性的 目前,Employee 类已经完成, 那么, 如何使用该类的方法或属性? 对于任何一个类, 最终使用的时候都需要实例化该类的对象, 通过对象调用相应方法, 从而执行相应的功能 所以, 要使用类, 首先就需要掌握创建对象的方法 创建对象的语句如下 : 类名对象名 =new 类的构造方法 ; 要创建 Employee 类的对象, 可由以下语句完成 : Employee e=new Employee(); 其中 Employee 是要创建的对象的类型, 即类名 ;e 是对象的名字, 即引用 ;new 后面的 Employee() 是 Employee 类的构造方法 构造方法的相关知识, 参见 2.4 节 2.4 构造方法 构造方法的声明形式及作用 构造方法重载 要想使用 Java 类, 必须创建类的对象, 即对类进行实例化 而创建对象就必须使用构造方法, 因此, 构造方法在 Java 类中有举足轻重的作用 构造方法的声明形式如下 ( 代表可选项 ): 访问权限修饰符 类名 ( 形式参数列表 ){ 方法体 构造方法有两个显著特征 :1 名字必须与类名相同, 且大小写敏感 ;2 没有返回值类型 Employee 类中无参的构造方法形式如下 : public Employee() { 值得注意的是, 任何一个 Java 类都默认有一个如上所示的无参构造方法 也就是说, 即使 Employee 类中没有声明无参的构造方法, 照样可以直接使用 如对于 2.2 节展示的 Employee 类, 其中没有任何构造方法的声明, 但是却可以使用如下代码 : 012

public static void main(string[] args) { Employee e=new Employee(); e.setname("gloria"); e.setsalary(5000); System.out.println(e.getName()+e.getSalary()); 上述代码首先使用 Employee 类的无参构造方法 Employee() 创建一个对象, 名字为 e 接下来, 使用圆点调用了 e 的方法, 其中 e.setname 对 e 指定了名字为 Gloria,e.setSalary 方法将 e 的薪水赋值为 5000, 最后调用 getxxx 方法返回 e 的名字和薪水 打印输出结果如下所示 : Gloria 5000.0 如果希望在创建 Employee 对象时, 为该对象直接指定名字, 而不是使用 setname 方法指定名字, 该如何实现? 这种情况下, 就可以在 Employee 类中声明带形式参数的构造方法 如下代码所示 : public Employee(String name) { 同理, 也可以创建具有其他参数的构造方法, 使得创建对象的同时, 能够直接对名字 薪水赋值 如下代码所示 : public Employee(String name, double salary) { 需要注意的是, 无参的构造方法, 只有在该类没有声明任何构造方法的时候, 才是默认存在的 ; 只要声明了其他带参的构造方法, 无参的构造方法将不会默认存在, 而是必须声明才可以使用 至此,Employee 类的代码如下所示 : public class Employee { private String name; private double salary; private static int count; public Employee() { public Employee(String name) { public Employee(String name, double salary) { public String getname() { return name; public void setname(string name) { public double getsalary() { return salary; 013

public void setsalary(double salary) { 该类中声明了 3 个属性 3 个构造方法 4 个方法 可以使用如下代码测试该类 : public static void main(string[] args) { // 使用无参构造方法创建对象 Employee e=new Employee(); e.setname("gloria"); e.setsalary(5000); System.out.println(e.getName()+" "+e.getsalary()); // 使用带一个参数的构造方法创建对象 Employee e1=new Employee("Alice"); System.out.println(e1.getName()+" "+el.getsalary()); // 使用带两个参数的构造方法创建对象 Employee e2=new Employee("John",6000); System.out.println(e2.getName()+" "+e2.getsalary()); 运行结果如下 : Gloria 5000.0 Alice 0.0 John 6000.0 Java 类的主要组成部分就是属性 方法 构造方法 属性用来表示对象的数据, 方法用来表示对象具有的行为, 构造方法用来创建对象, 反之也成立, 即构造方法只能用来创建对象 类名 属性名 方法名有什么命名规范?Java 语言中的所有标识符都只能由字母 数字 下画线 $ 符组成, 且数字不能打头 类名建议首字母大写, 每个单词的首字母都大写, 如 CustomerService 属性名建议第一个单词首字母小写, 其他单词首字母大写, 如 accounttype 方法名与属性名的建议相同, 如 getname 即使违反了命名规范, 也不会发生编译运行错误, 但是却严重影响代码的可读性 2.5 块 块与内部类 014

块是在 Java 类中不太常见的一种元素 块的声明形式与方法体类似, 分实例块和静态块 (static 块 ) 两种 static 的具体含义在相关章节将详细展开 1. 实例块实例块的声明形式如下 : { 块体 在 Employee 类中增加实例块, 如下所示 : { count++; System.out.println(" "); 实例块不能直接调用, 每次调用任何构造方法创建对象时, 都会在调用构造方法前自动调用实例块的代码 所以实例块常常用来包含所有构造方法都需要执行的功能, 而这些功能只在调用构造方法前执行 再次运行 2.4 节中的测试代码, 结果如下 : Gloria 5000.0 Alice 0.0 John 6000.0 可见, 不管使用哪个构造方法创建对象, 在调用构造方法前, 都默认执行了实例块代码 一个类中可以有多个实例块, 将按照声明顺序被执行 2. 静态块静态块的声明形式如下 : static{ 块体 ; 静态块与实例块的区别在于, 静态块只被运行一次, 而实例块是每次创建对象都会运行 因此, 静态块往往用来包含该类必须执行且只执行一次的代码 在 Employee 类中加入如下静态块 : static{ System.out.println(" 静态块 "); 再次运行 2.4 节的测试代码, 结果如下 : 静态块 Gloria 5000.0 Alice 0.0 John 6000.0 015

可见, 虽然创建了 3 个对象, 但是静态块却只运行了一次, 而且在最开始处运行 2.6 内部类 块与内部类 顾名思义, 内部类 (inner class) 即在类体中声明的类, 包含内部类的类往往被称为外部类 (outer class) 内部类作为外部类的成员存在, 可以像方法一样使用外部类的属性和方法 同时内部类也具有类的特征, 可以声明属性 方法 构造方法等, 内部类也需要创建对象才能使用类中的方法或属性等成员 如下代码中的 Inner 类即 Outer 类的内部类 : Public class Outer { private int size; class Inner{ public void print(){ System.out.println(size); 内部类的具体应用, 请参考第 17 章 2.7 本章小结 Java 程序都由若干个类组成, 所以先了解 Java 类的主要组成元素非常关键 本章主要学习了类中常见的 5 种元素, 包括属性 方法 构造方法 块和内部类 学习本章后, 读者能够对 Java 类有清晰认识, 对各元素的声明形式 含义 作用也有所了解 但是 5 种元素中有很多通用的知识点, 如类 属性 方法 构造方法都使用到了访问权限修饰符, 属性 方法都涉及数据类型等 在第一部分接下来的章节中, 将针对这些 通用 的知识点逐一展开学习 016