您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > Java程序设计精编教程5-8章知识点
第5章类与对象5.1面向对象的特性面向对象与人类认识世界的思维方式一致,即抽象相同性质的事物形成某种概念。面向对象的特性:1)封装性。通过抽象,从具体的实例中抽取共同的性质形成一般的概念,比如类的概念。类将数据和对数据的操作封装在一起。类的实例就是对象。2)继承性。子类可以继承父类的属性和功能,同时又可以添加子类独有的属性和功能。3)多态性。a)一种是操作名称的多态,即多个方法具有相同的名字,但参数不同。(重载)b)另一种是和继承有关的多态,即相同类型的对象调用同一方法时可能产生不同的行为。5.2类类是组成Java程序的基本要素。类封装了一类事物共有的属性和功能,类是创建对象的模板。类的实现包括两部分:类声明和类体。基本格式为:class类名{//类的声明类体的内容//类体}类名的首字母要大写,如Dog。当类名由几个“单词”组合而成时,每个单词的首字母要大写,如PersianCat。类体的内容由两部分构成:a)变量的声明:用来描述数据(体现对象的属性);b)方法的声明:方法可以对类中声明的变量进行操作(体现对象的功能)成员变量类的成员变量可以是Java中的任何一种数据类型,包括基本类型和引用类型。成员变量在整个类内都有效,其有效性与它在类体中的位置无关。建议在类体中先声明变量,再声明方法。声明成员变量时可以同时赋初值(定义初始化),表明类所创建的对象的初始状态。成员变量的命名应遵守如下规则:a)变量名的首字母要小写。b)如果变量名由多个单词组成,从第2个单词开始的每个单词的首字母要大写。方法方法的定义包括两部分:方法声明和方法体。一般格式为:方法声明部分{方法体的内容}方法声明方法声明包括返回值类型、方法名和参数。doublegetArea(){//返回值类型为double,无参数。…}方法的返回值类型可以是Java中的任意数据类型。如果一个方法不返回数据,返回值类型必须是void。方法的参数可以是Java中的任意数据类型。方法的命名规则和变量的命名规则一致。方法体方法体中声明的变量和方法的参数都是局部变量,局部变量只在声明它的方法内有效,而且与其声明的位置有关。方法的参数在整个方法内有效;方法内的局部变量从声明位置后开始有效;复合语句中的局部变量只在复合语句中有效。方法中的局部变量没有默认值,使用前必须初始化。如果局部变量的名字与成员变量的名字相同,成员变量会被隐藏。要使用被隐藏的成员变量,必须使用关键字this。在声明成员变量时可以赋初值(定义初始化),但对成员变量的操作只能在方法中进行。5.3构造方法与对象的创建构造方法构造方法是类中的一种特殊方法,用类创建对象时需要使用构造方法。构造方法的名字必须与它所在的类的名字完全相同,而且没有返回值类型。允许在一个类中编写若干个构造方法,但必须保证他们的参数不同。如果类中没有编写构造方法,编译时会自动添加一个默认构造方法,它是无参数的空构造方法。如果类中定义了一个或多个构造方法,编译时不会自动生成默认构造方法。不能编程调用构造方法,构造方法只能在new对象时被自动调用。创建对象创建对象需要声明对象和为对象分配成员变量两个步骤。(例5-2)对例5-2中的p1对象进行内存分析。声明对象时:Pointp1;创建对象时:p1=newPoint(10,10);为p1的成员变量x和y分配内存空间,执行默认初始化(整型变量的初值为0,浮点型变量的初值为0.0,布尔型变量的初值为false,引用型变量的初值为null),将内存空间的引用赋给p1。执行定义初始化(Point类的成员变量未进行定义初始化)。(默认初始化后)(构造初始化后)执行构造方法中的代码(构造初始化)。使用对象对象操作自己的变量:对象.变量;对象调用类中的方法:对象.方法。对象调用方法时,方法中出现的成员变量是指分配给该对象的成员变量。对象的引用和实体存放对象的所有成员变量的内存区域称为对象的实体,对象中存放指向实体的引用。没有实体的对象称为空对象(刚声明的对象就是空对象),空对象不能使用。如果使用空对象(如对象.变量或对象.方法),程序运行时会出现NullPointerException异常。Java虚拟机的垃圾收集器会定期检测不再被任何对象引用的实体(垃圾),发现垃圾就释放其内存。5.4参数传值在Java中,方法的参数都是传值的,即方法中参数变量的值是调用者指定的值的复制。在方法中改变参数的值,不会影响向参数“传值”的变量的值。基本类型参数的传值:对于基本类型的参数,向其传递的值的级别不可以高于该参数的级别。(例5-4)引用类型参数的传值:当参数是引用类型时,“传值”传递的是变量中存放的“引用”。改变参数变量所引用的实体,原变量的实体会发生同样的变化;改变参数中存放的引用不会影响向其传值的变量中存放的引用。(例5-5)5.5对象的组合一个类可以把对象作为自己的成员变量,如果用这样的类创建对象,对象中就会有其它对象,这种关系常被称为“Has-A”(关联关系),例如,汽车对象包含车轮,车门、发动机等对象。如果A类依赖B类的服务,则A和B是依赖关系,称A依赖于B。依赖关系体现在方法的参数、方法中的局部变量以及对静态方法的调用上。5.6实例成员与类成员用关键字static修饰的成员变量称为类变量(也称为静态变量),否则称为实例变量。实例变量和类变量的区别1)实例变量与具体对象相关。分配给不同对象的实例变量占据不同的内存空间,改变一个对象的实例变量不会影响其他对象的实例变量。2)所有对象共享类变量。类第一次使用时,类中的类变量就被分配了相应的内存空间,并执行默认初始化和定义初始化。类变量只分配一处内存,类的所有对象共享类变量。访问实例变量和类变量(例5-7)1)类变量与类相关联并被类的所有对象共享,因此既可以通过类名访问类变量(类名.变量),也可以通过类的对象访问类变量(对象.变量)。2)实例变量与具体对象相关,因此只能通过对象访问实例变量,不能通过类名访问。方法的返回值类型前面加关键字static修饰的是静态方法,否则是实例方法。实例方法和类方法的区别1)对象调用实例方法。a)在实例方法中,不仅可以操作实例变量,也可以操作类变量,方法中出现的实例变量是分配给该对象的实例变量。b)在实例方法中,不仅可以调用实例方法,也可以调用类方法。2)类名调用类方法a)在类方法中,只能调用类方法、操作类变量。b)也可以通过对象调用类方法。c)如果一个方法不需要操作实例变量就可以实现某种功能,可以考虑将其声明为类方法。(例5-8)5.7方法重载与多态Java中有两种多态:重载(overload)和重写(override)。方法重载(overload):一个类中可以有多个名字相同的方法,但这些方法的参数必须不同,或者参数的个数不同,或者参数的类型不同。方法的返回值类型与重载无关。5.8this关键字this只能出现在实例方法和构造方法(也属于实例方法)中,表示调用该方法的当前对象。一般情况下,方法中this.实例变量的this可省略、类名.类变量的类名可省略,但当局部变量与成员变量同名时,this或类名不能省略。5.9包包是Java语言管理类的一种机制,类似于操作系统中的目录,使用包名可以有效区分名字相同的类。包语句package语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。例如,packagecn.edu.hrbcu;包名一般由企业或组织的域名倒置而成。如果源文件中省略了package语句,源文件中所定义的类默认属于无名包,不建议使用无名包。有包名的类的字节码的存储结构有包名的类编译生成的字节码文件必须放入与包名相对应的目录结构中。可以使用“javac-d目标目录源文件”命令在目标目录中创建与源文件的包名相对应的目录结构并将编译生成的字节码文件放入其中。运行有包名的主类Java程序运行时如果用到某个有包名的类,必须能够找到与包名相对应的目录结构以及放在其中的字节码文件。默认会在当前目录查找。运行主类时,必须写主类的全名(包名.主类名)假设要在D:\code中运行主类aaa.bbb.Test,可以将所有用到的类的源文件拷贝到D:\code中,在D:\code中执行:javac-d.*.java(’.’表示当前目录)javaaaa.bbb.Test5.10import语句使用import语句,可以引入其他包中的类,这样就不用写类的全名。引入类库中的类如果用户需要使用java类库中的类,可以使用import语句引入它们。一个Java源程序中可以有多条import语句,它们必须写在package语句(假如有package语句的话)和源文件中类的定义之间。引入某个类:例如,importjava.util.Date;引入包中的所有类:例如,importjava.util.*;(不会引入java.util子包下的类)java.lang包是Java语言的基础包,系统会自动引入该包,用户不必引入该包。引入自定义包中的类简单的做法是,把被引入的类与其它类的源文件放在一个目录中,然后使用javac–d.*.java编译所有源文件,再在那个目录中执行主类。如果被引入类的字节码文件及其目录结构没有和其它类的放在一起,例如,放在D:\lib中,就需要设置classpath环境变量(作用是设置字节码搜索路径),将“D:\lib”加入classpath中(如果classpath中没有设置当前目录“.”,还需要加入“.”),再在主类字节码及其目录结构所在目录中执行主类。5.11访问权限访问权限是指在类的外部,类创建的对象能否通过“.”访问成员变量和方法,能否同过“类名.”的方式访问类变量和类方法。在类的内部,实例方法可以访问所有方法和成员变量,类方法可以访问所有类方法和类变量,与访问权限没有关系。成员访问权限(由低到高)private成员:类外部不可访问。友好成员:同包的类可访问。protected成员:友好+子类可访问。public成员:随意访问。成员变量一般设为private,通过public方法对其进行访问。一般只把希望对外公开的方法设为public。public类和友好类public类:任何类都可使用。友好类:同包的类可使用。5.12基本数据类型的包装类Java类库提供了基本数据类型的包装类,这些类在java.lang包中,分别是Boolean、Byte、Short、Integer、Long、Character、Float、Double。这些包装类封装了很多实用方法。简答题1.类如何命名?类中的成员变量和方法如何命名?2.类变量什么时候被分配内存空间?实例变量什么时候被分配内存空间?类变量和实例变量有什么区别?3.什么叫方法的重载?构造方法可以重载吗?4.类中的实例方法可以操作类变量吗?类方法可以操作实例变量吗?5.类中的实例方法可以调用类方法吗?类方法可以调用实例方法吗?6.package语句的作用是什么?import语句的作用是什么?7.关键字this指什么?有什么作用?在类方法中可以使用this吗?8.类的成员的访问权限有哪些?类的访问权限有哪些?程序设计1.Cylinder类和Circle类的类图如下所示。在主类Homework1中创建一个Cylinder对象,输出它的底面积和体积;修改该对象的底面半径和高度,再输出底面积和体积。2.有一个类Singleton,为该类设计单例模式(该类只能有一个实例,且不能在类的外部new对象),只能通过该类的静态方法getInstance()获取该类的唯一对象。在主类Homework2中测试单例模式的有效性。第6章子类与继承6.1子类与父类子类继承父类的状态和行为,并根据需要增加新的状态和行为。使用关键字extends来声明继承关系。Java只支持单继承,即子类只能有一个父类。如果一个类未显式声明父类,它默认是Object类的子类。所有类(除Object类)的最终父类一定是Object类。6.2子类的继承性子类对象包含父类对象(所有父类及其自身的成员变量都要开辟内存并初始化)。子类的继承性是指父
本文标题:Java程序设计精编教程5-8章知识点
链接地址:https://www.777doc.com/doc-2878879 .html