面向对象的程序设计与Java.ppt

上传人:牧羊曲112 文档编号:6034394 上传时间:2023-09-16 格式:PPT 页数:58 大小:219.50KB
返回 下载 相关 举报
面向对象的程序设计与Java.ppt_第1页
第1页 / 共58页
面向对象的程序设计与Java.ppt_第2页
第2页 / 共58页
面向对象的程序设计与Java.ppt_第3页
第3页 / 共58页
面向对象的程序设计与Java.ppt_第4页
第4页 / 共58页
面向对象的程序设计与Java.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《面向对象的程序设计与Java.ppt》由会员分享,可在线阅读,更多相关《面向对象的程序设计与Java.ppt(58页珍藏版)》请在三一办公上搜索。

1、面向对象的程序设计与Java第4章 Java类,姓 名:武 装学 校:首都经济贸易大学院 系:信息学院邮 箱:,在日常生活中,在盖房子之前要首先设计一个建筑图纸,然后根据图纸来盖房子。所谓类,好比在日常生活中描述一个物品的信息,如房子的建筑图纸。而对象就好比实实在在的房子。所谓面向对象,是指编写程序的时候要围绕着一个对象的功能进行编写的。面向对象编程的缩写是OOP,全称为Object Oriented Programming。在进行面向对象的编程时,方法和成员变量都写在具体的对象里,并对其成员变量和方法有很好的隐藏性。对象之间的访问都是通过其接口进行的。,面向对象编程与面向过程编程的区别,面向

2、过程是指在遇到问题的时候,怎么去解决这个问题,而分析问题的步骤,就是解决这个问题的方法,是通过方法一步一步来完成的。,面向对象是指在遇到问题的时候,把问题分解成各自独立功能的类,而这个类是完成各自问题的。,面向过程和面向对象最明显的区别就是,面向对象是按照要完成的功能来实现的;而面向过程是按照解决这个问题的步骤来实现的。面向对象是按照程序中的功能进行划分的。面向过程是按照问题的解决思路来划分的,是一步一步来解决问题的。面向过程更看重的是完成问题的过程。面向对象更看重的是功能,通过各种功能模块的组合来完成问题。,什么是类所谓类是一种抽象的东西,描述的是一个物品的完整信息。比如房子和图纸的关系。在

3、Java里,图纸就是类,定义了房子的各种信息,而房子是类的实体。类的定义和对象的创建定义一个类表示定义了一个功能模块。下面先介绍如何定义一个类,以及如何创建这个类的实例,即对象。类是通过关键字class来定义的,在class关键字后面加上类的名称,这样就创建了一个类。在类里面可以定义类的成员变量和方法。类的语法代码如下所示。class 类的名称/类的成员变量/类的方法创建类的实例是通过new关键字来定义的,后面加上定义类时为类起的名称,需要注意的是在类名后还需要一个括号。创建类的实例的代码如下所示。new 类的名称();,如何使用现有类在定义一些类的时候,如何使用它们呢?这里需要分为多种情况。

4、定义的类可以在一个包下面,也可以不在一个包下面,这在使用时是不同的。类又分为已有类和自定义类,它们之间的使用也是有区别的。下面就通过范例来讲解在不同情况下如何使用类。【范例】在同目录下使用类。首先是定义一个bike类,在该类中不存在任何成员变量和方法,这里只是演示如何在同一目录下使用类。示例代码01/bike.java02 class bike03 04,接下来定义一个使用bike类的类。01/testBike.java02/在testBike类里使用了bike类03 class testBike04 05 bike b=new bike();06,类设计的技巧设计一个类要明确这个所要完成的功

5、能,类里的成员变量和方法是描述类的功能的。如果定义了和这个类不相关的成员变量和方法将不是一个良好的设计。【范例】示例代码是一个不太好的类设计。示例代码01public class bike0203/这个成员变量描述的是自行车的颜色.04String color=黄色;0506/这个成员变量描述的是公路赛车的颜色,所以在这里不太合适07String racing_color=绿色;在本程序中定义了一个表示自行车颜色的color成员变量,又定义了一个表示赛车颜色的racing_color成员变量;而该程序是定义的一个bike自行车类,所以定义表示赛车颜色的racing_color成员变量是不太好的

