类的定义讲义

更新时间:2024-06-10 09:45:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

类和对象讲义

第2章类的定义2.1.1 类的基本结构1. 类的声明——外围部分2. 类体——内部部分类体中定义了决定对象特性的行为的字段、构造器和方法,其中:字段保存每个对象要用的数据;构造器让每个对象一旦被创建出来就被正确地初始化;方法实现了对象的行为。类的一般形式:public class 类名{字段构造器方法}练习2-1:写出Student类和LabClass类的声明部分。2.1.2 字段字段(field):保存了对象要使用的数据,又称作实例变量。打开TicketMachine类,该类有3个字段:price、balance和total。字段是对象内的一小块用来保存数值的空间。每一个对象被创建后,就具有在它所属的类中声明过的每一个字段所需的空间。

1.字段的声明private int price; //字段price的声明private指出它们都是对象的

私有字段;int是字段的类型,说明它们都可以存储整数值。因为字段保存了可能会随着时

间变化的值,所以又被称作变量。如果需要就可以改变字段中保存的值。2.注释(comment)注释是插在类的代码中,用来向阅读者提供解释信息的语句。它是非执行语句,不会影响类的功能。单行注释:以两个字符“//”开头;多行注释:以“/*”开头,以“*/”结束;文档注释:以“/**”开头,以“*/”结束。练习2-2:下面每个字段的类型分别是什么?privateint count;private Student representative;private Server host;练习2-3:下面字段的名字分别是什么?privateboolean alive;private Person tutor;private Game game;练习2-4:写一个字段的完整声明,字段的名字是status,类型是int。2.1.3 构造器构造器(constructor)让每个对象一旦创建出来就被正确地初始化。构造器把对象初始化成一个合理的状态。TicketMachine类的构造器代码如下:

public TicketMachine(intticketCost) // 构造器的声明 {

price = ticketCost; balance = 0; total = 0;

}1.类构造器的特点构造器与定义它们的类具有相同的名字;构造器在创建实例对象时自动被调用;构造器无返回值,也没有void。构造器的一个很重要的功能就是保存信息,这样这些信息就能在对象的整个生命周期中使用。

2.通过参数传递数据构造器和方法接收外部值的方式都是使用参数。参

数定义在构造

publicTicketMachine(intticketCost)

构造器空间可以用来保

存构造器参数以及构造器中的其他局部变量的值。为了区分构造器或方法的内部的参数名字,以及外部要传入的参数的值,把参数的名字叫作形参,把数值叫作实参。3.变量的作用域和生命周期(1)变量的作用域作用域(scope):变量的作用域定义了变量可以被访问的代码的范围。参数的作用域被限制在声明这个参数的构造器或方法体内;字段的作用域在类的定义中,即在表示这个类的代码的任何地方都可以访问。(2)生命周期生命周期(lifetime):变量的生命周期表明了在变量被清除之前能继续存在多久。参数的生命周期限制在对构造器或方法的调用中。一旦调用完成,形参就消失了,它们保存的值也就丢失了。换言之,当构造器或方法结束了运行,整个构造器空间或方法空间连同在这个空间里的参数变量就被删除了。字段的生命周期就是它所属的对象的生命周期。练习2-5:下面这个构造器属于哪个类?public Student(String name)练习2-5:下面的构造器有几个参数,它们的类型分别是什么?public Book(String title,double price)练习2-6:你能猜测一下Book类的字段可能的名字与类型吗?4.赋值构造器中的一条赋值语句:price = ticketCost;有赋值运算符“=”的语句是赋值语句。赋值语句把赋值运算符右边的值复制给左边的变量。赋值运算符的右边通常是表达式。表达式的类型必须与要赋值的变量的类型匹配。同样的规则也适用于形参和实参:实参的类型必须与形参的类型相匹配。练习2-7:假设类Pet有一个字段叫作name,类型是String。在下面的构造器里写一条赋值语句,使得name字段能够以构造器的参数来初始化。public Pet(String petName){}练习2-8:下面TicketMachine类的构造器有什么错误?publicTicketMachine(intticketCost) {int price = ticketCost;balance = 0;total = 0; }2.1.4 方法TicketMachine类有4个方法:getPrice、getBalance、insertMoney和printTicket。getPrice方法如下:public intgetPrice() //方法声明或方法头 {

