1、12023-1-27 11:22第 2 页面向对象的概念面向对象的概念v所谓面向对象的方法,就是使我们分析、设计和实现一个系所谓面向对象的方法,就是使我们分析、设计和实现一个系统的方法尽可能自然地使用我们在生活中用到的以对象为中统的方法尽可能自然地使用我们在生活中用到的以对象为中心的思想,分析、认识、设计一个系统的方法。包括:心的思想,分析、认识、设计一个系统的方法。包括:面向对象的分析(面向对象的分析(OOA,Object-Oriented Analysis)面向对象的设计(面向对象的设计(OOD,Object-Oriented Design)面向对象的程序设计面向对象的程序设计(OOP,O
2、bject-Oriented Program)v面向对象技术主要围绕以下几个概念讨论面向对象技术主要围绕以下几个概念讨论:对象的封装(抽象数据类型)、类与对象、对象的封装(抽象数据类型)、类与对象、继承性、多态继承性、多态性。性。2023-1-27 11:22第 3 页变量变量方法方法面向对象的概念面向对象的概念v 对象对象(Object)有两个层次的概念有两个层次的概念:现实生活中现实生活中对象指的是客观世界的实体,它由状态对象指的是客观世界的实体,它由状态(State)和行为和行为(Behavior)构成构成;程序中对象程序中对象是现实世界对象的模型,是一组变量和相关是现实世界对象的模型,
3、是一组变量和相关方法的集合。方法的集合。变量变量(Variables)表示现实对象的状态,)表示现实对象的状态,方方法法(Methods)表现现实世界对象的行为,这些变量和方法叫表现现实世界对象的行为,这些变量和方法叫做这个对象的做这个对象的成员成员(Member)。)。2023-1-27 11:22第 4 页现实生活中的对象现实生活中的对象Class Car int color_number;int door_number;int speed;void brake()void speedUp()void slowDown()抽象数据类型抽象数据类型面向对象的概念面向对象的概念可将现实生活中的
4、对象经过可将现实生活中的对象经过抽象,映射为程序中的对象。抽象,映射为程序中的对象。对象在程序中通过一种抽象数对象在程序中通过一种抽象数据类型来描述,就称为类据类型来描述,就称为类(Class)。)。2023-1-27 11:22第 5 页面向对象的概念面向对象的概念v 类(类(Class)类是描述对象的类是描述对象的“基本原型基本原型”,它定义一类对象所能拥有,它定义一类对象所能拥有的数据和能完成的操作。在面向对象的程序设计中,类是的数据和能完成的操作。在面向对象的程序设计中,类是程序的基本单元。程序的基本单元。相似的对象可以归并到同一个类中去,就像传统语言中的相似的对象可以归并到同一个类中
5、去,就像传统语言中的变量与数据类型关系一样。变量与数据类型关系一样。v对象对象程序中的对象是类的一个实例,是一个软件单元,它由一程序中的对象是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。组结构化的数据和在其上的一组操作构成。2023-1-27 11:22第 6 页Car car1;Car car2;Car carN;面向对象的概念面向对象的概念2023-1-27 11:22第 7 页对象对象B对象对象 A消息消息面向对象的概念面向对象的概念v类的变量类的变量(Class Variables):指对象的所具有的状态或特征。:指对象的所具有的状态或特征。v类的方法类的
6、方法(Class Methods):指对象的功能单元。:指对象的功能单元。v消息消息(Message):软件对象通过相互间传递消息来相互作用和通信,一个消软件对象通过相互间传递消息来相互作用和通信,一个消息由三部分组成息由三部分组成:1.发送消息的对象发送消息的对象 2.接收发送消息接收发送消息 (调用发送对象的方法)(调用发送对象的方法)3.方法需要的参数方法需要的参数2023-1-27 11:22第 8 页v一个例子一个例子v在程序中操作对象是类的一个实例。在程序中操作对象是类的一个实例。创建一个对象:创建一个对象:Hello obj=new Hello();调用方法:调用方法:obj.s
7、howString();class Hello private String s;public void showString()System.out.println(s);public void changeString(String str)s=str;变量变量方法方法showString()方法方法changeString()面向对象的概念面向对象的概念2023-1-27 11:22第 9 页面向对象的概念面向对象的概念v 为什么使用类为什么使用类采用简单数据类型表示现实世界中概念存在一些局限性。采用简单数据类型表示现实世界中概念存在一些局限性。例如:采用例如:采用int型数据表示一个日
8、期概念,需要使用型数据表示一个日期概念,需要使用3个变个变量:量:intday,month,year;如果要表示如果要表示2个人的生日,就要使用个人的生日,就要使用6个变量:个变量:int mybirthday,mybirthmonth,mybirthyear;int yourbirthday,yourbirthmonth,yourbirthyear;2023-1-27 11:22第 10 页class BirthDate private int day,month,year;public int tomorrow()BirthDate mybirth,yourbirth;面向对象的概念面向对
9、象的概念将变量和方法封装在一个类将变量和方法封装在一个类中,可以对成员变量进行隐藏,中,可以对成员变量进行隐藏,外部对类成员的访问都通过方外部对类成员的访问都通过方法进行,能够保护类成员不被法进行,能够保护类成员不被非法修改。非法修改。BirthDate date;已知当前日期对象,求第已知当前日期对象,求第2天的日期对象:天的日期对象:date.day=date.day+1;如果如果date.day已经为已经为31,操作结果是非法状态。可以定义一,操作结果是非法状态。可以定义一个成员方法个成员方法tomorrow(),求第,求第2天的日期对象。外部要获得天的日期对象。外部要获得当前日期的后一
10、天时,只要调用:当前日期的后一天时,只要调用:date.tomorrow();2023-1-27 11:22第 11 页对象对象A对象对象B私有数据私有数据 方法方法 方法方法数据数据公有数据公有数据面向对象的概念面向对象的概念v封装封装(Encapsulation)封装把对象的所有组成部分组合在一起。封装定义程序封装把对象的所有组成部分组合在一起。封装定义程序如何引用对象的数据,实际上是用方法将类的数据隐藏起来,如何引用对象的数据,实际上是用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。控制用户对类的修改和访问数据的程度。封装利于模块化和封装利于模块化和信息隐藏。信息隐藏。20
11、23-1-27 11:22第 12 页bicycle(Super class)Mountain bikesRacing bikesTandem bikesSubclass1 1、面向对象的概念、面向对象的概念v子类子类(Subclass)子类是作为另一个类的扩充或修正而定义的一个类子类是作为另一个类的扩充或修正而定义的一个类。2023-1-27 11:22第 13 页class Car int color_number;int door_number;int speed;public void push_break()public void add_oil()class Trash_Car e
12、xtends Car double amount;public void fill_trash()面向对象的概念面向对象的概念v继承继承(Inheritance)一个类从另一个类派生出来的过程叫一个类从另一个类派生出来的过程叫继承。这个类叫子类继承。这个类叫子类(派生类派生类),而被继承的类叫该类的超类,而被继承的类叫该类的超类(父类父类)继承的子类可利用父类中定义的方法和变量,就像它们属继承的子类可利用父类中定义的方法和变量,就像它们属于子类本身一样。也可以改变继承来的方法和变量。于子类本身一样。也可以改变继承来的方法和变量。2023-1-27 11:22第 14 页class Car in
13、t color_number;int door_number;int speed;public void push_break()speed=0;public void add_oil()class Trash_Car extends Car double amount;public void fill_trash()public void push_break()speed=speed 10;面向对象的概念面向对象的概念v方法的覆盖方法的覆盖(override)在子类中重新定义父类中已有的方法。在子类中重新定义父类中已有的方法。2023-1-27 11:22第 15 页类类void show
14、(int int_num)void show(double double_num)void show(int int_num,float float_num)1231.23123,1.23面向对象的概念面向对象的概念v方法的重载方法的重载(Overload)在同一个类中至少有两个方法用同一个名字,但有不同的参在同一个类中至少有两个方法用同一个名字,但有不同的参数列表。数列表。使用重载方法时,使用重载方法时,Java编译器根据传递给这个参数的数目和编译器根据传递给这个参数的数目和类型确定正确的方法。类型确定正确的方法。重载实现了对象的多态特性。重载实现了对象的多态特性。多态性的特点大大提高了程序
15、的抽象程度和简洁性。多态性的特点大大提高了程序的抽象程度和简洁性。2023-1-27 11:22第 16 页本课程的目标本课程的目标Thinking in JavaThinking in Javav通过通过Java语言来介绍面向对象程序设计,培养语言来介绍面向对象程序设计,培养面向对象的面向对象的思维思维,掌握其,掌握其方法方法、原理原理与与机制机制,具备,具备一定的面向对象设计、开发能力。为后续课程及大一定的面向对象设计、开发能力。为后续课程及大型软件的设计与工程实现打下基础型软件的设计与工程实现打下基础。172023-1-27 11:22第 18 页全面掌握面向对象的基本特征全面掌握面向对
16、象的基本特征掌握如何定义一个类以及如何生成对象掌握如何定义一个类以及如何生成对象深入掌握方法的定义及技巧深入掌握方法的定义及技巧深入掌握类的访问权限与封装机制深入掌握类的访问权限与封装机制深入掌握包的定义与包的使用方法深入掌握包的定义与包的使用方法 本章学习要点本章学习要点2023-1-27 11:22第 19 页vJava是一种纯粹的面向对象的程序设计语言,一个是一种纯粹的面向对象的程序设计语言,一个Java程序程序乃至乃至Java程序内的基本单元都是对象。因此,用程序内的基本单元都是对象。因此,用Java进行程进行程序设计必须将自己的思想转入到一个面向对象的世界,以对序设计必须将自己的思想
17、转入到一个面向对象的世界,以对象世界的思维方式来思考问题。象世界的思维方式来思考问题。v编写一个编写一个Java程序就是在定义类和创建对象,也就是说定义程序就是在定义类和创建对象,也就是说定义类和建立对象是类和建立对象是Java编程的主要任务。编程的主要任务。v本章和下一章将介绍本章和下一章将介绍Java面向对象程序设计基础,即对象、面向对象程序设计基础,即对象、类、子类、超类、接口、包以及类的继承等内容。类、子类、超类、接口、包以及类的继承等内容。2023-1-27 11:22第 20 页4.1 4.1 类类 的的 建建 立立 Java的类分为两大部分:系统定义的类和用户自定义类。学习的类分
18、为两大部分:系统定义的类和用户自定义类。学习Java语言在某种程度上就是在语言在某种程度上就是在:v学习如何定义所需要的类,即学习学习如何定义所需要的类,即学习Java程序的书写规范,熟程序的书写规范,熟悉和掌握语法规则;悉和掌握语法规则;v熟悉熟悉Java平台定义了哪些经常要用到、而且满足我们需要的平台定义了哪些经常要用到、而且满足我们需要的类。类。Java的类库就是系统定义的类,它是系统提供的已实现的类库就是系统定义的类,它是系统提供的已实现的标准类的集合,提供了的标准类的集合,提供了Java程序与运行它的系统软件程序与运行它的系统软件(Java虚拟机)之间的接口。虚拟机)之间的接口。20
19、23-1-27 11:22第 21 页4.1.1 类的概念与定义 用面向对象的观点来看,世界上的一切事物都是对象。而用面向对象的观点来看,世界上的一切事物都是对象。而物以物以“类类”聚,所以这些对象可以划分成各种聚,所以这些对象可以划分成各种“类类”。按照面。按照面向对象的观点,一个类分为状态和行为两部分,再加上类名这向对象的观点,一个类分为状态和行为两部分,再加上类名这一部分,可以把一个类的定义分为一部分,可以把一个类的定义分为3个部分:个部分:IS,HAS,DOES。其具体含义是:其具体含义是:IS 说明该类说明该类“是是”什么样的一个类,即说明类的名字及其性什么样的一个类,即说明类的名字
20、及其性质,如一个类的父类、修饰符等,这一部分称为类声明。质,如一个类的父类、修饰符等,这一部分称为类声明。HAS 说明这个类说明这个类“有有”些什么特征及属性,这些特征和属性些什么特征及属性,这些特征和属性用域变量来表示,这一部分统称为成员变量。用域变量来表示,这一部分统称为成员变量。DOES 说明这个类可以说明这个类可以“做做”什么,即这个类有哪些行为,什么,即这个类有哪些行为,这些行为用实例方法和类方法描述,这些方法统称为成员方法。这些行为用实例方法和类方法描述,这些方法统称为成员方法。2023-1-27 11:22第 22 页4.1.1 类的概念与定义IS和和HAS部分构成了一个类的状态
21、,部分构成了一个类的状态,DOES就是一个类的行为,就是一个类的行为,行为通过成员方法(行为通过成员方法(Member Method)来实现。这样,定义)来实现。这样,定义一个类的基本形式为:一个类的基本形式为:class 类名类名 /IS 成员变量成员变量;/HAS 成员方法成员方法;/DOES在在Java中,中,class是声明一个类的关键字,类名是要声明的类的是声明一个类的关键字,类名是要声明的类的名字,它必须是一个合法的名字,它必须是一个合法的Java标识符,习惯上用大写字母标识符,习惯上用大写字母开头。开头。2023-1-27 11:22第 23 页2023-1-27 11:22第
22、24 页4.1.2 类声明v类声明定义了类的名字以及其他的属性,说明该类是(类声明定义了类的名字以及其他的属性,说明该类是(IS)什么样)什么样的一个类。一般来说,根据声明的类的需要,类声明可以包含如下的一个类。一般来说,根据声明的类的需要,类声明可以包含如下3个选项个选项:声明类的修饰符声明类的修饰符 说明该类的父类说明该类的父类 说明该类所实现的接口说明该类所实现的接口类修饰符类修饰符 class 类名称类名称 extends 父类名称父类名称implements 接口名称列表接口名称列表 变量定义及初始化;变量定义及初始化;方法定义及方法体;方法定义及方法体;类体,其类体,其中定义了该类
23、中所有的中定义了该类中所有的变量和该类所支持的方法,分别变量和该类所支持的方法,分别称为成员变量和成员方法。称为成员变量和成员方法。2023-1-27 11:22第 25 页v类修饰符是下列之一:类修饰符是下列之一:public|abstract|final public 该关键字声明的类可以在其他的任何类中使用。默认该关键字声明的类可以在其他的任何类中使用。默认时,该类只能被同一个程序包中其他的类使用。时,该类只能被同一个程序包中其他的类使用。abstract抽象类,没有具体对象的概念类,没有具体实现功抽象类,没有具体对象的概念类,没有具体实现功能,只用于扩展子类。例如:能,只用于扩展子类。
24、例如:“鸟鸟”,它可以派生出它可以派生出“鸽鸽子子”、“燕子燕子”等具体类。等具体类。final最终类,表示该类已经非常具体,没有子类可扩展。最终类,表示该类已经非常具体,没有子类可扩展。1.1.类修饰符类修饰符2023-1-27 11:22第 26 页在在Java中,除中,除Object之外,每个类都有一个父类。之外,每个类都有一个父类。Object是是Java语言中惟一没有父类的类,如果某个类没有声明父类,语言中惟一没有父类的类,如果某个类没有声明父类,Java就认为它是就认为它是Object的直接子类。因此,所有其他类都是的直接子类。因此,所有其他类都是Object的直接子类或间接子类。
25、说明一个类的父类的形式为:的直接子类或间接子类。说明一个类的父类的形式为:class 类名类名 extends 父类名父类名 /类体类体 其中其中extends子句认为是直接继承其后的父类,因此在类的分子句认为是直接继承其后的父类,因此在类的分级结构中插入这个类。级结构中插入这个类。2.2.说明一个类的父类说明一个类的父类 2023-1-27 11:22第 27 页接口定义了行为的协议,这些行为可以在处于各个层次的任接口定义了行为的协议,这些行为可以在处于各个层次的任何类中被实现。一个类要实现的一个或多个接口,可以使用何类中被实现。一个类要实现的一个或多个接口,可以使用关键字关键字implem
26、ents,并且在其后面给出由该类实现的接口的,并且在其后面给出由该类实现的接口的名字表,接口的名字表是以逗号分隔的多个接口,其形式为:名字表,接口的名字表是以逗号分隔的多个接口,其形式为:implements Interfaces1,Interfaces2,Interfacesk;接口可以声明多个方法和变量,但是没有这些方法的具体实接口可以声明多个方法和变量,但是没有这些方法的具体实现。现。4.说明一个类所实现的接口2023-1-27 11:22第 28 页变量修饰符变量修饰符 变量数据类型变量数据类型 变量名变量名1,变量名变量名2=变量初值变量初值;v变量修饰符:变量修饰符:public|
27、protected|private|package static final public、protected、private为可访问性修饰符为可访问性修饰符static说明该成员变量是类变量说明该成员变量是类变量final 说明为常量使用说明为常量使用成员变量的类型可以是成员变量的类型可以是Java中任意的数据类型,包括简单类型,中任意的数据类型,包括简单类型,类,接口,数组。在一个类中的成员变量应该是唯一的。类,接口,数组。在一个类中的成员变量应该是唯一的。4.1.3 成员变量的声明v类成员变量的定义及修饰符类成员变量的定义及修饰符2023-1-27 11:22第 29 页访问控制符v p
28、ublic:任何其它类、对象只要可以看到这个类的话,任何其它类、对象只要可以看到这个类的话,那么它就可以存取变量的数据,或使用方法。那么它就可以存取变量的数据,或使用方法。Dinner.javav protected:同一类,同一包可以使用。不同包的类要使用,:同一类,同一包可以使用。不同包的类要使用,必须是该类的子类。必须是该类的子类。ChocolateChip.javav private:不允许任何其他类存取和调用。不允许任何其他类存取和调用。IceCream.javav default:(前边没有修饰字的情况前边没有修饰字的情况)在同一包中出现的类才在同一包中出现的类才可以直接使用它的数
29、据和方法可以直接使用它的数据和方法.Cake.java2023-1-27 11:22第 30 页访问控制符v对对 公共类公共类 的成员变量和成员方法而言,可通过施以一定的的成员变量和成员方法而言,可通过施以一定的访问权限来限定其成员的应用范围,具体范围如下:访问权限来限定其成员的应用范围,具体范围如下:同一个类中同一个类中 同一个包中同一个包中 不同包中的不同包中的子类子类 不同包中的不同包中的非子类非子类privatedefaultprotectedpublic2023-1-27 11:22第 31 页访问控制符v公共类和非公共类的属性和方法的访问控制表及图示见公共类和非公共类的属性和方法的
30、访问控制表及图示见下图:下图:2023-1-27 11:22第 32 页class ABCD char data;static int share_data;class Demo ABCD a,b,c,d;object achar dataobject cchar dataObject bchar datastatic intshare_dataobject dchar data类变量类变量v 属于类的变量和方法属于类的变量和方法staticstatic 在变量或方法之前,表明它们是属于类的,称为类方在变量或方法之前,表明它们是属于类的,称为类方法(静态方法)或类变量(静态变量)。若无法(静态
31、方法)或类变量(静态变量)。若无static修饰,修饰,则是实例方法和实例变量。则是实例方法和实例变量。v类变量在各实例间共享类变量在各实例间共享同心圆同心圆2023-1-27 11:22第 33 页public class StaticVarpublic static int number 5;public class OtherClasspublic void method()int x=StaticVar.number;类变量的生存期不依赖于对象的实例,其它类可以不通过类变量的生存期不依赖于对象的实例,其它类可以不通过对象实例访问它们。甚至可以在它的类的任何对象创建之对象实例访问它们。甚
32、至可以在它的类的任何对象创建之前访问。前访问。例例ch3Compare_test.java类变量类变量2023-1-27 11:22第 34 页v 方法是类的动态属性。对象的行为是由它的方法来实现的。一方法是类的动态属性。对象的行为是由它的方法来实现的。一个对象可通过调用另一个对象的方法来访问该对象。个对象可通过调用另一个对象的方法来访问该对象。v与类一样,方法也有两个主要部分:方法首部声明和方法体。方与类一样,方法也有两个主要部分:方法首部声明和方法体。方法声明的法声明的基本形式基本形式为:为:返回类型返回类型 方法名方法名()/方法体方法体4.1.4 方法的声明与实现2023-1-27 1
33、1:22第 35 页方法修饰符方法修饰符 返回类型返回类型 方法名称方法名称(参数参数1,参数参数2,)throws exceptionList statements;/方法体:方法的内容方法体:方法的内容v方法修饰符方法修饰符public|protected|privatestaticfinal|abstractnativesynchronizedv返回类型可以是任意的返回类型可以是任意的Java数据类型,当一个方法不需要返回数据类型,当一个方法不需要返回值时,返回类型为值时,返回类型为void。v参数的类型可以是简单数据类型,也可以是引用数据类型(数参数的类型可以是简单数据类型,也可以是引
34、用数据类型(数组、类或接口),参数传递方式是值传递。组、类或接口),参数传递方式是值传递。v方法体是对方法的实现。它包括局部变量的声明以及所有合法方法体是对方法的实现。它包括局部变量的声明以及所有合法的的Java指令。局部变量的作用域只在该方法内部。指令。局部变量的作用域只在该方法内部。方法声明v方法声明的完整形式:方法声明的完整形式:2023-1-27 11:22第 36 页方法的返回类型v一个方法必须声明其返回类型,如果无返回值,则必须声明一个方法必须声明其返回类型,如果无返回值,则必须声明其返回类型为其返回类型为void。v当当return语句带有返回值时,它与方法定义的返回类型的关语句
35、带有返回值时,它与方法定义的返回类型的关系必须符合如下几种情况之一:系必须符合如下几种情况之一:当方法声明的返回类型是基本数据类型时,返回值的数据当方法声明的返回类型是基本数据类型时,返回值的数据类型必须与返回类型一致。类型必须与返回类型一致。当方法声明的返回类型是一个类时,返回对象的数据类型当方法声明的返回类型是一个类时,返回对象的数据类型必须是与方法声明的返回类相同的类或其子类。必须是与方法声明的返回类相同的类或其子类。当方法声明的返回类型是一个接口类型时,返回的对象所当方法声明的返回类型是一个接口类型时,返回的对象所属的类必须实现这个接口。属的类必须实现这个接口。Length2023-1
36、-27 11:22第 37 页方法名方法名可以是任何合法的方法名可以是任何合法的Java标识符标识符。(1)方法可以重载)方法可以重载Java支持方法名重载,即多个方法可以共享一个名字。支持方法名重载,即多个方法可以共享一个名字。(2)重载的方法不一定返回相同的数据类型,但参数必须)重载的方法不一定返回相同的数据类型,但参数必须有所区别:有所区别:参数的类型不同。例如,参数的类型不同。例如,doubleIt(int x)和和doubleIt(String x)方法的两个版本的参数的类型不一样。方法的两个版本的参数的类型不一样。参数的顺序不同。这里是指一个方法有多个不同类型参参数的顺序不同。这里
37、是指一个方法有多个不同类型参数的情况,改变参数的顺序也算是一种区分方法。数的情况,改变参数的顺序也算是一种区分方法。参数的个数不同。参数的个数不同。Overload.java2023-1-27 11:22第 38 页方法的参数方法的参数 v一个参数是一个方法的变元,它与类的成员变量毫无关系,一个参数是一个方法的变元,它与类的成员变量毫无关系,因此参数名可以和成员变量名相同。如果一个方法的参数名因此参数名可以和成员变量名相同。如果一个方法的参数名与成员变量名同名,则在这个方法中,参数隐藏了这个成员与成员变量名同名,则在这个方法中,参数隐藏了这个成员变量名,也就是说,在方法中出现的这个名字指的是参
38、数名,变量名,也就是说,在方法中出现的这个名字指的是参数名,而不是成员变量名。而不是成员变量名。Class Circle int x,y,radius;public Circle(int x,int y,int radius)this.x=x;this.y=y;this.radius=radius;2023-1-27 11:22第 39 页方法的参数传递方法的参数传递 vJava的参数传递方式是传递值,也称为的参数传递方式是传递值,也称为“值传递值传递”。ClassNamevoid aMethod(double d,int i,boolean t)public static void main
39、(String args)double x=1.0;int y=2;boolean b=true;aMethod(x,y,b)Variable value x=1.0 y=2 b=trueVariable value d=1.0 i =2 t =true参数有两种类型:基本类型的变量名是变量本身;参数有两种类型:基本类型的变量名是变量本身;引用类型变量的名字是变量的存储地点。引用类型变量的名字是变量的存储地点。2023-1-27 11:22第 40 页方法的参数传递方法的参数传递 v对于这种值传递方式要区分如下两种对于这种值传递方式要区分如下两种情况:情况:(1)当参数变元是一个简单类型时,)
40、当参数变元是一个简单类型时,值传递意味着这个方法不能改变参数变值传递意味着这个方法不能改变参数变元的值。元的值。(2)当参数变元是一个引用类型时,)当参数变元是一个引用类型时,值传递意味着这个方法不能改动这个对值传递意味着这个方法不能改动这个对象的引用,但是方法可以调用该对象的象的引用,但是方法可以调用该对象的方法来修改该对象中可访问的变量。方法来修改该对象中可访问的变量。Main MemoryBasic Type:Reference TypevarNamevaluevarNamedata不能改变基本类不能改变基本类型变量的值型变量的值可以改变可以改变StringTester.java2023
41、-1-27 11:22第 41 页方法体(1)null变量null是一个是一个“空空”变量,用于指代某一个对象,但这个对象变量,用于指代某一个对象,但这个对象没有相应的实例。例如:没有相应的实例。例如:Stack stack=null;NullTest.java(2)this变量this表示的是当前类的当前对象本身,更准确地说,表示的是当前类的当前对象本身,更准确地说,this代代表了当前对象的一个引用。表了当前对象的一个引用。(3)super变量super表示的是当前对象的直接父类对象的引用。所谓直接表示的是当前对象的直接父类对象的引用。所谓直接父类是相对于当前对象的其他父类是相对于当前对象
42、的其他“祖先祖先”类而言的,类而言的,(4)局部变量在方法体中,可以声明多个变量,它们在该方法内部使用。在方法体中,可以声明多个变量,它们在该方法内部使用。2023-1-27 11:22第 42 页变量的作用域变量的作用域X.java2023-1-27 11:22第 43 页类方法类方法类方法独立于该类的任何对象,其他类不用实例化即可调用它们。类方法独立于该类的任何对象,其他类不用实例化即可调用它们。类方法可以调用其它的类方法类方法可以调用其它的类方法类方法只能访问类方法只能访问static变量变量类方法不能以任何形式引用类方法不能以任何形式引用this 和和superpublic class
43、 GeneralFunction public static int addUp(int x,int y)return x+y;public class UseGeneral public void method()int a=9;int b=10;int c=GeneralFunction.addUp(a,b);/通过类名通过类名GeneralFunction引用引用addUp方法方法 2023-1-27 11:22第 44 页 不正确的引用不正确的引用:StaticErrorclass StaticError String mystring=“hello”;public static vo
44、id main(String args)System.out.println(mystring);编译时错误信息:编译时错误信息:nonstatic variable mystring cannot be referenced from a static context 为什么不正确:只有对象的方法可以访问对象的变量。为什么不正确:只有对象的方法可以访问对象的变量。正确的引用正确的引用v同一个类中的方法可以访问该类的成员变量;同一个类中的方法可以访问该类的成员变量;v一个类的方法只能访问自己的局部变量。一个类的方法只能访问自己的局部变量。2023-1-27 11:22第 45 页正确的引用正确
45、的引用v解决的办法解决的办法1.将变量改成类变量将变量改成类变量class StaticError static String mystring=“hello”;public static void main(String args)System.out.println(mystring);2023-1-27 11:22第 46 页正确的引用正确的引用2.先创建一个类的实例,再通过该对象访问该变量。先创建一个类的实例,再通过该对象访问该变量。class NoStaticError String mystring=“hello”;public static void main(String ar
46、gs)NoStaticError noError;noError=new NoStaticError();System.out.println(noError.mystring);2023-1-27 11:22第 47 页class Car int car_number;void set_number(int car_num)car_number=car_num;void show_number()System.out.println(My car No.is:+car_number);class CarDemo public static void main(String args)Car
47、Democar=new Car();DemoCar.set_number(6868);DemoCar.show_number();My car No.is:68684.2 创建对象与定义构造方法v一个简单的类一个简单的类 2023-1-27 11:22第 48 页4.2.1 创建对象 1.对象声明对象声明 像声明基本类型的变量一样,对象声明的一般形式为:像声明基本类型的变量一样,对象声明的一般形式为:类名类名 对象名对象名;2.为对象分配内存及初始化为对象分配内存及初始化 分配内存及初始化形式如下:分配内存及初始化形式如下:对象名对象名=new 构造方法名构造方法名(参数表参数表);创建对象首
48、先需说明新建对象所属的类,由与类同名的构造方创建对象首先需说明新建对象所属的类,由与类同名的构造方法给出;然后要说明新建对象的名字,即赋值号左边的对象名;法给出;然后要说明新建对象的名字,即赋值号左边的对象名;赋值号右边的赋值号右边的new是为新建对象开辟内存空间的运算符,用是为新建对象开辟内存空间的运算符,用new运算符开辟新建对象的内存之后,系统自动调用构造方法初始运算符开辟新建对象的内存之后,系统自动调用构造方法初始化该对象。若类中没有定义构造方法,系统会调用默认的构造化该对象。若类中没有定义构造方法,系统会调用默认的构造方法。方法。2023-1-27 11:22第 49 页4.2.1
49、创建对象3.对象的使用对象的使用对象的使用是通过一个引用类型的变量来实现,包括引用对象的使用是通过一个引用类型的变量来实现,包括引用对象的成员变量和方法,通过运算符对象的成员变量和方法,通过运算符“”可以实现对变量可以实现对变量的访问和方法的调用。使用对象的基本形式如下:的访问和方法的调用。使用对象的基本形式如下:.例如:例如:BirthDate date;int day;day=date.day;/引用引用date的成员变量的成员变量daydate.tomorrow();/调用调用date的方法的方法tomorrow()例例4.9 2023-1-27 11:22第 50 页4.2.2 定义和
50、使用构造方法v构造方法是类的一种特殊方法,它的特殊性主要体现在如构造方法是类的一种特殊方法,它的特殊性主要体现在如下几个方面:下几个方面:构造方法的方法名与类名相同。构造方法的方法名与类名相同。构造方法没有返回类型。构造方法没有返回类型。构造方法的主要作用是完成对象的初始化工作。构造方法的主要作用是完成对象的初始化工作。构造方法不能像一般方法那样用构造方法不能像一般方法那样用“对象对象.”显式地直接调用,显式地直接调用,应该用应该用new关键字调用构造方法为新对象初始化。关键字调用构造方法为新对象初始化。定义了构造方法之后,就可以用如下的语句创建并初始化定义了构造方法之后,就可以用如下的语句创
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。