6、选择。,【范例】以下示例代码是一个良好的类设计。示例代码01public class bike0203/这个成员变量描述的是自行车的颜色04String color=黄色;0501public class racing0203/这个成员变量描述的是公路赛车的颜色04String racing_color=绿色;05【代码解析】在该范例中,定义了两个类。其中bike类中只定义了一个表示自行车颜色的color成员变量。同样在racing类中只定义了一个表示赛车颜色的racing_color成员变量。这种设计相对上一个范例中的设计要好得多,这样使类和成员变量相对应,也使别人更容易读懂代码。,所谓成员

7、变量就是这个类里定义的一些私有的变量.,这些变量是属于这个类的。就好比日常生活中的自行车的大小,即这个车子是26还是28的,这个尺寸就是自行车的成员变量,是描述这个自行车的。下面开始介绍成员变量。,成员变量描述的是这个类的一些属性或状态的,下面通过代码来演示怎么定义成员变量。语法为:变量的类型 变量的名称。【范例】创建成员变量的一般形式。示例代码01/bike类描述的是一个自行车02public class bike0304/这个成员变量描述的是自行车的颜色.05String color;0607/这个成员变量描述的是自行车的大小,即尺寸.08String size;09在该程序中,定义了一个

8、叫做bike的类,在该类中定义了两个成员变量,一个是表示自行车颜色的color成员变量,一个是表示自行车型号的size成员变量。,4.1 引用类型,Java数据类型分为基本类型和复合类型(引用类型),复合类型变量里存储的并不是复合类型数据(即对象)本身,而是指向复合类型数据的引用(引用值)。,类可以看作软件部件,一个Java程序就是由这些所谓的软件部件组成的。可以说,编写Java程序就是一个定义类的过程。,4.1 引用类型,这里x1和x2是两个基本型变量,r1和r2是两个复合型变量,即引用型变量。变量r1只是存储着一个指向该矩形实例的引用,把变量r1的值赋给变量r2,这样r1和r2就有相同的引

9、用值,即它们指向同一个对象。,4.2 类的定义与对象的创建,类定义的内容主要包括成员变量定义和成员方法定义两部分。成员变量的定义体现了对这类对象属性的抽象;而成员方法(简称方法)的定义则体现了对这类对象的行为的抽象。所有成员变量和方法的定义都包含在一对花括号内。类定义的一般格式如下:修饰符class类名 成员变量定义构造方法静态初始化块方法定义在类定义中,除了需要对成员变量和方法进行定义之外,还可以包括构造方法和静态初始化块。构造方法主要用于在创建类实例时初始化实例变量;静态初始化块主要用于在类装入时初始化类变量。,4.2 类的定义与对象的创建,用于说明类属性的修饰符包括:public、abs

10、tract、final。这3个修饰符的含义分别如下:public:用该修饰符说明的类可以被用于任何Java程序中,即任何包中的任何类都可以访问它,所以也称为公共类。没有用该修饰符说明的类只能被同一包中的类访问。abstract:用该修饰符说明的类称为抽象类。抽象类往往包含一个或几个没有实现的抽象方法,所以不能够创建实例。抽象类一般要被扩展产生子类。如果子类被声明为非抽象的,那么在其中就必须实现超类中声明的所有抽象方法。final:用该修饰符说明的类也称为最终类。final类不能被扩展,不会有子类。final类中的所有方法都隐含为final的。一个类不能同时用abstract和final修饰。一

11、个类用多个修饰符说明时,这些修饰符的次序无关紧要。比如,public、final和public的作用完全相同。,4.3 变量,在Java语言中,变量分为局部变量和成员变量两大类。,成员变量是指在类体中但在方法体外定义的量。其作用域是整个类。成员变量又分为实例变量和类变量。,局部变量是指在方法体内声明的变量,其作用域是从声明处开始至它所在的块语句结束。另外,方法中的形参,for句中定义的循环变量也都属于局部变量。,4.3 变量,局部变量的创建和初始化局部变量描述的是方法体的一些属性或状态的,下面通过代码来演示怎么定义局部变量。创建局部变量的基本语法为:变量的类型 变量的名称。【范例】演示局部变量

