Java程序设计精编教程58篇知识点.doc_第1页
Java程序设计精编教程58篇知识点.doc_第2页
Java程序设计精编教程58篇知识点.doc_第3页
Java程序设计精编教程58篇知识点.doc_第4页
Java程序设计精编教程58篇知识点.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章 类与对象5.1 面向对象的特性面向对象与人类认识世界的思维方式一致,即抽象相同性质的事物形成某种概念。面向对象的特性:1) 封装性。通过抽象,从具体的实例中抽取共同的性质形成一般的概念,比如类的概念。类将数据和对数据的操作封装在一起。类的实例就是对象。 2) 继承性。子类可以继承父类的属性和功能,同时又可以添加子类独有的属性和功能。3) 多态性。a) 一种是操作名称的多态,即多个方法具有相同的名字,但参数不同。(重载)b) 另一种是和继承有关的多态,即相同类型的对象调用同一方法时可能产生不同的行为。5.2 类类是组成Java程序的基本要素。类封装了一类事物共有的属性和功能,类是创建对象的模板。类的实现包括两部分:类声明和类体。基本格式为:class 类名 /类的声明 类体的内容/类体类名的首字母要大写,如Dog。当类名由几个“单词”组合而成时,每个单词的首字母要大写,如 PersianCat。类体的内容由两部分构成:a) 变量的声明:用来描述数据(体现对象的属性);b) 方法的声明:方法可以对类中声明的变量进行操作(体现对象的功能)成员变量类的成员变量可以是Java中的任何一种数据类型,包括基本类型和引用类型。成员变量在整个类内都有效,其有效性与它在类体中的位置无关。建议在类体中先声明变量,再声明方法。声明成员变量时可以同时赋初值(定义初始化),表明类所创建的对象的初始状态。成员变量的命名应遵守如下规则:a) 变量名的首字母要小写。b) 如果变量名由多个单词组成,从第2个单词开始的每个单词的首字母要大写。方法方法的定义包括两部分:方法声明和方法体。一般格式为:方法声明部分 方法体的内容 方法声明方法声明包括返回值类型、方法名和参数。double getArea() /返回值类型为double,无参数。方法的返回值类型可以是Java中的任意数据类型。如果一个方法不返回数据,返回值类型必须是void。方法的参数可以是Java中的任意数据类型。方法的命名规则和变量的命名规则一致。方法体方法体中声明的变量和方法的参数都是局部变量, 局部变量只在声明它的方法内有效,而且与其声明的位置有关。方法的参数在整个方法内有效;方法内的局部变量从声明位置后开始有效;复合语句中的局部变量只在复合语句中有效。方法中的局部变量没有默认值,使用前必须初始化。如果局部变量的名字与成员变量的名字相同,成员变量会被隐藏。要使用被隐藏的成员变量,必须使用关键字this。在声明成员变量时可以赋初值(定义初始化),但对成员变量的操作只能在方法中进行。5.3 构造方法与对象的创建构造方法构造方法是类中的一种特殊方法,用类创建对象时需要使用构造方法。构造方法的名字必须与它所在的类的名字完全相同,而且没有返回值类型。允许在一个类中编写若干个构造方法,但必须保证他们的参数不同。如果类中没有编写构造方法,编译时会自动添加一个默认构造方法,它是无参数的空构造方法。如果类中定义了一个或多个构造方法,编译时不会自动生成默认构造方法。不能编程调用构造方法,构造方法只能在new对象时被自动调用。创建对象创建对象需要声明对象和为对象分配成员变量两个步骤。(例5-2)对例5-2中的p1对象进行内存分析。声明对象时:Point p1; 创建对象时:p1=new Point(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.8 this关键字this只能出现在实例方法和构造方法(也属于实例方法)中,表示调用该方法的当前对象。一般情况下,方法中this.实例变量的this可省略、类名.类变量的类名可省略,但当局部变量与成员变量同名时,this或类名不能省略。5.9 包包是Java语言管理类的一种机制,类似于操作系统中的目录,使用包名可以有效区分名字相同的类。包语句package语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。例如,package .hrbcu;包名一般由企业或组织的域名倒置而成。如果源文件中省略了package语句,源文件中所定义的类默认属于无名包,不建议使用无名包。有包名的类的字节码的存储结构有包名的类编译生成的字节码文件必须放入与包名相对应的目录结构中。可以使用“javac -d 目标目录 源文件”命令在目标目录中创建与源文件的包名相对应的目录结构并将编译生成的字节码文件放入其中。运行有包名的主类Java程序运行时如果用到某个有包名的类,必须能够找到与包名相对应的目录结构以及放在其中的字节码文件。默认会在当前目录查找。运行主类时,必须写主类的全名(包名.主类名)假设要在D:code中运行主类aaa.bbb.Test,可以将所有用到的类的源文件拷贝到D:code中,在D:code中执行:javac -d . *.java(.表示当前目录)java aaa.bbb.Test5.10 import语句使用import语句,可以引入其他包中的类,这样就不用写类的全名。引入类库中的类如果用户需要使用java类库中的类,可以使用import语句引入它们。一个Java源程序中可以有多条import语句,它们必须写在package语句(假如有package语句的话)和源文件中类的定义之间。引入某个类:例如,import java.util.Date;引入包中的所有类:例如,import java.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 子类的继承性子类对象包含父类对象(所有父类及其自身的成员变量都要开辟内存并初始化)。子类的继承性是指父类的成员变量和方法在子类中是否可用。(例6-1)如果子类和父类在同一个包中,那么子类继承父类中非private的成员变量和方法。如果子类和父类不在同一个包中,那么子类继承父类中protected、public的成员变量和方法。继承的成员变量和方法的访问权限不变。6.3 成员变量隐藏和方法重写如果子类中声明的成员变量与从父类继承的成员变量同名(类型可以不同),继承的成员变量会被隐藏。如果子类可以继承父类的某个方法,那么子类就有权重写这个方法。方法重写(override):子类中定义一个方法,这个方法的返回值类型和父类的某方法的返回值类型一致或者是其子类型,并且这个方法的名字、参数个数、参数的类型和该父类方法完全相同。(例6-2)子类通过方法重写可以隐藏继承的方法,把父类的行为改变为自身的行为。重写父类方法时,不可以降低方法的访问权限。6.4 super关键字用法一:使用super关键字访问被子类隐藏的父类的成员变量和方法。例如:super.x,super.play()。用法二:使用super调用父类的构造方法。子类必须在其构造方法的第一条语句中使用super调用父类的某个构造方法,如果没有显式调用,默认会调用父类无参数的构造方法。(例6-5)子类对象的构造过程:为继承链中各个类的成员变量分配内存空间并进行默认初始化;自上而下对每个类的成员变量执行定义初始化和构造初始化。6.5 final关键字final类不能被继承,final方法不能被重写。用final修饰的成员变量或局部变量是常量。声明常量时必须赋初值。6.6 对象的上转型对象子类对象一定是父类对象,反之则不然。如果把子类对象b的引用赋值给父类对象a,则a为b的上转型对象。好比,把老虎当成哺乳动物来用。上转型对象会失去原对象的一些功能。可以将上转型对象再强制转换成一个子类对象,这时该对象又具备了子类的所有功能。上转型对象只能调用父类的方法,但当调用父类的某个被子类重写了的实例方法时,它知道自己其实是子类对象,它会去调用子类重写的实例方法(这种花招是为了实现多态特性)。(例6-7)6.7 继承与多态多态:相同类型的上转型对象调用同一方法时可能产生不同的行为。(例6-8)通过多态特性可以实现面向抽象的编程。6.8 abstract类和abstract方法抽象类:用关键字abstract修饰的类。抽象方法:用关键字abstract修饰的方法。抽象方法只允许声明,不允许实现(没有方法体)。抽象方法不能用final修饰。含有抽象方法的类必须是抽象类。抽象类的特点1) 抽象类中可以有抽象方法,也可以有非抽象方法。2) 如果一个非抽象类是某个抽象类的子类,那么它必须重写抽象类的抽象方法,并给出方法体。3) 不能用抽象类new对象。抽象类的作用是让抽象类声明的对象成为其非抽象子类创建的对象的上转型对象,从而通过多态特性实现面向抽象的编程。6.9 面向抽象编程为了使程序可扩展、易维护,设计程序时应当遵循“开-闭原则”。“开-闭原则”:一个应用程序应当对扩展(增加新类)开放,对修改(修改现有类)封闭。“面向抽象编程”可以很好地体现“开-闭”原则,其核心思想如下:1) 抽象细节将易变化的部分抽象为一个抽象类。比如,对于柱体,不同形状的底有不同的求面积方法,可以将底抽象为含有抽象getArea()方法的抽象类Geometry。2) 面向抽象设计类面向抽象类设计一个类。比如,在Pillar类中,声明抽象类Geometry的对象作为柱体的底。最终,Pillar类的设计符合“开-闭原则”,对于新的底部形状,只要增加相应的Geometry类的子类即可,Pillar类根本不用修改。简答题1. 子类可以继承父类的哪些成员变量和方法(分两种情况)?2. 子类继承下来的父类的成员变量和方法在什么情况下会被隐藏?3. super的作用是什么?4. 什么是上转型对象?上转型对象有什么特点?5. 举例说明什么是多态?程序设计1. Human类和Student类的类图如下所示。在主类Homework1中创建一个Student对象,输出它的身份证号码、身高、体重和学号,并调用它的think和exam方法。2. 哺乳动物类Mammal有一个公共的抽象方法cry(),其子类Dog、Cat和Cow重写了cry()方法,行为分别是“汪汪”、“喵”和“哞”。java.lang.Math类的类方法random()可以产生0,1)的double值,利用它随机产生整数0、1、2,产生0创建Dog对象,产生1创建Cat对象,产生2创建Cow对象。随机产生8个对象放入长度为8的Mammal类型数组中,遍历该数组,调用每个mammal对象的cry()方法。第7章 接口7.1 接口接口是一种引用数据类型。接口是一种纯抽象的功能封装体。接口声明:public interface Printable int MAX=100; /等价于public static final ,即公共类常量 void print();/等价于public abstract ,即公共抽象方法。 7.2 实现接口一个类只能继承一个父类,但可以通过实现接口来不断扩展功能。实现接口类似于继承抽象类。一个类可以使用关键字implements声明自己实现一个或多个接口。例如:public class A implements Computable,Printable;如果一个类实现了某个接口,这个类就必须重写该接口的所有方法(否则它必须成为抽象类),被重写的方法必须用public修饰。如果父类实现了某接口,子类就自然实现了该接口。可以使用关键字extends声明一个接口是另一个接口的子接口,子接口将继承父接口的全部常量和方法。7.3 理解接口接口的思想在于它可以封装很多类都需要的功能,实现相同接口的类不需要有继承关系。7.5 接口回调接口回调:如果把实现了某一接口的类创建的对象的引用赋给该接口声明的变量,该接口变量就可以调用被实现类重写的接口方法。(例7-2)接口回调与上转型对象回调子类重写的方法的原理是一样的。7.6 接口与多态相同接口类型的上转型对象调用同一方法时可能产生不同的行为。(例7-3)7.7 接口变量做参数如果一个方法的参数是接口类型,就可以将任何实现了该接口的类的对象传递给该接口参数,该参数可以回调实现类重写的接口方法。(例7-4)7.8抽象类与接口的比较相同点:抽象类和接口都可以有抽象方法;都是抽象概念,不能用来new对象。不同点:接口中只能有常量,不能有变量,而抽象类中可以有变量;抽象类中可以有非抽象方法,接口不可以。抽象类声明的的变量只能作为其非抽象子类创建的对象的上转型对象,接口声明的变量只能作为实现了该接口的类创建的对象的上转型对象。设计原则:1) 当一个概念既有变量和非抽象方法供子类继承,又有抽象方法需要子类重写时,使用抽象类比较合适。2) 当很多不一定具有继承关系的类都需要一组功能时,把它们封装为接口比较合适。7.9 面向接口编程通过抽象类可以实现面向抽象编程,对程序中易变化的部分应用“开-闭原则”。接口是一种更加抽象的概念,也可以实现面向抽象编程。(例7-5)简答题1. 抽象类与接口的相同点和不同点是什么?2. 什么是接口的回调?程序设计1. 接口Sound中有一个方法sound(),实现了该接口的类Piano、Radio和Bird重写了sound()方法,行为分别是“清脆的1234”、“播放广播”和“叽叽喳喳”。java.util.Random类有产生随机整数的方法,利用它随机产生整数0、1、2,产生0创建Piano对象,产生1创建Radio对象,产生2创建Bird对象。随机产生8个对象放入长度为8的Sound类型数组中,遍历该数组,调用每个Sound对象的sound()方法。第8章 内部类与异常类8.1 内部类可以在一个类中声明另一个类,这样的类称为内部类,包含内部类的类称为外嵌类。内部类一般仅供它的外嵌类使用,内部类可以访问外嵌类的所有成员和方法。8.2 匿名类Java允许使用一个类的构造方法和其子类的类体创建一个子类对象,此类体被认为是一个子类去掉类声明后的类体,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论