类与对象
第五章类与对象(之二)
授课教师:张俊峰
复习回顾:
类是对象的符号表示形式,是创建对象的模板;类可以定义对象的属性和可执行的操作(方法、事件),并定义保存对象状态(字段)的值。
在面向对象的概念里,现实世界的个体(对象)将抽象转化为程序中的对象,而个体(对象)的数据抽象转化为对象的数据成员,个体(对象)的特性抽象转化为对象的属性,个体(对象)的行为及处理问题的方法成为对象的方法。
类的实例是对象。对象可以执行类定义的操作,处理属于类的数据,可以通过调用对象的方法访问其属性、事件和字段,来访问对象的功能。
实例1:上节课作业---根据历法知识,所谓闰年是指输入的年份能被4整除,但不能被100整除;或者,能被400整除。试编程实现判断一个年份是不是闰年。
要点:定义一个日期类Tdate,这个类中拥有表达年、月、日的三个数据成员(即属性)month、day、year,另外,类中有一个判断是不是闰年的一个方法IsLeapYear。在定义完这个类之后,就可以由此类生成一个对象,使用该对象来表现自己就可以了。
5.2 实例构造函数
定义:实例构造函数是与类同名的特殊方法成员,它是实现初始化类实例所必需操作的成员,在C#中不允许使用为初始化的变量,因此在执行构造函数之前,对象是不可用的。
如果使用未初始化的变量,执行程序时会出现编译错误提示:使用了未赋值的局部变量。要初始化类变量,必须使用new运算符调用构造函数。如Person person1=new Person();
1、默认实例构造函数
在C#中,如果类不包含任何实例构造函数声明,则自动提供一个默认的无参数的实例构造函数,并使用默认值初始化对象字段:基本类型字段数据为0、bool字段为fale、引用类型为null。
注意:只有在类不包含任何构造函数声明的前提下,系统才自动提供一个默认的无参数构造函数。可以在类中定义一个无参数的构造函数,同时定义带参数的构造函数,这是实际上就成了构造函数的重载。
2、实例构造函数的重载
定义:实例构造函数是与类同名的特殊方法,当类定义中含有两个以上其参数个数或种类不同的实例构造函数时,称为实例函数的重载。当对不同数据类型进行操作时,重载非常有用,因为重载提供了对可用数据类型的选择,所以他使得实例构造函数的使用更加方便灵
活。
3、析构函数
定义:除了初始化类实例的构造函数之外,C#还提供了另外一个特殊的函数成员,即析构函数,析构函数用于销毁类的实例,释放被这些类的实例所占用的资源。析构函数没有任何参数,也不返回任何值,其函数名与类名相同,且在其前面加上符号~。析构函数是自动调用的,程序员无法控制何时调用析构函数。当任何代码都不在可能使用一个实例时,该实例就符合被销毁的条件。可以在实例符合被销毁条件之后的任何时间执行析构函数。程序退出是也会自动调用析构函数。
注意:一个类只能有一个析构函数,无法重载。系统能够提供默认析构函数,我们一般在析构函数里做释放资源等善后工作。
4、名称空间namespace
因为有许多人参加编写C#程序,所以不同程序员定义的类可能重名,如果某程序同时使用两个类,就可能造成命名冲突,命名空间通过为唯一类名提供一种约定,来尽量避免这个问题。在指定的命名空间中,两个类不能同名。但是,在不同的命名空间中类的名称可以相同。
注意:类库中的类不包含Main方法,这表明类库中的类不能用于开始一个应用程序的执行,类库中的类设计成功其他程序使用;类库代表的是一个程序集,要在其他项目中使用类库中的类,必须在对应项目中添加代表类库的程序集的引用;我们只能重用类库中的公共类。非公共类只能由同一程序集中其他类使用。
5、类成员可以分为静态成员和对象成员
类是类型而不是对象,一般在类里定义的成员是每个由此类产生对象都拥有的,因此可以称之为对象成员,但有时需要让类的所有对象在类的范围内共享某个成员,而这个成员不属于任何由此类产生的对象,它是属于整个类的,这种成员称之为静态成员。
类的成员要么是静态成员,要么是实例成员。一般来说,将静态成员看作属于类、将实例成员看作属于对象。
注意:静态成员必须用static修饰符;访问方法---类名.成员名称(对象.成员名称);
6、对象参数与返回值为对象
类是引用对象,引用类型变量的值为该变量引用对象的地址,类类型的变量包含对数据的引用(该变量称之为对象变量)。对于类,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。
对象作参数:传值和传引用。
方法的返回值可以与该方法所在类相同,也可以为其他对象。
7、方法的重载:
每个方法都有签名,方法的签名由方法名称以及它的每个形参的类型和种类(值、引用、输出)组成。具体说来,方法签名不包含返回类型。
在类中,如果声明了多个同名方法,但它们的签名不同,则称为方法的重载。
当方法对不同数据类型进行操作时,重载非常有用。方法的重载提供了对可用数据类型的选择,所以它使得方法的使用更加容易。
类,对象,实例
这样子同你说吧。类,他就是讲的一个种类。不懂?OK,比如人类。 这个“人”他们都有思维,都有眼睛鼻子等等共同的特征。他就叫做一个类。叫做“人类”。 还有“植物类”,这个“植物”它们都有根,叶子等等共同的特征。它就叫做一个类。 “张三”是个人,他只是人类中的一个特例,我们就把他叫做一个具体的对象。也就是C#中的对象。 一句话说完了,类都是一群对象的集合,里面包含了N多的对象。而对象只是类的一个特例。比如学校里有1000个学生,然后校长在广播里面喊:请张三同学到校长室来一下。这时候“李四,王五,赵六”等等听到广播,就知道,校长叫的是张三,而不是自己。所以张三李四王五这些都是这个学生类的一些特例(也就是一个个对象),他们除了有眼睛鼻子思维这些共同的特征之外,还有其他不同的地方,例如名字就是不同的。这样子比较通俗了吧。 实例就是“张三”这个名字。比如Student stu = new Student();stu就是一个实例。这个stu他就已经被实例化了。表示他是这个Student类里的一个对象。new他是为了把他实例化,让电脑内存知道,现在已经存在一个这样的对象了,然后你就可以使用这个对象了。
我想大家都吃过月饼,不知可有人知道月饼是怎么做出来的。做月饼是用模具的,把配好的月饼陷放进模具里一磕,拿出来就是一个月饼了。做铁杯子是的要用模具的,把熔化的铁的液体放在铁杯的模具里,冷却后,出来就是铁杯子了。现在这个模具就有了类别的吧,做月饼的叫做月饼类模具,做铁杯的叫做铁杯类模具,程序中的类就和这个类是一个意思的。人类,植物类,猪类,狗类,猫类,猴子类。。。都和程序中的类是一个意思。可见,一个类就是一种东西,它和其他类的东西是不一样的,人类和猪类是一样的吗?说这类有何意义呢?大家都知道月饼类模具是做月饼的,这类的模具就是做月饼的,把原料放进模具不就能出来月饼吗?出来这个月饼,我们叫什么?就叫月饼!更高度点叫什么呢?叫对象! 记住啊,把月饼的料放进月饼的模具里,能做出来月饼,这个月饼就是对象!而把料放进模具里,到做出来这一个过程,我们就称为:对象的实例化! 至此我们要搞清三个问题: 一,类:就是那个月饼的模具 二,对象:就是那个月饼 三,对象的实例化:就是把料放进模具里到成品出来这一过程 那么这个类能吃吗?不能,因为它是模具啊,只有当实例化后我们才能吃这个类产生出来的对象也就是月饼。 程序中啊,我们说的类与对象其实都可以按上述比喻来类比的。 我们创造了一个类,也就相当于我们发明了一个模具,往往我们并不
第4章-Java语言与面向对象作业习题与答案
第4章 Java语言与面向对象作业习题与答案 一、简答题 1.什么是对象?什么是类? 对象是一种抽象数据类型。它包含了事物的静态特征(属性)和动态特征(行为)两大特征。 类是一组同种对象的集合与抽象。即是具有相同属性和方法的一组对象集合。 2.Java语言的单继承是指什么? 一个类可以派生出多个子类,但子类只允许有一个父类,而不允许存在多个父类。 3.在一个共有类中的数据成员及方法成员的访问控制符为缺省,则这个类可供什么样的包引用? 当一个类的访问控制符为public共有时,表明这个类作为整体对其它类是可见和可引用的;但其数据成员和方法成员访问控制符为缺省时,它们只能被包中类(含当前类)引用。 4.抽象类的用途 (1)设计在更高的层次上进行,不考虑具体对象,从而大大简化了处理问题的复杂性; (2)设计出的类也具有更加良好的可扩展性。 5.什么是非静态的成员变量? 非静态成员即为实例成员变量(没有加static修饰的变量)。 6.异常Exception和错误Error有什么不同?Java如何处理它们? 答:错误通常是指程序本身存在非法情形,常常是因为代码存在问题而引起的,如造成系统崩溃、虚拟机粗错、动态失败等,这一类错误无法恢复或不可能捕获,并将导致应用程序中断。 异常表示另外一种“非同寻常”的错误。这种错误通常是不可预测,但可以被捕获且可以恢复。常见的异常情况包括存不足、找不到所需文件等。 对于错误,编程人员可以通过对程序进行更仔细的检查,以避免这种错误。 对于异常,可以使用捕获机制进行捕获,再编写出相应的处理程序。 7.简单述Java的异常处理机制。 答:Java采取“抛出—捕获”的方式,一旦一个异常想象产生,Runnable环境和应用程序会抛出各种标准类型和自己定义的异常,系统就可以捕获这些异常,并一定有相应的机制来处理它,确保不会产生司机、死循环或其它对操作系统的损害,从而保证了整个程序运行的安全性。 8.简单述throw语句和throws关键字之间的差别。 答:throw语句是在一个方法中用来直接抛出异常对象,其格式是: throw 异常对象; throws关键字是用一个方法声明首部,用来指出这个方法中可能产生若干种异常,其格式:[方法修饰符] 返回类型方法名(参数表)throws 异常类型表 { /*方法体*/ } 二、填空题 1.所有Java应用程序都必须包含的一个类方法是 main() 。 2.面向对象程序设计语言的三种重要特性是封装性、继承性和多态性。
JAVA类和对象的关系
1、JAVA中的参数传递问题(理解内存图) 基本类型:形式参数的改变对实际参数没有影响 引用类型:形式参数的改变直接影响实际参数 2、面向对象(理解,升就业班问说说什么是面向对象和思想特点) 1、面向对象(从三点回答) A面向过程是以函数为基础,完成各种操作,强调的是过程 B面向对象以对象为基础,完成各种操作,强调的是对象,结果 C面向对象是基于面向过程的 2、面向对象的思想特点: a)是一种更符合人们思考习惯的思想 b)把复杂的事情简单化 c)把我们从执行者变成了指挥者 3、举例: a)买电脑 b)洗衣做饭 c)旅游 d)把大象装进冰箱(伪代码体现) 4、事物是如何体现的 a)属性有哪些特征名词提取法 b)行为有哪些功能 5、类与对象的关系(掌握) 把事物转换成类 A:成员变量 定义在类中,方法外 B:成员方法 和以前的区别是去掉static 把这个说完还没有说道类与对象的概念,对不对 类:是相关的属性和行为的集合,集合就是一堆东西,是一个抽象的概念 对象:是某种事物的具体的存在,具体的表现形式 举例: 学生:类 对象:小明 6、案例 A学生类 B手机类 C汽车类(在这里画了内存图,有空看一下) 7、如何使用呢 a)创建对象 i.格式 a)类名变量= new 类名() b)使用成员变量和成员方法
i.对象名.成员变量 ii.对象名.成员方法 8、成员变量和局部变量的区别(理解) A 定义位置 成员变量:在类中方法外 局部变量,在类中方法中,或者方法上的形式参数 B 初始化的区别 成员变量:有默认的初始化值 局部变量:无 C 存储位置 成员变量:堆随着对象的存在而存在 局部变量:栈随着方法的存在而存在 9、匿名对象 a)概念:没有名字的对象 b)使用场景 i.当对象中的方法只掉用一次的情况下使用(一般不用,测试时使用)new Student().sayHello(); ii.匿名对象作为实际参数传递
实验2 类和对象(一)
实验2 类和对象(一) 1、实验目的 (1)掌握声明类的方法,类和类的成员的的概念以及定义对象的方法。 (2)初步掌握用类和对象编制基于对象的程序。 (3)学习检查和调试基于对象的程序。 2、实验内容 (1)有以下程序: #include JAV A类和对象及数组习题 一、选择题 (1)下列构造方法的调用方式中,正确的是(D )--原因:在通过new实例化一个类对象时系统会自动调用该类相应的构造方法。 A.按照一般方法调用B.由用户直接调用 C.只能通过new自动调用D.被系统调用 (2)在Java中,能实现多重继承效果的方式是(C )--原因:一个类可以同时实现多个接口。Java接口反映了对象较高层次的抽象,还弥补了Java只支持单继承的不足,可用它来完成多继承的一些功能。 A.内部类B.适配器C.接口D.同步 (3)int型public成员变量MAX_LENGTH,该值保持为常数100,则定义这个变量的语句是( D )—原因:java中定义常量用关键字final来定义。 A.public int MAX_LENGTH=100 B.final int MAX_LENGTH=100 C.public const int MAX_LENGTH=100 D.public final int MAX_LENGTH=100 (4)下列叙述中,正确的是( A )—原因:Java严格区分大小写,所以变量number 与Number不相同;Java 中的注释方式除了“//”行注释之外还有段注释“/*-------*/”和文档注释/**-------*/。Java源文件中的public类只能有一个。 A. 声明变量时必须指定一个类型 B. Java认为变量number与Number相同 C. Java中唯一的注释方式是"//" D. 源文件中public类可以有0或多个 (5)下列叙述中,错误的是( D )—原因:子类继承父类,并且可以有自己的成员变量和成员方法。所以可以认为子类是父类的扩展。 1 第1章面向对象软件开发概述 2 1.简述面向过程问题求解和面向对象问题求解的异同。试列举出面向对象和面向3 过程的编程语言各两种。 4 答:面向过程问题求解,以具体的解题过程为研究和实现的主体,其思维特点更5 接近于计算机;面向对象的问题求解,则是以“对象”为主体,“对象”是现实世6 界的实体或概念在计算机逻辑中的抽象表示,更接近于人的思维特点。 7 面向过程的编程语言:C,Pascal, Foratn。 8 面向对象的编程语言:C++, Java,C#。 9 2.简述对象、类和实体及它们之间的相互关系。尝试从日常接触到的人或物中抽10 象出对象的概念。 11 答:面向对象技术中的对象就是现实世界中某个具体的物理实体在计算机逻辑中12 的映射和体现。类是同种对象的集合与抽象。类是一种抽象的数据类型,它是所有13 具有一定共性的对象的抽象,而属于类的某一个对象则被称为是类的一个实例,是14 类的一次实例化的结果。如果类是抽象的概念,如“电视机”,那么对象就是某一15 个具体的电视机,如“我家那台电视机”。 16 3.对象有哪些属性?什么是状态?什么是行为?二者之间有何关系?设有对象“学17 生”,试为这个对象设计状态与行为。 18 答:对象都具有状态和行为。 19 对象的状态又称为对象的静态属性,主要指对象内部所包含的各种信息,也就是20 变量。每个对象个体都具有自己专有的内部变量,这些变量的值标明了对象所处的21 状态。 22 行为又称为对象的操作,它主要表述对象的动态属性,操作的作用是设置或改变23 对象的状态。 24 学生的状态:姓名、性别、年龄、所在学校、所在系别、通讯地址、电话号码、25 入学成绩等; 26 学生的行为:自我介绍、入学注册、选课、参加比赛等。 27 4.对象间有哪三种关系?对象“班级”与对象“学生”是什么关系?对象“学生” 28 与对象“大学生”是什么关系? 29 答:对象间可能存在的关系有三种:包含、继承和关联。 30 对象“班级”与对象“学生”是包含关系。 31 对象“学生”与对象“大学生”是继承关系。 32 5.有人说“父母”和“子女”之间是继承的关系。这种说法是否正确?为什么? 33 答:“父母”和“子女”之间不是面向对象意义上的“继承”关系。因为这里的34 类和对象 一、选择题 1、下面对方法的作用描述不正确的是:( d ) A、使程序结构清晰 B、功能复用 C、代码简洁 D、重复代码 2、方法定义的变量:( b ) A 、一定在方法所有位置可见B、可能在方法的局部位置可见 C、在方法外可以使用 D、在方法外可见 3、方法的形参:(a) A、可以没有 B、至少有一个 C、必须定义多个形参 D、只能是简单变量 4、方法的调用:(c) A、必须是一条完整的语句 B、只能是一个表达式 C、可能是语句,也可能是表达式 D、必须提供实际参数 5、return 语句:( d) A、不能用来返回对象 B、只可以返回数值 C、方法都必须含有 D、一个方法中可以有多个return 语句 6、void 的含义:(d) A、方法体为空 B、方法体没有意义 C、定义方法时必须使用 D、方法没有返回值 7、main()方法的返回类型是:( c ) A 、boolean B、int C、void D、static 8、方法重载所涉及的方法:( a ) A、有相同的名字 B、参数个数必须不同 C、参数类型必须不同 D、返回类型必须不同 9、下面关于类和对象之间关系的描述,正确的是( c ) A、联接关系B、包含关系C、具体与抽象的关系D、类是对象的具体化 10、下面关于java中类的说法哪个是不正确的( c ) A、类体中只能有变量定义和成员方法的定义,不能有其他语句。 B、构造方法是类中的特殊方法。 C、类一定要声明为public的,才可以执行。 D、一个java文件中可以有多个class定义。 11、下列哪个类声明是正确的( d) A、public void H1{…} B 、public class Move(){…} C、public class void number{} D、public class Car{…} 12、下面的方法声明中,哪个是正确的(c) A、public class methodName(){} B、public void int methodName(){} C、public void methodName(){} D、public void methodName{} 13、下述哪些说法是不正确的?( b ) A、实例变量是类的成员变量 B、实例变量是用static关键字声明的 C、方法变量在方法执行时创建 D、方法变量在使用之前必须初始化 14、下面对构造方法的描述不正确是( b)。 A、系统提供默认的构造方法 B、构造方法可以有参数,所以也可以有返回值 C、构造方法可以重载 D、构造方法可以设置参数 15、定义类头时,不可能用到的关键字是( b)。 A、class B、private C、extends D、public 16、下列类头定义中,错误的是( )。 A、public x extends y {...} B、public class x extends y {...} C、class x extends y implements y1 {...} D、class x {...} 17、设A为已定义的类名,下列声明A类的对象a的语句中正确的是( ) 。 A、float A a; B、public A a=A( ); C、A a=new int( ); D、static A a=new A( ); 18、设i , j为类X中定义的int型变量名,下列X类的构造方法中不正确的是( a )。 A、void X(int k ){ i=k; } B、X(int k ){ i=k; } C、X(int m, int n ){ i=m; j=n; } D、X( ){i=0;j=0; } 19、有一个类A,以下为其构造方法的声明,其中正确的是JAVA类与对象及数组习题及答案
最新JAVA语言与面向对象程序设计课后习题答案
类和对象练习题
C++ 实验二 类与对象(附答案)