12、的例子。示例代码01/test类描述的是基本类型的初始化02public class test40304/程序的运行函数即主入口函数05public static void main(String args)0607/基本类型的局部变量08int size=123;09boolean b=true;10/打印并显示局部变量11System.out.println(size);12System.out.println(b);1314,4.3 变量,局部变量和成员变量的区别:局部变量描述的是这个方法体内的属性的,而成员变量描述的是这个对象里的属性的,它们之间的区别,即访问区别如下:成员变量可以被p

13、ublic、protected、default、private、static、final修饰符修饰。局部变量可以被final修饰符修饰,但不能修饰为public、protected、default、private、static。成员变量是系统默认值。局部变量没有系统默认值,必须手动赋值。,4.3 变量,4.3.1 变量的定义所有变量在使用之前都要明确进行定义。变量定义的格式如下:修饰符.类型名变量名=初始化表达式,变量名.=初始化表达式.;,用于说明变量属性的修饰符包括static、final、transient、volatile、public、private、protected。除了fina

14、l可以修饰局部变量,其他修饰符只能用于修饰类的成员变量。,4.3 变量,static:被static修饰的成员变量称为类变量(或静态变量),而没有被static修饰的成员变量称为实例变量。类变量在类装入时建立并初始化。类变量属于类,不管基于类创建多少个实例(或没有实例),类变量在内存中只保持一份。实例变量属于实例,在实例创建时建立和初始化。每一个实例都会在内存中保持一份属于自己的实例变量。,4.3 变量,final:用final修饰的变量(局部变量或成员变量)通常被称为有名常量。与普通变量不同,有名常量必须赋值且只能赋值一次。之后,有名常量的值就不能再被修改。可以在定义有名常量时包含一个初始化

15、表达式。修饰符final既可以修饰实例变量,也可以修饰类变量;既可以修饰成员变量,也可以修饰局部变量。final最常见的情况是用于修饰一个公共的类变量。比如,在类中定义了这样一个有名常量:这样的有名常量如果是定义在一个公共类中,那么就可以在任何代码中通过类名访问它,如Math.PI。有名常量的名字一般用大写来表示。,4.3 变量,transient:暂时性变量,用于对象存档。volatile:共享变量,用于并发线程的共享。告诉Java编译器该变量的值可能会被当前线程序外的其他线程改变。,4.3 变量,4.3.2 变量的初始化实例变量属于实例,当创建类的一个实例时,系统就会在内存建立和初始化属于

16、该实例的实例变量;类变量属于类。在需要时,系统会自动装入类并建立和初始化类变量。无论是实例变量还是类变量,在建立时,系统都会首先自动赋以一个默认的初始值。不同类型的成员变量会有不同的默认初始值。,数值型变量的默认初始值是零;字符型变量的默认初始值是unicode码为零的空字符;布尔型变量的默认初始值是false;引用型变量的默认初始值是null。null是一个具有任何引用类型的特殊文字,但null引用不涉及任何对象。,4.3 变量,类变量的初始化也可以通过静态初始化块来进行。静态初始化块是一个块语句代码放置在一对大括号内,大括号前用关键字static修饰:static.静态初始化块不是方法,它

17、的作用只是用来初始化类变量。静态初始化块内不能出现return语句,也不能以任何方式引用this和super,否则将导致编译错误。,4.3 变量,局部变量在方法体内定义,在方法每次被调用时建立,在方法执行完后释放。局部变量作用域是从定义处开始至它所在的块语句结束。与类的成员变量不同,局部变量在建立时,系统不会赋以一个默认的初始值,所以在引用局部变量的值之前,要对局部变量进行显式初始化或赋值。,4.3 变量,对成员变量的访问1.对实例变量的访问,实例变量是类的实例的属性,实例变量的值表达了一个实例的状态。每个实例都会有自己的一份实例变量。,实例变量属于类的实例。在某个其他类中要访问一个类内定义的

18、实例变量,要通过这个类的某个实例进行。也就是说,要访问的一定是某个实例的实例变量值。离开了实例,实例变量是不存在的。,4.3 变量,在类体外访问实例变量的格式是:.在类体内访问实例变量,也可以采用以下格式,其中关键字this指的是当前实例或当前调用方法的实例:this.在一个类内,不能有同名的成员变量。在相同作用域内,也不应该有同名的局部变量。但局部变量与成员变量可以同名。此时,简单地使用变量名将引用局部变量。如果要引用成员变量,则应该采用上述格式,即在变量名之前加this,两者之间用点(.)连接。,4.3 变量,2.对类变量的访问类变量属于类。不管是否存在类的实例,都可以通过类名访问类中定义

