随着微电子技术的崛起,电子计算机、网络通信、多媒体等IT信息技术的应用发展日新月异。作为信息化的核心支撑和关键技术,程序设计、软件开发、系统集成、网络布设等不仅在企业经营、政府管理、社会生活中发挥着重要作用,而且有力、有效地促进和推动着国民经济信息化快速发展的进程。
跨平台网络语言Java在网络开发、网络系统集成、网络应用中发挥着重要作用,并伴随因特网的广泛应用而得以迅速普及;“Java程序设计”是计算机专业重要的核心课程,也是计算机网络及软件相关专业中常设的一门专业课;学习掌握好Java程序设计已经成为网站及网络信息系统从业工作的先决和必要条件。
本书作为高等教育计算机应用专业的特色教材,坚持科学发展观、以学习者应用能力培养与提高为主线,严格按照教育部关于“加强职业教育、突出实践技能和能力培养”的教学改革要求编写。本书的出版不仅有力配合了高等教育计算机应用教学的创新和教材的更新,也体现了应用型大学办学育人注重职业性、实践性、应用性的特色。
全书共10章,根据Java程序设计操作规程,采用“任务驱动、案例教学”的方法,系统介绍Java开发和运行环境、Java基本语法、面向对象的程序设计、图形界面设计、文件输入/输出流操作、线程、网络和数据开发基础等知识,并通过加强实践实训,提高应用能力与应用技能。
本书融入了Java程序设计的最新实践教学理念,力求严谨,注重与时俱进,具有知识系统、案例丰富、叙述简洁、突出实用性等特点。本书可以作为大学本科和高职高专院校计算机及相关专业Java语言程序设计的首选教材,也可作为企事业单位IT从业者的在职培训用书,对于Java自学者也是一本有益的科技读物。
本书由李大军筹划并具体组织,高虎和曹记东任主编、高虎统改稿,翟然、李梓任副主编;由刘靖宇教授审定。作者编写分工:牟惟仲编写序言,高虎编写第1~3章,曹记东编写第4章,李梓编写第5和6章,翟然编写第7和8章,王耀编写第9和10章;李晓新负责文字版式修改和制作教学课件。
在本书编写过程中,我们参阅和借鉴了中外有关Java程序设计与应用的最新书刊、网站资料,并得到有关专家的具体指导,在此一并致谢。为了方便教学,本书配有电子课件,读者可以登录清华大学出版社网站(www.tup.com.cn)免费下载使用。因作者水平有限,书中难免存在疏漏和不足,在此恳请专家、同行和读者予以批评指正。
编者2017年5月
第3章类和对象学习目标理解类和对象的概念、方法定义和方法调用。
掌握方法的重载和重写。
掌握修饰符、类变量和类方法。
掌握static、this、final等关键字。
了解抽象类和接口以及包的概念。
3.1类和对象的概念
把客观世界中的事物映射到面向对象的程序设计中就是对象。对象是面向对象程序设计中用来描述客观事物的程序单位。客观世界中的许多对象,无论其属性还是其行为常常有许多共同性,抽象出这些对象的共同性便可以构成类。所以,类是对象的抽象和归纳,对象是类的实例。
3.1.1类和对象概述
客观世界由许多具体事物构成,而这些事物都具有一定的静态以及动态属性。将事物放置到某一个特定的问题中,就将事物抽象成了一个对象。
对象即一组数据,用来描述对象的静态特征。在Java程序中,把这一组数据称为数据成员。
对象标识即对象的名字,是用户和系统识别它的唯一标志。对象标识有“外部标识”和“内部标识”之分。外部标识供对象的定义者或使用者用,内部标识供系统内部唯一地识别每一个对象。
方法也称为服务或操作,它是对象动态特征(行为)的描述。每一个方法确定对象的一种行为或功能,为避免混淆,本书中把方法称为成员方法。
在Java程序中,类是创建对象的模板,对象是类的实例,任何一个对象都是隶属于某个类的。3.1.2类的定义
对象是对事物的抽象,而类是对对象的抽象和归纳。分类所依据的原则是抽象,即抽象出能反映与当前目标有关的本质特征,而忽略那些与当前目标无关的非本质特征,从而找出事物的共性,把具有共同性质的事物归结为一类,得出一个抽象的概念——类。在描述类时需要指明以下几种方面。
(1)类的标识:一种区别类的工具,也称为类的名字。
(2)类的属性说明:用来描述相同对象的静态特征。
(3)类的说明方法:用来描述相同对象的动态特征。
例如,定义一个类的程序如下。classHusky//定义一种class类,Husky是类的标识
{
Stringname;
intAverageWeight;
intAverageHeight;
publicvoidmove()类的属性(静态)
{...}
publicvoidShowHusky()
{...}
}类的说明方法(动态)Husky类3.1.3构造方法
Java构造方法是定义在Java类中的一个用来初始化对象的方法,它是使用new+构造方法创建一个新的对象。并且方法名与类名必须相同,没有返回值,在对象创建时被调用。根据需求定义有参构造方法和无参构造方法。
例31无参构造方法的使用。main():
Telphonephone=newTelphone();
classTelphone;
publicTelphoe(){
System.out.pritln("无参构造方法执行了!");
}此函数没有参数却能够执行,是因为在无参函数中,系统会自定义一个参数,如果不满意定义的参数,也可以修改自定义参数。
例32有参构造方法的使用。main():
Telphonephone2=newTelphone(4.0f,2.0f,2.0f);
classTelphone:
publicTelphone(floatnewScreen,floatnewCpu,floatnewMem){
screen=newScreen;
cpu=newCpu;
mem=newMem;
}有参构造方法与无参构造方法不同的就是写了一个参数列表,然后将参数列表里面的值赋给了成员变量。
在程序中,当没有指定构造方法时,系统会自动添加无参函数的构造方法;当有指定构造方法时,无论是有参、无参的构造方法,都不会自动添加无参构造方法。
在一个类中,方法名相同,但参数不同的多个方法可以相互调用,在调用时会自动根据不同的参数选择相应的方法。这就是构造方法的重载。而上面所写的有参构造方法和无参构造方法就相当于构造方法的重载。
例33构造方法的重载。publicStudent(Stringname){
System.out.println("这是带一个String类型的构造方法");
this.name=name;
}
publicStudent(intage){
System.out.println("这是带一个int类型的构造方法");
this.age=age;
}
publicStudent(Stringname,intage){
System.out.println("这是一个带多个参数的构造方法");
this.name=name;
this.age=age;
}
publicvoidshow(){
System.out.println(name+"---"+age);
}3.1.4类的实例化——对象的构造
有如下程序:Students1;
s1=newStudent("Lisa","Male",1,18);其中,Students1为引用类型变量分配应用空间。
newStudent("Lisa","Male",1,18)有3个作用:①创建新对象,并进行属性(实例变量)的默认初始化;②执行构造方法,将传递进来的参数的值分别赋给对象属性;③对引用类型变量s1赋值。将新创建的Student对象的存储空间的首地址赋给s1。
……