return price; //方法体(方法体必须由一对花括号括起来)

}1.方法的组成方法由两个部分组成:方法头和方法体。方法声明:方法头方法体,方法体内包含了当方法被调用时会发生的变量声明和语句。语句块(block):在一对大括号中的所有语句叫做一个语句块。类体和方法体都是语句块。2.方法的返回值和返回语句方法可以有返回值,返回类型写在方法名的前面,同时在方法体中还必须有一条返回语句,语句格式如下:return 表达式;返回语句用来返回和方法声明中的返回类型相匹配的数据。有返回值的方法,返回语句总是该方法的最后一条语句。当方法没有返回值时,应在方法名前加void。构造器与方法对比:方法可以有返回值,而构造器没有任何返回值,也不能在方法名前加void。方法和构造器都可以有任意数量的参数。3.访问器方法通常把TicketMachine类的两个get方法(getPrice和getBalance)称作访问器方法,或访问器。访问器方法:返回对象状态的信息。即它提供对状态的访问。访问器通常具有一条返回语句,以返回相关信息。练习2-9:如果对getPrice方法的调用可以被看作是问“票价是多少?”,那么getBalance方法的调用问的是什么问题?练习2-10:定义访问器方法getTotal,返回total字段的值。4.修

改器方法修改器方法:改变对象状态的方法。insertMoney方法 /** * Receive an amount of money in cents from a customer. */public void insertMoney(int amount) {balance = balance + amount; }Java允许没有返回值的方法体内有一条没有返回值的语句。形式为:return;该语句会使方法结束,不再执行后面的代码。insertMoney方法体内有一条其他形式的赋值语句:balance = balance + amount; 该赋值语句也可以写作:balance += amount; 练习2-15:如何仅凭方法头就判断setPrice是方法而不是构造器?public void setPrice(intticketCost)练习2-16:完成setPrice的方法体,使它将其参数值赋给price字段。