19、的类变量,即:.如果在类体内,则可简单地用变量名加以引用:类变量虽然属于类,但也能被类的所有实例所共享。,4.4 方法,方法每个人都有走、吃和睡等动作。在Java中,所谓方法就好比日常生活中的一个动作,是完成一系列操作的。在Java中也是如此,方法收到对象的信息,进行处理的操作。对象具有状态和行为两种属性:变量用来描述对象的状态;而方法则用来描述对象的行为,通过调用对象方法,可以返回对象的状态,改变对象的状态,或者与其他对象发生相互作用。,4.4 方法,方法定义方法定义的格式如下:修饰符.返回类型方法名(形参表)方法体方法的创建和参数方法的参数是提供外界在执行方法的时候提供给方法的特殊描述信息

20、的,好比日常生活中的,“用力砸东西”,“用大力砸东西”。而这个“用大力”就是提供给这个进行特殊描述的。方法的定义如下所示。public void add(int i,int n)System.out.println(i+n);代码说明:方法名称为add,有两个参数都是int类型的。方法体是打印i+n的值,并显示出来。方法的修饰符为public类型的,修饰符可有可无。,4.4 方法,方法的返回类型有很多种,主要分为如下几类:方法返回值为void类型时为无返回值。方法返回值还可以为任意的类型,如String、Boolean、int。如果定义了方法的返回类型就必须在方法体内用return把返回值进行

21、返回。方法的返回值可以为null,但必须是对象类型。基本类型不能返回null。在返回值为基本类型的时候,只要能够自动转换就可返回。,4.4 方法,方法的参数也有多种形式,下面是对方法参数的讨论:方法的参数可以为基本数据类型,也可以为对象引用类型。每个参数都有完整的声明该变量的形式。方法的参数可以有一个,也可有多个。Java程序的入口main就为一个方法,参数为String args,它是个特殊的方法。,4.4 方法,1.修饰符用于说明方法属性的修饰符包括static、final、abstract、native、synchronized、public、private、protected。(1)被

22、static修饰的方法称为类方法(或静态方法),而没有被static修饰的方法称为实例方法。实例方法与类方法的区别类似于实例变量与类变量的区别:实例方法属于实例,必须通过实例调用;类方法属于类,一般通过类名调用,但也可通过实例调用。类不能被修饰为abstract,否则将导致错误。,4.4 方法,(2)用final修饰的方法称为最终方法。最终方法不能在子类中被覆盖。最终不能被修饰为abstract,否则将导致编译错误。private方法以及final类中的所有方法隐含是final的。(3)用abstract修饰的方法称为抽象方法。抽象方法只提供方法名、形参表、返回型等,但不提供方法的实现,其方法

23、体只有一个分号(;),如:abstract int method(int i,int j);包含抽象方法的类一定是抽象类。抽象类不能生成实例。抽象类的子类必须实现类中声明的所有抽象方法或者自己也定义成abstract。抽象方法不能用static、final、private修饰,否则将导致编译错误。,4.4 方法,(4)用native修饰的方法称为本地方法。本地方法一般由与平台相关的程序设计语言(如C语言)编写实现。在类定义正文中,本地方法的方法体只是一个分号(;)。本地方法不能被修饰为abstract,否则将导致编译错误。(5)用synchronized 修饰的方法称为同步方法,用于保证多线程

24、之间的同步(每个Java程序可以创建多个线程,每个线程都可以完成一个相对独立的任务,且能够与其他线程并行运行)。,4.4 方法,2.返回类型方法定义既可以指明方法返回值的数据类型,也可以用关键字void指明该方法没有返回值。return语句的实际返回类型要与方法定义中的指定返回类型赋值相容,即:对基本类型,实际返回类型要与指定返回类型相同,或者能够赋值转换成指定返回类型。比如,指定返回类型为double,实际返回类型可以是int、long、floor、double等。对引用类型(类),实际返回类型要与指定返回类型相同(同一个类),或者是指定返回类型的一个子类。,4.4 方法,3.形参表形参表可

