第3章 Java类和对象
Java开发基础 PPT课件
大纲
接口与抽象类的选择
☞ 克隆及其注意事项
接口与回调 内部类、局部类、匿名类 JDK的Proxy与CGLib的动态代理区别
克隆及其注意事项
浅克隆与深克隆
默认实现是浅克隆(本地方法实现)(java.util.AbstractMap默 认实现是浅克隆)
如果原始对象与浅克隆对象共享的子对象是不可变的,则不 会产生负面问题。
反射
允许程序在运行时透过Reflection APIs取得任何一个已知名称的class 的内部信息,并可于运行时改变fields内容或唤起 methods。
可动态获取的内容包括
modifiers(诸如public, static ) superclass(例如Object) interfaces(例如Cloneable fields和methods等
的属性 Java 中所有的对象都继承至 ng.Object ,因此都拥有
toString() , equals() ,wait() 等方法
继承的约束
不能实现多继承 父类提供了参数构造函数,子类必须实现 子类不能降低父类方法的可见域 子类不能抛出比父类构造函数或方法更多的异常 子类不能扩展父类的 final 方法
象类不应该依赖于其细节,细节。 接口隔离原则(ISP):不应该强迫客户依赖于它们不用的方
法
类设计基本原则(续)
包设计的基本原则
包内聚性原则(包粒度) 重用发布等价原则(REP):重用的粒度就是发布的粒度。 共同重用原则(CRP):一个包中的所有类应该是共同重用的。 如果重用了包中的一个类,那么就要重用包中的所有类。 共同封闭原则(CCP):包中的所有类对于同一类性质的变化应 该是共同封闭的。一个变化若对一个包产生影响,则将对该包中 的所有类产生影响,而对于其它的包不造成任何影响。 考虑可重用性与可开发性的平衡。
第3章:面向对象编程基础
3.2 Java的类和对象
(2) 成员变量
成员变量定义的一般形式如下: [修饰字] 类型 变量名; 其中,修饰字可以空缺,修饰字用于对成员变量限制其访问权限,成员 的访问权限有4种:private、protected、public 和友好的(后面详细 介绍)。 变量的类型可以是任何数据类型,变量的名字是一个标识符。Java 中成 员变量的名字可以与类的方法的名字相同。 成员变量对类内定义的方法都有效。类的方法也可定义变量,这种变量 称为局部变量,局部变量只在定义它的方法中有效。
3.1 面向对象的基本概念
3. 消息(方法调用的信息)
对象之间的交互通过相互发送消息(Message )实现。 当对象A希望对象B执行B的一个方法时,用 对象A发送消息给对象B来实现。 消息发送时,如果还需要其他参数,消息可带 参数一起发送。
3.1 面向对象的基本概念
4. 类(对象的类属/类别)
程序设计中利用抽象,在面向过程阶段,系统按函数和 模块进行设计。 在面向对象阶段,利用抽象按类设计。类是目前支持抽 象的最好工具。
3.1 面向对象的基本概念
2. 对象: (万物皆为对象)
对象有状态(属性)、行为(操作)和名称( 对象名) 对象的名称用于程序引用对象,对象的成员变 量,用于存储对象的状态信息,对象的方法用 于描述对象的行为
练习题
【真题练习】参照以下Java代码,以下四个叙述中最确 切的是( )
class A{ int x; static int y; void fac(String s){ Syatem. out. println("字符串:"+s); } } A.x、y和s都是成员变量 B.x是实例变量、y是类变量、s是局部变量 C.x和y是实例变量、s是参数 D.x、y和s都是实例变量
Java开发技术大全第三章
第3章对象和类在当今的计算机大型应用软件开发领域,面向对象技术正在逐步取代面向过程的程序设计技术。
本章将介绍面向对象的基本知识和Java实现面向对象程序设计的主要工具--类。
如果读者缺乏关于面向对象程序设计的背景,一定要仔细地阅读本章。
如果读者有C++编程经验,也要注意二者之间的区别,毕竟Java在类的具体实现上与C++有较大的差别。
3.1 面向对象的基本概念面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。
面向对象的概念和应用已超越了程序设计和软件开发,扩展到很广的范围。
例如,数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
谈到面向对象,这方面的文章非常多。
但是,明确地给出"面向对象"的定义却非常少。
最初,"面向对象"是专指在程序设计中采用封装、继承、抽象等设计方法。
可是,这个定义显然不能再适合现在的情况。
面向对象的思想已经涉及到软件开发的各个方面。
例如,面向对象的分析(Object Oriented Analysis,OOA),面向对象的设计(Object Oriented Design,OOD)以及经常说的面向对象的编程(Object Oriented Programming,OOP)。
许多有关面向对象的文章,都只是讲述在面向对象的开发中所需要注意的问题,或所采用的比较好的设计方法。
看这些文章只有真正懂得什么是对象,什么是面向对象,才能最大程度地收获知识。
说明:在本章中,着重讨论OOP,有关OOA和OOD请读者查阅有关软件工程的书籍。
OOP从所处理的数据入手,以数据为中心而不是以服务(功能)为中心来描述系统。
它把编程问题视为一个数据集合,因为数据相对于功能而言,具有更强的稳定性。
OOP同结构化程序设计相比最大的区别就在于:前者首先关心的是所要处理的数据,而后者首先关心的是功能。
第3章 Java基本数据类型
如果从高级转换成低级,则需要强制类型转换,但会导致溢出 或精度下降。
类型转换
强制类型转换会缩小值的范围(“chops it down”)
byte num1 = 53; byte num2 = 47; long num3; num3 = (num1+num2); //No data loss int myInt; long myLong = 99L; myInt = (int) (myLong); int myInt; long myLong = 123422222222; myInt = (int) (myLong); //Number is chopped //No data loss
3.1 Java程序基本组成元素
单纯从程序的语法组成来看,一个Java程序是 由:
空白分隔符、 标识符、 关键字、 分隔符、
注释、
运算符、 常量等组成。
3.1 Java程序基本组成元素
// JavaExample.java // author:Panhao public class JavaExample { public static void main (String args[ ]){ int xLen,xWid,area; xLen = 7; xWid = 9; area=xLen * xWid; System.out.println(“the area is:”+area); } }
基本数据类型
复合类型
字符型
数值型
布尔型
类
界面
数组
整型
浮点型
字节型
短整型
整型
长整型
与C语言数据类型的比较
《Java面向对象程序设计》课件-第3章 类和对象
3.4.2 访问权限
35
练习3.4
1.[单选题]被声明为private、protected及public的类成员,对于在类的外部,以下说法中 ________是正确的?
A.都不能访问
B.都可以访问
C.只能访问声明为public的成员 员
D.只能访问声明为protected和public的成
2.[单选题]在Java语言中,被______修饰符修饰的成员变量只可以被该类本身访问。
20
实例变量VS类变量
实例变量必须用对象名访问 类变量可以用类名访问,也可以用对象名访问
21
3.3.2 实例方法和类方法
成员方法的定义:
[访问权限] 返回值类型 方法名([参数列表]){ 方法体
} public String getPassword() {
//实例方法,获取密码
return password;
11
对象的创建
声明对象变量
✓ 类名 对象名(对象的引用)
Car c1; c1=new Car("京A08L35");
创建对象 类名 对象名=new 构造方法(); Car c1=new Car("京A08L35");
new
12
main()方法
main()方法: public static void main(String args[])
类型。
private String carNum;
每个类都有一个默pu认b的li构c C造a方r法()({它没有任何参数),如果类 没有重新定义构造方ca法rN,u则m创=建"京对象A时08系L统3自4"动; 调用默认的 } 构造方法。否则,p创ub建li对c 象Ca时r调(S用tr自in定g义n的u构m造){方法。
第三章 类和对象h
二、类
对象创建
定义类的最终目的是要使用这些类,创建并操纵某类的对象是使用该 类的最主要手段。对象是类的一个实例,类是同种对象的抽象,是创建对 象的模板。在程序中创建一个对象将在内存中开辟一块空间,其中包括该 对象的属性和方法。 在Java语言中用new关键字来创建对象,其语法格式为: 类名 对象名=new 类名([参数表]); 或者: 类名 对象名; 对象名=new 类名([参数表]); 当用类创建一个对象后,该对象就拥有了自己的成员变量和成员方法, 不仅可以操作自己的变量改变状态,而且还用使用类中方法的能力,对象 通过使用这些方法产生一定的行为。通过运算符"."可以实现对变量和方法 的访问,当然可以通过访问修饰符来限制其他对象地它们的访问。
二、类
定义类
在Java中,类是用来代表对象的基本单元。对象可以是现 实世界中的任何一个实体,它具有若干区别于其他对象的属性 和操作。而类则通过为对象定义属性和操作来概括一类实体。 它封装了一组变量和方法,是生成实例对象时的模板。可以说 类是对象的抽象,对象是类的实例化。 类的基本定义形式如下: [修饰符] class 类名 [extends 父类] [implements 接口名]{ 类成员变量(属性)声明 类方法(行为)声明 }
二、类
例子: 例子:显示三个员工的相关信息
import java.util.*; class Employee{ public Employee(String n, double s, int year, int month, int day){ name=n; salary=s; GregorianCalendar calendar = new GregorianCalendar(year,month-1,day); hireDay=calendar.getTime();} public String getName(){return name;} public double getSalary(){return salary;} public Date getHireDay(){return hireDay;} public void raiseSalary(double byPercent){ double raise=salary*byPercent/100; salary += raise; } private String name; private double salary; private Date hireDay; }
java程序设计教程第六版 第3章
1-13
String 类的常用方法
• 当String类的对象创建后,此对象的长度和值都不能修 改 • String类的对象是不可改变的 • 但是String类的一些方法可以,在原来String类对象的 基础上,返回新的String类对象 • 第79页,列出了String类的常用方法
1-14
字符串索引
1-17
包
• Java类库中的类采用包的方式组织管理。
例如:java.awt包中是完成绘图、图形用户界面创建的类
• 下面是java标准类库中的一些包:
包
目的
General support Creating applets for the web Graphics and graphical user interfaces Additional graphics capabilities Network communication Utilities XML document processing
ng java.applet java.awt javax.swing java.util javax.xml.parsers
1-18
import 语句
标准类库中,除ng包中的类系统自动引入外, 其他包的类使用时:
• 我们可以使用类的全名
java.util.Scanner scan = new java.util.Scanner (System.in);
title = new String ("Java Software Solutions");
调用 String类的构造函数, 构造函数是一个特殊的方法,用于建立对象
• 对象的创建也称作初始化。
• 一个对象是某个类的一个实例
第3章-面向对象程序设计(上)ppt课件(全)
面向对象的基本概念
❖ 对象(Object)是一个应用系统中用来描述客观 事物的实体,是具有特定属性(数据)和行为 (方法)的基本运行单位,是类的一个特定状态 下的实例。
❖ 类(Class)是Java代码的基本组织模块,是用 以描述一组具有共同属性和行为的对象的基 本原型,是对这组对象的概括、归纳与抽象 表达,它定义了本类对象所应拥有的状态属 性集及操作这组属性的行为方法集。
也可以一步完成,即:
类名称 对象变量 = new 类名称();
实例化对象(续)
❖ 一旦一个类的实例化对象产生,就可以通过该对象 访问类中定义的成员了。通过对象访问成员的基本 结构如下:
对象变量.属性 = 值; 对象变量.方法();
3.2 方法
任务2--Leabharlann 方法的定义【任务内容】给任务1中的媒体播放器类增加控制方 法
❖ JAVA的类由类的声明与类体两部分组成。
1、类的声明用来指定该类的访问修饰符、类的
名称、父类名称及实现接口等属性。声明类的完整 形式为: [public][abstract|final] class <类名> [extends<基类名> ]
[implements <接口列表>]
类名应该能够描述出类的 特征或作用,类名的第一 个字母通常要大写,如果 类名由多个单词组成,则 每一单词的首字母一般都
【范例 3-1】 设计一个媒体播放器类
class MediaPlayer{ //音乐文件路径 public String musicFile; //播放器音量,范围:0(静音)~100 public int soundLevel; //播放器状态 public boolean isPlaying;
java3-1
4.方法
方法重载: 方法重载的意思是:一个类中可以有多个方法 具有相同的名字,但这些方法的参数必须不同。 或者是参数的个数不同,或者是参数的类型不 同。
class Area { float getArea(float r){ return 3.14f*r*r; } double getArea(float x,int y){ return x*y; }
double x; }
3.成员变量和局部变量 Example3_1_3.java
成员变量又分为实例 成员变量(简称实例 变量)和类变量(也 称静态变量) 。如果 成员变量的类型前面 加上关键字static,这 样的成员变量称做是 类变量或静态变量。
class People{ float a[ ]; static int boy;
void f(){ int boy; this.boy++; } }
4.方法
我们已经知道一个类的类体由两部分组成:变量的定 义和方法的定义。方法的定义包括两部分:方法声明 和方法体。 最基本的方法声明包括:方法返回的数据类型,方法 名和方法类型,以及参数。
方法类型 方法名(定义参数){ 方法体 }
3 2 1 0
101 76 39 32 4 21 34
101 76 39 32 4 34 21
101 76 39 32
101 76 39 34
不参与排序
34
4
32
4
21
21
冒泡排序
排序算法有多种,最简单的是冒泡排序。冒泡排序是一种借助交换进 行排序的方法。
6 第五趟5 升序 排序 4
3 2 1 0
自考Java语言程序设计(一)课后习题及答案
自考Java语言程序设计(一)课后习题及答案自考Java语言程序设计(一)第一章Java语言概述课后习题一、Java语言概述1.Java语言有哪些特点?2.什么叫做类?什么叫做对象?3.简述Java的运行机制。
4.简述Java应用程序的开发流程。
5.当初Sun公司发展Java的原因是:来源:(a)要发展航空仿真软件(b)要发展人工智能软件(c)要发展消费性电子产品6.Java是从哪种语言改进并重新设计?(a)Ade来源:(b)C++(c)Pascal7.Java因为什么快速发展而走红?(a)个人计算机与网络(b)游戏软件(c)系统软件8.Java程序的种类有:(a)内嵌于Web文件中,由浏览器来观看的__________(b)可独立运行的__________考试大论坛(c)服务器端的_________9.Java是面向对象语言,对象是客观事物的,对象与之是一一对应的,它是很具体的概念。
10. 判断:用Javac编译Java源文件后得到代码叫字节码。
()参考答案1.答:面向对象、简单、平台无关性、安全性、内存管理、分布式应用、多线程、动态、解释运行,高效能2.答:在面向对象编程中,具体的客观实体称为对象,对象就是数据加方法。
对象在程序中是通过一种抽象数据类型来描述的,这种抽象数据类型称为类。
类是对具有相同属性和方法的一组相似对象的抽象,或者说类是对象的模板。
来源:考试大3.答:Java程序的运行必须经过编写、编译、运行三个步骤。
编写是指在Java开发环境中进行程序代码的输入过程,最终形成后缀名为.java源文件。
编译是指使用Java编译器对源文件进行错误排查的过程,编译后将生成后缀名为.class的字节码文件。
运行是指使用Java解释器将字节码文件翻译成机器代码,在cpu上运行并显示结果的过程。
这一过程如图所示。
考试大-全国最大教育类网站(www.Examda。
com)4.Java应用程序的运行经过编写、编译、运行三个步骤。
Java语言程序设计基础教程习题解答
《Java语言程序设计基础教程》练习思考题参考答案第1章Java程序设计概述1.9 练习思考题1、Java运行平台包括三个版本,请选择正确的三项:()A. J2EEB. J2MEC. J2SED. J2E解答:A,B,C2、Java JDK中反编译工具是:()A. javacB. javaC. jdbD.javap解答:D3、public static void main方法的参数描述是:()A. String args[]B. String[] argsC. Strings args[]D. String args解答:A,B4、在Java中,关于CLASSPATH环境变量的说法不正确的是:()A. CLASSPATH一旦设置之后不可修改,但可以将目录添加到该环境变量中。
B. 编译器用它来搜索各自的类文件。
C. CLASSPATH是一个目录列表。
D. 解释器用它来搜索各自的类文件。
解答:A5、编译Java Application源文件将产生相应的字节码文件,扩展名为()A. .javaB. .classC. .htmlD. .exe解答:B6、开发及运行Java程序需要经过的三个主要步骤为____________、____________和____________。
7、如果一个Java Applet源程序文件只定义有一个类,该类的类名为MyApplet,则类MyApplet必须是______类的子类并且存储该源程序文件的文件名为______。
8、如果一个Java Applet程序文件中定义有3个类,则使用Sun公司的JDK编译器编译该源程序文件将产生______个文件名及类名相同而扩展名为______的字节码文件。
9、开发及运行Java程序需要经过哪些主要步骤和过程?10、Java程序是由什么组成的?一个程序中必须要有public类吗?Java源文件的命名规则是怎么样的?11、编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“We are students”。
第3章_抽象和封装.
面向对象的编程思维
ScoreCalc类 和 Test类
public static void main(String[ ] args) { Scanner input = new Scanner(System.in); Test ScoreCalc System.out.print("请输入Java成绩:"); int java = input.nextInt(); 一次还可以接受,如果 main(){ //程序入口 calcTotalScore() …… 类的方法实现某个特定的功能, //计算并输出总成绩 还要再执行这个功能, /*计算并显示输出 */ 其他类不需要知道它如何实现! 调用 难道还要重复再写? int total = java + c + db; 知道了实现此功能的类和它的方法名, calcDiffTime showTotalScore() double avg = total / 3; 就可以直接调用了,不用重复写代码! //计算并输出平均分 System.out.print("总成绩:" + total); 调用 System.out.print("\n 平均分: " + avg); calcAvg() }
构造方法 3-3
阅读代码,说出运行结果,并指出原因
class Penguin { String name; String sex; int health; 有返回值类型, public void Penguin() { 不是构造方法 health=10; sex="雄"; System.out.println("执行构造方法"); } public void print() { System.out.println("企鹅的名字是" + name + ",健康值是" + health + ",性别是" + sex); } Penguin pgn3=new Penguin(); } pgn3.print();
Java应用教程_03Chapter
2013年8月31日星期六
成员变量的限定符
对于一个成员变量,可以使用不同的限定符,以限 定不同的访问权限。
Private:变量可以被类中的代码访问
Friend:变量可以被工程或组件中的代码访问
Protected:可以被继承的类访问 Public:适用于类外的代码 通常,使用Private关键字来声明成员变量,使这些 变量仅适用于每个类实例中的代码。同时这种方式也 符合类的封装性。
个新类,就是创建一种新的数据类型,即引用
数据类型。
2013年8月31日星期六
3.1.1类的声明
类的实现包括两部分:类声明和类体。基本格式为:
// 语法格式: [<修饰符>] class <类名> [<extends SuperclassName>] [<implements interfaceNameList>] { [<成员变量声明>]
2013年8月31日星期六
成员变量的限定符
对于一个成员变量,还可以使用下面的限定符:
static: 用来制订一个变量使静态变量(类变量),
没有static修饰的变量是实例变量。类变量既可以由 类方法访问,由可以右实例方法来访问。
final: 用来声明一个常量,作用相当于C语言中
define命令,对于用final关键字修饰的常量,在程序 中不能作修改,通常常两用答谢字母。
第3章 Java面向对象程序设计
内容提要:
类的创建 继承 包 访问控制 接口 内部类
2013年8月31日星期六
2013年8月31日星期六
2.1标识符、分隔符和关键字
3.1类的创建
类是组成Java程序的基本要素,也是Java中 重要的引用数据类型。类封装了一类对象的状 态属性和行为方法,是类对象的原型。创建一
JAVA第三章课后习题解答
System.out.println(s); return s; } }
public class TestStudent { public static void main(String args[]) { student stu = new student("0401398", "杨小明", "男",20); stu.printInfo();
【13】什么是接口?为什么要定义接口?接口和类有什么异同? [解答]:接口是用来调节各类之间的相互关系的一种结构,接口是抽象类的一种,只包含常 量和方法的定义,而没有变量和具体方法的实现,且其方法都是抽象方法。 接口定义的格式如下:
[public] interface 接口名 [extends 父接口名列表]{ … //接口体 } extends 子句有类声明的 extends 子句基本相同,不同的是一个接口可有多个父接口,用 逗号隔开,而一个类只能有一个父类。Java 中的类只能实现单重继承,这虽然可以简化编程, 但毕竟没有完全实现面向对象的功能。定义接口的主要作用,就是帮助 Java 实现类间多重 继承的结构。而且接口还有以下好处:
4
● 接口可以被多个类所实现,这些类可以不相关,从而具有相同的行为。 ● 通过接口可以了解对象的行为,而无需了解对象所对应的类的结构。
Java期中考试复习
}
输出结果: true false ========= [1, 3, 5, 7, 0, 0] [1, 3, 1, 1, 1, 0] [0, 1, 1, 1, 1, 3] 5 【例2-7】arraycopy()实现数组的复制 package chpt2;
class Ex2_7 { public static void main(String[] args) { //13个元素 char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' }; char[] copyTo = new char[7]; System.arraycopy(copyFrom, 2, copyTo, 0, 7); System.out.println(new String(copyTo));
私有(private) :只能被这个类本身访问,在类外不可见 包访问权限:默认访问权限,仅允许同一个包内的访问
需要注意的是类的访问控制只有public(公共类)及包(默认类)两种,没有私有。
3.5.1语言包ng 3、变量字符串类StringBuffer StringBuffer类也是用来处理字符串。
Arrays.fill(b, 2,5,1); //把第二个到第四个元素赋为1 System.out.println(Arrays.toString(b)); Arrays.sort(b); //对b进行排序 System.out.println(Arrays.toString(b)); System.out.println(Arrays.binarySearch(b, 3)); // 使用二分查找法查找3的位置
《Java语言程序设计》考试练习题(带答案)三
《Java语言程序设计基础教程》练习思考题参考答案第1章 Java程序设计概述1.1单项选择题1.编译Java Application源文件将产生相应的字节码文件,扩展名是什么A. .javaB. .classC. .htmlD. .exe解答:B2.Java语言具有许多优点和特点,下列选项中,哪个反映了Java中“一次编译,随处运行”的特点。
A. 简单性B. 平台无关性C. 面向对象性D. 安全性解答:B3.Java语言具有许多优点和特点,下列选项中,哪个反映了Java中并行机制的特点。
A. 多线程B. 平台无关性C. 面向对象性D. 安全性解答:A4.在Java语言中,下列哪些语句关于内存回收的说明是正确的?A.程序员必须创建一个线程来释放内存;B.内存回收程序负责释放无用内存;C.内存回收程序允许程序员直接释放内存;D.内存回收程序可以在指定的时间释放内存对象解答:B5.一个Java源文件中最多只能有多少个public类。
A. 1个B. 2个C. 3个D. 任意多个解答:A6.下面哪一个不是Java语言所具有的特点。
A. 没有全局变量,在类的定义外部没有任何的变量定义;B. 不直接支持指针操作,而使用更安全的引用类型;C. 支持子类对父类的多继承;D. 具有自动垃圾收集功能;解答:C7.下面哪一个不是Java开发工具包JDK的组成部分。
A. Java的编译器;B. Java的解释器;C. Java的API继承类库;D. Eclipse开发工具;解答:C8.JDK提供的编译器是()。
A. java.exeB. javac.exeC. javap.exeD. javaw.exe解答:B9.作为Java应用程序入口的main方法,其声明格式可以是()A. public void main(String [] args)B. public static void main(String [] args)C. public static void Main(String * args)D. public int main(String [] args)解答:B10.下列说法正确的是(A )A、JAVA程序的main方法必须写在类里面B、JAVA程序中可以有多个main方法C、JAVA程序中类名必须与文件名一样D、JAVA程序的main方法中如果只有一条语句,可以不用{}(大括号)括起来11.下列哪些语句关于Java内存回收的说明是正确的? ( B )A、程序员必须创建一个线程来释放内存B、内存回收程序负责释放无用内存C、内存回收程序允许程序员直接释放内存D、内存回收程序可以在指定的时间释放内存对象1.2填空题1、开发与运行Java程序需要经过的三个主要步骤为____________、____________和____________。
JAVA第三章习题答案 (2)
o=cno; ame=cname; this.credit=credit; this.period=period; } public void setCno(String cno){ o=cno; } public String getCno(){ return cno; } public void setCname(String cname){ ame=cname; } public String getCname(){ return cname; } public void setCredit(double credit){ this.credit=credit; } public double getCredit(){ return credit; } public void setPeriod(int period){ this.period=period; } public int getPeriod(){ return period; } public String toString(){ return cno+"\t"+cname+"\t"+credit+"\t"+period; } } 9.设计并实现一个 Box 类。要求:定义 3 个实例变量分别表示 Box 的长、宽和高,并定义 必要的方法。创建一个对象,求给定尺寸的立方体的表面积和体积。 //Box.java public class Box { private double length; private double width; private double height;
10.学生类的创建和使用。 (1)创建一个 Student 类,包括的私有数据成员有学号、姓名、性别、年龄等。 (2)声明一个构造方法,以初始化对象的所有数据成员。 (3)声明分别获得各数据成员(学号、姓名、性别、年龄等)的各个 public 方法。 (4)声明分别修改各数据成员(学号、姓名、性别、年龄等)的各个 public 方法。 (5 ) 声明一个 public 型的 toString( )方法, 把该类中的所有数据成员信息组合成一个字符串。 (6 ) 在类中声明统计班级总人数的私有数据成员 count, 以及获得班级总人数的 public 方法。 (7)将 Student 类放在子包 student 中。 (8 ) 在子包 student 外, 创建测试类 StudentTest。 在测试类中, 使用 Student 类创建多个对象, 测试 Student 类的每个 public 方法。 //Student.java package student; public class Student { private String sno; private String sname; private char ssex; private int sage; private static int count=0; public Student(String no,String name,char sex,int age){ sno=no; sname=name; ssex=sex; sage=age; count++; } public void setSno(String no){ sno=no; } public String getSno(){ return sno; } public void setSname(String name){ sname=name; } public String getSname(){ return sname; } public void setSsex(char sex){ ssex=sex; } public char getSsex(){ return ssex;
JAVA基础 第3章类与对象_练习题
第3章类与对象一.选择题1.下列不属于面向对象编程的特性是(D)。
A.封装性 B. 继承性 C. 多态性 D. 编译执行2.下列类的声明中不合法的是(C)。
A. class People{…}B. class 植物{…}C. Class A{…}D. public class 共有类{…3.下列方法的声明中不合法的是(C)。
A. float area(){…}B. void area(){…}C. double area(d){…}D. int area(int r){…}4. 下列构造方法(构造器)的调用中正确的是(C)。
A. 按照一般的方法调用B. 由用户直接调用C. 只能通过new自动调用D. 被系统调用5.下列程序运行的结果是(A)。
class Book{int width;int length;}public class A{static void f(Book p){p.width=20;p.length=40;}public static void main(String args[]){Book b=new Book();b.width=10;b.length=20;f(b);System.out.print(" "+b.width);System.out.print(" "+b.length);}}A. 20 40B. 10 40C. 10 20D. 以上都不对6.下列程序运行的结果是(D)。
public class A{static void f(int y){y=y+10;}public static void main(String args[]){double x=10;f(x);System.out.println(x);}}精选文库A. 10B. 20C. 10.0D. 程序编译错误7.下列程序运行的结果是(C)。
public class A{int z=20;static void f(int y){y=z;System.out.println(y);}public static void main(String args[]){f(10);}}A. 10B. 20C. 程序编译错误D. 以上都不对8. 以下代码的输出结果为(C)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
class Manager extends Employee { private double bonus;
public void setBonus(double b) { bonus = b; } public double getSalary(){ return salary + bonus; }
类是对象创建的模板。
任何一个对象都是属于某一个类的。
使用对象之前必须先创建对象。即,先进行声明, 再实例化对象,之后就可以通过对象去调用成员变 量或方法了。
要获得一个类的对象需要两步:
第一步,对象的声明。
第二步,为对象分配内存。通过new运算符调用构造方法创 建对象实体,并把该对象的引用赋给该变量。
}
47
需要强调的是,在子类中可以增加变量,增加方法 或者覆盖方法,但是绝对不会删除继承的任何变量 和方法。 也就是说,上面虽然覆盖了原来的方法,只是调用 时调用的新方法,原来继承过来的旧方法还是有的。
48
多态(polymorphism)提高了程序可扩充性,调用 多态性行为的软件传送给对象的消息(即方法调用) 与对象的类型无关,因此能响应已有信息的新类型, 可以直接加入系统而不用修改基本系统。 在运行时自动选择正确的方法进行调用称为“动态绑 定”(dynamic binding)。
20
成员变量含有自带的初值,根据不同类型有所不同, int为0,double为0.0,bealoon为false,复合数 据类型为null。
成员变量在整个类内都有效,其有效性与它在类体 中书写的先后位置无关。
代码清单3-2
22
代码清单3-3
23
实例变量属于对象,它描述了对象的属性 局部变量只在方法内有效。
17
在定义和使用方法时,需要注意以下几点:
方法是一个功能模块,类似C中的函数; 方法和实例变量都必须定义在类内,方法是类的功能接 口; 定义方法的原则:方法应当只执行单一的任务,并且方
法名能有效地表达该任务;
方法的返回值类型、方法名和参数表共同称之为方法的
特征。
18
调用方法的格式为: 对象引用.方法名(参数表);
◦ 形参在整个方法内有效; ◦ 方法内的局部变量从声明它的位置开始有效。
局部变量在使用前必须赋初值(没有默认值)。 如果局部变量与实例变量同名,则实例变量在该方 法内被隐藏,用this来引用。
类方法不仅可以被该类创建的任何对象调用执行, 也可以直接通过类名调用。
JAVA规定:
类方法中出现的成员变量必须是类变量。
[public] class 类名
{ [成员变量] [构造方法] [方法]
成员变量反映类的状态、属 性和特征,成员方法 Point { int x, y; void init(int a, int b) { x = a; y = b; } }
10
其中,访问控制符可以是public 、protected、 private、默认(不写)。
30
注意: 1.构造方法无返回类型。 2.构造方法只能被new运算符调用。
new 构造方法名( [参数列表] );
默认的构造方法无参数, 方法体当中也不执行具 体操作,形式如下, 构造方法名() { }
注意,仅仅返回类型的不同或访问控制权限不同, 不能构成重载。
代码清单3-9
38
构造函数也能够重载。 代码清单3-12
39
重载是编译时多态性,即在编译时就能够确定对象 调用的是同名方法中哪一个。依据正是实参的类型 与个数。 但要避免重载出现歧义。
继承是一种由已有的类创建新类的机制。利用继承, 可以使子类得到父类的某些成员。 继承是实现软件可重用性的一种重要方式,继承增 强了软件的可扩充性,提高了软件的可维护性。 JAVA中类的继承是单重继承,即每个子类只有一个 直接父类。
15
JAVA的类中可以包括两种成员:实例成员和类成员。
通过对象去访问实例成员变量和调用实例方法。 通过类名可以直接访问类成员变量和调用类成员方法。
3.2.1 方法 方法定义的一般格式如下: [修饰符] 返回类型 方法名( [形参列表] ) { //方法体,由若干的语句组成 } 其中的修饰符可以是public 、protected、 private、默认(不写),用于定义它的访问控制 权限,还可以是static 、final等。
JAVA中定义,Object类是所有类的父类。
子类定义的格式: [访问权限控制符] class 子类名 extends 父类名 [implements 接口列表] { //类体部分 }
继承的原则: ①子类继承父类的除private以外的成员,包括实例 成员和static成员。 ②子类继承不了父类的构造方法。 ③子类可以创建自己的成员。 ④子类可以重定义继承得到的成员。
例如,
◦ Point mypoint = new Point(); ◦ mypoint.init(10, 20);
19
成员变量,即我们所说的属性。它的定义的一般格 式如下: [修饰符] 类型 变量名; 其中:
◦ 类型可以是基本数据类型(primitive types),也可以是 复合数据类型(reference types)。 ◦ 修饰符可以是:public 、protected、private、默认(不 写),static,final。
如果类中没有构造方法, 系统会提供默认的构造 方法 ;
如果类中定义了一个或 多个构造方法,那么 Java不再提供默认构造 方法。
32
33
见代码清单3-8
34
强调两点:
一旦定义了构造函数,Java就不能再调用系统缺省构造函 数; 当有多个构造函数时,通过构造函数参数的类型和个数来 决定调用哪个。
这就引出了一个概念——上转型对象。Mammals 类的对象doudou是子类Cat的上转型对象, Mammals类的对象yinuo是子类Dog的上转型对象。 上转型对象由父类声明,实体由子类创建。
程序的运行结果应该是怎样的?
那么这样做有什么意义呢?因为子类是对父类的一 个改进和扩充,所以一般子类在功能上较父类更强 大,属性较父类更独特,定义一个父类类型的引用 指向一个子类的对象既可以使用子类强大的功能, 又可以抽取父类的共性。 如代码清单3-14所示
6
类与类之间最常见的关联有:
依赖(“use-a”)
聚合(“has-a”) 继承(“is-a”)
7
类是组成JAVA程序的基本要素。一个java程序由 若干个类组成。 类的定义包括两部分:类声明和类体。基本格式 如下:
class 类名 { 类体部分; }
8
在基本格式的基础之上,一般情况下,类的定义 格式如下:
对象名=new 构造方法名( [参数列表] );
类型 对象名;
Point mypoint = new Point(); 或 Point mypoint; // 声明对象的引用 mypoint = new Point(); // 创建Point类的对象
12
如声明Point类型的对象:
13
14
◦ 所以类方法中不能操作实例成员变量这是因为:
在类创建对象之前,实例成员变量还没有分配内存; 类方法中可不能直接调用其它实例方法,这是因为在类创建 对象前,实例方法还没有分配入口地址。
当声明一个成员变量时,有static标识的是类成 员变量,没有的是实例成员变量。例如, class Takecare { static int x; //类成员变量 int y; //实例成员变量 }
35
多态性提供了类中方法执行的多样性,它有两种 表现形式:重载(overload)和重写 (override)。
36
一个类中,如果有许多同名的方法带有不同的参数列表, 称为方法的重载(overload)。
方法的重载必须满足以下条件:
(1)在同一个类当中定义的方法; (2)方法名必须相同; (3)参数列表必须不同(参数类型、参数个数)。
1
类和对象
对象的成员
类的成员 构造函数
重载
类的继承 方法覆盖
多态性与动态绑定
Java访问权限
2
3.1.1 面向对象程序设计概述
◦ Java作为90年代新出现的面向对象的编程语言,其语言 特点充分体现出面向对象的思想。
◦ 面向对象程序设计(简称OOP)是当今主流的程序设计 范型,它已经取代了70年代的“结构化”过程化程序设计 开发技术。
先看一个Employee类及其子类Manager :
class Employee { class Manager extends Employee { private String name; public void setBonus(double b) private double salary; { private int id; bonus = b; public String getName() { } return name; private double bonus; } } public double getSalary() { return salary; 从表面上看,Manager类只有一个方法 } public int getId() { 和一个变量,但是,它已经继承了 return id; Employee类的所有变量和方法。现在的 } Manager类包含4个变量:name, }