练习2-17:完成下面方法的方法体,方法的目的是把参数的值加给字段score。/** *Increase score by the given number of points. */public void increase(int points) {?? }练习2-18:完成下面的方法,使字段price的值减少给定的参数的值?/** *Reduce price by the given amount */ public void discount(int amount){??}2.1.5 在方法中打印查看printTicket方法的源代码。 public void printTicket() {

// Simulate the printing of a ticket. System.out.println(\System.out.println(\System.out.println(\

System.out.println(\System.out.println(\System.out.println();

// Update the total collected with the balance. total = total + balance;

// Clear the balance. balance = 0; }

println方法printTicket方法中的所有打印语句都是调用Java语言中System.out对象的println方法。该方法将它的参数在字符终端打印输出。System.out.println(\输出字符串System.out.println(\输出字符串和变量的值

“+”不再是加法运算符,而是字符串拼接运算符,是将两个字符串拼接成一个字符串,如”abc”+”edf”,结果为”abcedf”;如int sum=123;则”sum=”+sum,是将字符串”sum=”与转换成字符串的变量的值进行拼接,结果为”sum=123”。System.out.println(); //输出空行练习2-19:在TicketMachine类中加一个方法prompt,这个方法没有参数和返回值,方法的功能应打印出下面的内容:Please insert the correct amount of money.练习2-20:在TicketMachine类中加showPrice方法,这个方法没有参数和返回值,方法的功能是打印出下面的内容:The price of a ticket is xyz cents.其中,xyz是该方法被除数调用时price字段的值。对售票机1.0设计的探讨没有检查乘客是否投入买一张票足够金额的钱币;不能为乘客找回多投入的钱;不检查乘客是否投入合理的金额;不检查传递给构造器的价格是否合理。2.2.1 条件语句1.条件语句的格式if(布尔表达式){语句块1}else{语句块2}2.布尔表达式即逻辑表达式,它的运算结果为布尔值true(真)或false(假)。3. 关系表达式insertMoney方法的代码:public void insertMoney(int amount) {if(amount > 0) {balance = balance + amount; }else {System.out.println(\a positive amount: \amount); } }2.2.2 条件语句例子改进售票机1.0中的printTicket方法,在打印车票之前先检查乘客是否已经投入了足够的金

额。售票机1.0中的printTicket方法的源代码printTicket1.txt 改进后的售票机2.0中的printTicket方法的源代码 public void printTicket() {

if(balance >= price) {

// Simulate the printing of a ticket. System.out.println(\System.out.println(\System.out.println(\

System.out.println(\System.out.println(\System.out.println();

// Update the total collected with the price. total = total + price;

// Reduce the balance by the prince. balance = balance - price; } else {

System.out.println(\

(price - balance) + \

}

}练习2-27:写一条赋值语句,将两个变量price和discount的乘积保存在第三个变量saving中。练习2-28:写一条赋值语句,将total的值除以count,结果保存在mean中。练习2-29:写一条if 语句,比较price和budget的值。如果price大于budget,则打印信息“太贵了!”;否则打印信息“正好”。练习2-30:修改练习2-29,当价格太贵时,打印信息中包含budget的值。2.2.3 局部变量查看refundBalance方法的源代码 publicintrefundBalance() {

intamountToRefund;//局部变量

amountToRefund = balance;//局部变量初始化 balance = 0;

returnamountToRefund;

}1. 局部变量的定义局部变量(local variable):在方法内部声明和使用的变量。2. 局部变量的使用 局部变量通常作为方法实现其任务所需的临时存储单元。局部变量的声明和字段的声明相似,但是不需要private或public的修饰。局部变量使用前必须先进行初始化。局部变量的作用域和形参一样,仅限于声明它们的语句所在的方法体内,它们的生命周期就是方法的执行周期,它们存在于方法空间中,在方法被调用的时候创建,方法结束时被销毁。构造器中也可以有局部变量。 方法中的如下两行代码:intamountToRefund;amountToRefund = balance;可以写成下面的一句:intamountToRefund = balance;练习2-31:为什么下面版本的refundBalance方法不能得出与之前版本相同的结果?publicintrefundBalance() {balance = 0;return balance; }练习2-32:如果试图用下面版本的refundBalance方法来编译TicketMachine类,会发生什么情况?publicintrefundBalance() {return

balance;balance = 0; }2.2.4 字段、参数和局部变量 1.字段字段定义在类体中,但是在构造器和方法的外面;字段用于在对象的生命周期内持久保存数据,它们维持着对象的当前状态。它们的生命周期与所属对象一样长;字段的作用域是整个类,即在整个类内部都可以访问。因此,在该类的所有的构造器和方法内都可以访问。字段也可以通过对象名来引用,形式如:对象名.字段。但是字段一旦被定义为private,就不能从定义它们的类的外部访问它们了。2.形参形参定义在构造器可方法的头部。形参接收外部传递进来的值,使用调用构造器或方法时所给的实参的值来初始化。形参的作用域仅限于定义它们的构造器或方法体内。 3.局部变量局部变量定义在构造器或方法的内部。它们只能在定义它们的构造器或方法内部被初始化和使用。局部变量在第一次被用于表达式计算之前必须被初始化,它们没有默认值。局部变量的作用域仅限于定义它们的语句块内部。练习2-33:增加一个新的方法emptyMachine,来模拟清空机器里的钱。它们应该返回清空前的total,并将total设为0。练习2-34:改写printTicket方法,增加局部变量amountLeftToPay,初始为price和balance的差。改写条件语句中的测试,检查amountLeftToPay的值。如果这个值小于或等于0,车票被打印出来;否则打印一条错误信息,并指出还需要投入的金额。

本文来源:https://www.bwwdw.com/article/vtb6.html

Top