25、有可无。若包含形参,每个参数包括类型和名字,各参数之间用逗号分开,方法形参被看作是局部变量,其作用域是整个方法体。方法调用时,实参的数目与形参的数目要相同,实参值的类型与形参的类型要赋值。4.方法体对抽象方法和本地方法,方法体为分号。在其他情况下,方法体是块语句,所有的方法代码放置在一对大括号里。方法代码决定了方法的具体行为。,4.4 方法,4.4.2 方法调用方法调用的格式与成员变量访问的格式基本相似。在类体内,可直接用方法名调用:(实参表)在类体外,则应该通过实例调用。如果是类方法,则可通过类名调用:.(实参表).(实参表),4.4 方法,4.4.3 构造方法通常,每个实例都有自己的状态。

26、在书中82页例4-7中,首先创建类MyTime的一个实例,调用setMyTime方法设置实例的状态。如果在类中定义了适当的构造方法,那么这两步可以并成一步来完成。即在创建实例的同时设置实例的状态。构造方法的定义格式如下:访问修饰符类名(形参表)如果一个类中没有定义构造方法,那么会提供一个默认的构造方法。该默认构造方法有以下特性:没有形参;功能是调用直接超类(父类)中不带形参的构造方法(super(););访问级别取决于类的访问级别。如果类的访问级别为public,则默认构造方法的访问级别也是public;如果类的访问级别是默认的,则默认构造方法的访问级别也是默认的。,4.4 方法,然而,一个类

27、一旦定义了构造方法,系统就不再提供这个默认的构造方法。其他代码只能通过类中定义的构造方法来创建实例。构造方法与实例方法有着本质的区别。构造方法主要用于初始化实例的状态:一方面,构造方法只有在创建实例时被隐含调用;反过来,一个实例在创建时也必然会隐含调用某个构造方法。实例方法用于定义对象的行为。在对象的生存期内,程序代码可以根据需要通过对象调用其实例方法。在定义时要注意构造方法与成员方法的区别:构造方法只有访问修饰符(public、protected、private),不能使用其他修饰符。构造方法没有返回类型,而普通方法则一定有(包括void)。构造方法的返回类型可以被认为是类类型本身。构造方法

28、的方法名只能是类名,而普通方法的方法名则一般不采用类名。,4.4 方法,4.4.4 方法重载(method overload)方法定义由修饰符、返回类型、方法名、形参表和方法体等元素组成,其中方法名和形参表统称为方法签名。一个类内不能定义两个相同签名的方法,否则将导致编译错误。但是,一个类内可以定义几个方法名相同而形参不同(数目不同、类型不同或次序不同)的几个方法,这种情形被称为方法重载。比如一个类中有以下4个方法:int method(int i).int method(int i,int j).double method(int i,double x).double method(doub

29、le x,int i).,4.4 方法,以上属于方法重载:4个方法的方法名相同,但形参的数目不同或者对应位置上的形参类型不同。有个方法重载,一个类内就可能存在几个同名的方法。这样,在方法调用时到底哪个方法被调用,就不能由方法名惟一确定,而应该由方法名、实参的数目和各实参的类型来共同决定method(10);/调用第个方法method(10,20.0)/调用第个方法对重载方法的调用,也可能出现多个方法都是适用的情况。这时,系统将选择其中最恰当的方法。成员方法可以重载,构造方法同样能够重载。这样,一个类就可以定义多个具有不同形参的构造方法。使用者可以根据需要选择不同的构造方法创建和初始化实例。,4

30、.4 方法,4.4.5 类方法用static修饰的方法称为类方法或静态方法。类方法体的以下特点:类方法代码可以直接访问类内的类变量、调用类内其他类方法,也可以通过类名访问其他类的类变量、调用其他类的类方法,但不能直接访问类内的实例变量、调用类内的实例方法。这是因为类方法的调用不依赖于实例。没有实例,就谈不上实例变量的访问、实例方法的调用。实例方法与类方法不同,实例方法总是通过实例调用。当实例方法代码中出现类内的实例变量时,该实例变量就属于当前实例。类方法也可以访问实例、调用实例访问,但前提是自己持有实例,这个实例可以由类方法代码自己创建,也可以通过参数传递获得。最典型的例子是应用程序的main

31、方法。main方法是一个类方法,其代码不能直接访问实例变量或调用实例方法(即使是它所在类内的实例变量和实例方法),但是可以其内创建实例,然后通过实例访问实例变量或调用实例方法。,4.5 以对象为单位的信息传递,在一个面向对象的软件系统中,通常会有许多相互作用的,这些对象之间需要传递数据。数据传递的方式一般有两种:参数传递:调用方法的对象(发送对象)向包含方法的对象(接收对象)传递数据。方法返回:包含方法的对象(发送对象)向调用方法的对象(接收对象)传递数据。,4.5 以对象为单位的信息传递,4.5.1 用对象作为参数Java对参数传递有这样一条简单的规则:基本类型参数按值传递;引用类型参数按引

32、用传递。也就是说,在传递对象时,传递的是对象的引用而不是对象的副本。接收者与发送者实际上共享一个对象,因此发送者可以观察到接收者对对象所作任何修改。,4.5 以对象为单位的信息传递,4.5.2 将对象作为返回值如果方法定义的返回类型不是void,则方法执行时必须通过return语句返回一个相应类型的值。如果定义的返回类型是类,那么返回值应该是该类的一个实例,或者是该类的子类的一个实例。,4.6“has-a”关系,在现实世界里,许多复杂的对象总是由一些相对简单的对象组成的。比如,一架飞机由发动机、控制器、导航器等组成,一台计算机主机由控制器、运算器、存储器等组成。对象之间的这种整体(飞机)一部分

33、(发动机)关系通常也被称作为“has-a”关系,即“整体”对象(飞机)有一个“部分”对象(发动机)。反映到java 程序设计中,“has-a”关系意味着一个类中包含有一个引用类型的实例变量:类用于生成“整体”对象,引用变量指向“部分”对象。,4.7 对象清除,面向对象程序在运行时总是会创建一些对象,最后在不需要的时候消除对象。清除对象意味着回收对象所占用的内存空间,以便将这些空间提供给那些创建的、当前需要的对象。对一个复杂程序,如果不能及时清除对象,就有可能耗尽的内存资源,影响程序的正常执行。在Java中,对象清除由运行系统自动完成,称为垃圾收集,运行系统能够识别出哪些对象已不再被程序所需要。

34、而这些无用对象(垃圾)则会被系统自动清除(收集)。垃圾收集工作通常由一个被称为垃圾收集器的线程来完成。,4.7 对象清除,Java运行系统认为,当一个程序的所有活的线程都不存在有变量引用一个对象时,该对象即成为垃圾。收集这样的对象是安全的,因为对于程序来说不可能再有途径去引用这样的对象,收集这样的对象对程序的后续运行不会有任何影响。一个对象失去一个变量对其的引用,有下面3种情况:一个变量由引用某个对象变成引用另一个对象,这样原先那个对象就有可能成为垃圾对象。比如:Location p1=new Location(3,5);/p1引用一个新创建的对象.p1=new Location(1,5);/

35、p1引用另一个新创建的对象一个引用某个对象的变量被显式设置为引用型文字null。比如p1=null;一个引用某个对象的变量超出了其作用域范围而释放。比如:public void method()Location p2=new Location(3,5);return;,4.8 几个基本的类,介绍核心API中几个基本的类:Math、System和基本类型的包装类。这几个类都存放在java.lang包中。4.8.1 MathMath类包含一组实用的类方法,可用于完成一些常见的数学运算。另外类中还定义有两个double型常量:E(近似值为2.72)和PI(近似值为3.14)。该类是一个final类,

36、所以无法定义其子类;该类将默认的不带参数的构造方法定义成私有(private)的,使用者无法(也没有必要)创建这个类的实例。4.8.2 SystemSystem类定义了几个非常有用的类变量和类方法。与Math类一样,System类不能派生子类也不能实例化。类中的3个类变量in、out和err分别为标准输入流、标准输出流和标准错误输出流。,4.8 几个基本的类,4.8.3 基本类型的包装类在java中,每一种基本数据类型都有一个相应的包装类,这些类都在java,lang包中。8种基本数据类型所对应的包装类如表4-2所示。表4-2基本数据类型和对应的包装类,4.8 几个基本的类,按照类名的命名惯例

37、,所有包装类类名的第一个字母都采用大写,而作为语言关键字的基本类型名,其所有字母都为小写。另外,整型与字符型的基本类型名采用的是缩写(分别为int与char),而其包装类的类名则采用完整的英文单词。一个包装类的实例总是包装着一个相应的基本类型的值。需要注意的是,包装类的实例一旦生成,其所包装的基本类型值是不能改变的。,4.8 几个基本的类,引进基本类型包装类的两个主要目的如下:(1)在有些情况下,能够被处理的数据的类型只能是引用类型,此时可以通过包装类将基本类型数据包装起来,从而间接处理基本类型数据;(2)每个包装类都包含一组实用方法,其中很多是静态的。这些方法为处理某种基本类型数据提供了丰富

38、的手段。,4.8 几个基本的类,所有的包装类都有以下共性:每个包装类都被声明为final,即这些类都不能有子类。每个包装类都有一个构造器,可以通过一个相应的的基本型值生成实例。除了Character,其他包装类都有一个构造方法,可以通过一个表示相应基本型值的字符串生成实例。如果指定字符串不能表示一个有效的基本型值,那么除了Boolean,其他包装类的构造器会抛出NumberFormatException例外。Boolean类的这种构造器接受任意字符串,如果字符串为“true”(忽略大小写),则生成的实例ture,否则包装false。每个包装类都有一个实例方法xxxValue(),这里xxx是相

39、应的基本型名。使用该方法可以抽取并返回实例所包装的基本型值。每个包装类都有一个实例方法toString().使用该方法可以返回一个表示实例所包装的基本型值的字符串对象。除了Character,其他包装类都有一个静态方法valueOf(String s)。可以根据一个表示相应基本型值的字符串生成实例。,4.9 小结,(1)在Java中,成员变量分为实例变量和类变量(静态变量);方法分为实例方法和类方法(静态方法)(2)实例变量和实例方法属于实例。对实例变量的访问或对实例方法的调用一定是通过某个实例进行的。或者说,总是访问或调用某个特定实例的实例变量和实例方法。(3)实例变量在实例创建时建立和初始

40、化。每个实例在内存里有自己的实例变量的副本。(4)类变量和类方法不依赖于实例而属于类。对类变量的访问或对类方法的调用一般通过类(指定类名)进行,但也可以通过某个实例进行。,4.9 小结,(5)类变量在类装入时建立和初始化。不管一个类是否有实例被创建、有多少个实例被创建,这个类的类变量在内存里有且只有一个副本。(6)静态初始化块用于初始化类变量。一个类可以包含多个静态初始化块。这些静态初始化块在类装入时被自动地依次执行。(7)构造方法用于初始化实例变量。每当创建类的一个实例时,系统就会隐含地调用类中的某个构造方法。(8)一个类内可以定义几个方法名相同而形参不同(数目不同、类型不同或次序不同)的几

41、个方法,这种情形被称为方法重载。当一个重载方法被调用时,编译器通过分析调用的实参来选择合适的方法。(9)方法调用时,实参的数目与形参的数目要相同,实参的类型与对应形参的类型要赋值相容(不包括int型常量的缩窄型自动赋值转换)。,4.9 小结,(10)在java中,实参与形参之间的传递有明确的规则。对基本类型,参数之间按值传递;对引用类型,参数之间按引用传递。(11)如果方法定义指定的返回类型不是void,则方法体中应该包含带表达式的return语句。表达式的类型应该与方法指定的返回类型赋值相容。(12)“has-s”关系是指一个类中包含有一个引用类型的成员变量。它用于表达现在世界中的“整体”-“部分”关系。(13)当一个程序的所有活的线程都不存在有变量引用一个对象时,该对象即成为垃圾。垃圾对象的收集由一个被称为垃圾收集器的线程来完成。Java程序员没有责任显式地清除对象、释放对象占用的存储空间。,本章重点 理解引用类型的概念;理解局部变量与成员变量的区别;理解实例变量与类变量、实例方法与类方法的区别;理解并熟练掌握方法重载的概念及其使用;理解并熟练掌握构造方法的概念及其使用;掌握Math、System和各种基本类型包装类的使用。,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号