版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
类与对象Java程序设计第五章01类的定义与对象的创建5.1类的定义与对象的创建对象对象有一定的属性特征,比如一个人有姓名、性别、身高、体重等属性,一台电视机有品牌、屏幕尺寸、当前频道等属性。我们把对象的属性值称为对象的数据。对象还具有一定的动作特征,比如一个人的动作特征有唱歌、打球、开车等,电视机的动作特征有播放电视节目、频道切换、开机和关机等。往往动作的结果会改变对象的数据,例如,频道切换会改变电视机的当前频道。5.1类的定义与对象的创建5.1.1类的定义——通用描述类用于描述同种对象所拥有的属性和能完成的行为操作。定义一个类之后,就可以用它来创建对象。我们一般说,某个对象是属于某个类的对象。比如“农夫果园”里张三是一名农民,这里张三是对象,农民是张三这个对象所属的类。Java的类有两大部分:系统定义的类和用户定义的类。本节将介绍如何创建用户自定义的类。下面定义一个Farmer类,包含工号、工龄、薪水和技能,类中定义了成员变量ID、years、salary和skill,同时定义了成员方法work()。成员变量的定义必须给出变量名及其所属的类型,成员方法的定义必须给出方法名及其参数列表(可以为空)以及返回类型。5.1类的定义与对象的创建【例5-1】创建Farmer类,包括成员变量ID、years、salary和skill,以及成员方法work()。【程序】【程序说明】Farmer类中定义了4个成员变量:ID、years、salary和skill,同时定义了一个成员方法work()。5.1类的定义与对象的创建5.1.2对象的创建与引用类本身只是对象的类型,一个创建对象的模板。如果要表示具体实体或概念(如一个工号为“F001”的农民),必须声明和创建对象。由类创建对象的过程,也称为类的实例化,创建的对象称为类的一个实例。声明对象变量的一般形式为:类名变量对象名;对象变量声明以后,还没有与任何对象联系起来。要真正创建对象,必须使用new运算符,语法:类名对象变量名=new类名();对象创建完成后,就可以通过对象变量名访问对象的成员变量和成员方法了。访问对象成员变量的格式为:对象名.成员变量名调用对象成员方法的格式为:对象名.成员方法名(参数表)5.1类的定义与对象的创建【例5-2】创建一个对象,并对成员变量赋值,调用work()方法输出内容。【程序】【运行结果】【程序说明】main()方法中创建一个对象引用farmer,接着对成员变量赋值,最后调用成员方法work()。5.1类的定义与对象的创建【提示】Farmerfarmer=newFarmer();上面的语句实际上创建的是一个对象,在创建的过程中需要经历以下3个步骤(如图5-1所示):(1)创建一个对象,即newFarmer();(2)创建一个对象变量名Farmerfarmer;(3)对象变量名farmer指向对象newFarmer()。5.1类的定义与对象的创建5.1.3构造方法与对象初始化构造方法是创建对象时调用的特殊方法,用于完成创建对象所需的初始化工作。构造方法具有以下特点:(1)构造方法的名字与包含它的类名相同;(2)构造方法没有返回值,也不能使用void修饰符;(3)构造方法在创建对象时用new来调用,一般不能显式调用。在Java中创建对象必须调用构造方法,如果一个类没有定义构造方法,则系统会为它自动生成一个默认的构造方法。默认的构造方法的参数表为空,方法体中也没有任何语句。5.1类的定义与对象的创建1.有参构造方法【例5-3】使用有参构造方法传入工号、工龄、薪水和技能进行初始化。【程序】【运行结果】【程序说明】上述程序中newFarmer("F001",5,5000,"苹果种植")表示实例化时会调用有参构造方法publicFarmer(Stringa,intb,intc,Stringd){},这样就可以根据用户传入参数的不同,进行不同的初始化操作。5.1类的定义与对象的创建2.无参构造方法无参构造方法是类的默认构造方法,在实例化对象时会默认调用无参构造方法,如果类中没有有参构造方法,那么在编译时会默认提供一个无参构造方法。无参构造方法的好处在于,实例化时可以直接对一些成员变量进行初始化,这样便拥有了具有初始参数值的对象。5.1类的定义与对象的创建【例5-4】将Farmer类进行改进,定义一个无参构造方法,在构造方法中对工龄、薪水参数进行初始化,最后在main()方法中只需要实例化,便拥有了具有初始参数值的对象。【程序】【运行结果】【程序说明】main()方法中的newFarmer()表示对类进行实例化,默认调用无参构造方法,而Farmer类中的无参构造方法中对成员变量直接赋值,最后在调用work()方法时就会显示“工号F001正在工作中……”的内容。5.1类的定义与对象的创建5.1.4方法的重载一个类中可以定义多个同名的方法,只要这些方法具有不同的参数表即可,这个过程称为方法的重载。所谓参数表的不同可以是参数的个数不同、参数的类型不同或者参数类型的顺序不同。重载的意义在于,它允许相关的方法可以使用同一个名字,当调用一个重载的方法时,Java通过检查调用语句中参数的数量、类型和次序选择适当的方法。5.1类的定义与对象的创建5.1.5this关键字1.用this()调用构造方法当一个类中的构造方法有重载时,如果想在一个构造方法内部调用另外一个构造方法,则可以使用“this([参数列表])”的形式进行调用。5.1类的定义与对象的创建【例5-5】对Farmer类的构造方法进行改进,如果在实例化时传递参数,则调用有参构造方法,如在实例化时没有参数传递,则调用无参构造方法。可以通过this()调用有参构造方法,进行初始化。【程序】【程序说明】通过“newFarmer()”调用无参构造方法,在无参构造方法中又通过“this("F001",1,3000,"苹果种植")”调用下面的有参构造方法,最后显示信息。【运行结果】5.1类的定义与对象的创建2.引用成员变量参数和成员变量同名的好处在于“见名知义”,但同时方法内部参数都会被当作局部变量,会产生无法正确赋值的问题。5.1类的定义与对象的创建【例5-6】用this解决成员变量名和方法参数名相同的情况。【程序】【程序说明】通过this.ID,就可以区分等号左边的变量为成员变量,等号右边的为方法参数名。【运行结果】02类的静态成员5.2类的静态成员5.2.1静态变量用static关键字修饰的成员变量称为静态变量,也称类变量。未用static修饰的成员变量称为实例变量。静态变量的特点表现在两个方面:(1)实例变量必须通过对象访问,而静态变量可以通过对象访问,也可以通过类名直接访问。例如,PI是数学类Math中定义的静态变量,其可以用Math.PI直接访问。(2)对该类的每一个具体对象而言,静态变量是一个公共的存储单元,任何一个类的对象访问它,取到的值都是相同的;同样,任何一个类的对象修改它,也都是对同一个内存单元进行操作。5.2类的静态成员【例5-7】定义一个表示“农夫果园”的Garden类。【程序】【程序说明】静态变量一般用类名直接访问,非静态变量必须用对象访问,对象也可以访问静态变量(不推荐)。【运行结果】5.2类的静态成员5.2.2静态方法静态方法和一般的成员方法相比,有两处不同:一是静态方法可以直接通过类名来调用,而不必先创建一个对象;二是静态方法内部只能使用静态的成员变量,而不能访问类的非静态成员,这是因为非静态成员必须在创建对象后才能访问。5.2类的静态成员【例5-8】定义一个表示“农夫果园”的Garden类,使用静态方法输出“欢迎来到农夫果园!”【程序】【程序说明】静态方法一般用类名直接访问,非静态方法必须用对象访问,对象也可以访问静态方法。【运行结果】03Java常用类5.3Java常用类5.3.1String类字符串广泛应用在Java编程中,在Java中,字符串属于对象,Java提供了String类来创建和操作字符串。String类常用的方法有:(1)publicString(char[]value):由字符数组创建字符串。(2)publicString(charchars[],intstart,intnum):由字符数组创建字符串,指定起始下标和长度。(3)publicString(Stingoriginal):由字符串创建新字符串。(4)publicString():创建空字符串。(5)publiccharcharAt(intindex):返回字符串中指定位置的字符。(6)publicintlength():返回字符串的长度。5.3Java常用类(7)publicintindexOf(Stringstr):返回字符串中第一次出现str的位置。(8)publicintindexOf(Stringstr,intfromIndex):返回字符串从fromIndex开始首次出现str的位置。(9)publicbooleanequalsIgnoreCase(Stringanother):比较字符串与another是否一样。(10)publicStringpublicreplace(charold,charnew):在字符串中用new字符替换old字符。(11)publicbooleanstartsWith(Stringprefix):判断字符串是否以prefix字符串开头。(12)publicbooleanendsWith(Stringsuffix):判断字符串是否以suffix字符串结尾。5.3Java常用类(13)publicStringtoUpperCase():返回字符串为该字符串的大写形式。(14)publicStringtoLowerCase():返回字符串为该字符串的小写形式。(15)publicStringsubstring(intbegin):返回该字符串从begin开始到结尾的子字符串。(16)ublicStringsubstring(intbegin,intend):返回该字符串从begin开始到end结尾的子字符串。(17)publicStringtrim():返回该字符串去掉开头和结尾空格后的字符串。(18)publicString[]split(Stringregex)将字符串按照指定分隔符分隔,返回分隔后的字符串数组。5.3Java常用类【例5-9】身份证号的简单分析。输入18位身份证号,输出对应的出生日期和性别,并判断身份证所在地是否为浙江省杭州市。【程序】【程序说明】程序中,用字符串来表示身份证号码。用substring()方法抽取年、月、日对应的子串。身份证字符串的第16位与性别有关,偶数代表女性,奇数代表男性。程序中,用charAt()方法抽取该位对应的字符,再减去字符“0”得到该字符对应的数字。【运行结果】5.3Java常用类5.3.2StringBuffer类String类对象一般用来表示字符串常量,字符串本身是不能修改的。StringBuffer类常用的方法有:(1)publicStringBuffer():创建新的字符串对象。(2)publicStringBuffer(String):创建一个初始值为String的字符串对象。(3)publiccharcharAt(intindex):返回字符串中指定位置的字符。(4)publicintlength()返回字符串的长度。(5)publicvoidsetCharAt(intindex,charch):重设指定位置上的字符。5.3Java常用类(6)publicStringBufferappend(Objectobj):将指定参数对象转换为字符串添加到原串尾。(7)publicStringBufferinsert(intoffset,Objectobj):将指定参数对象转换为字符串,然后插到从offset开始的位置。(8)publicStringtoString():将字符串转换成String对象。(9)publicStringBufferreplace(intstart,intend,Stringstr):将由start开始到end–1结束的位置处的字符序列用str来替代。(10)publicStringBufferreverse():倒置当前StringBuffer对象中的字符序列。(11)publicStringBufferdeleteCharAt(intindex):删除指定位置的字符。5.3Java常用类【例5-11】使用StringBuffer对象。【程序】【运行结果】【程序说明】程序中调用了append(),delete(),deleteCharAt(),insert(),replace()及reverse()等方法,直接修改字符串对象。5.3Java常用类5.3.3Math类Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。Math类中还定义了PI和E两个double型常量,分别是3.141592653589793(圆周率π)和2.718281828459045(自然对数的底数e)。Math类的一些常用方法有:(1)publicstaticdoublesin(doublea):返回角度a(以弧度为单位)的正弦值。(2)publicstaticdoublecos(doublea):返回角度a(以弧度为单位)的余弦值。(3)publicstaticdoublepow(doublea,doubleb):返回a的b次幂。(4)publicdoublerandom():返回0~1之间的随机数double。5.3Java常用类(5)publicdoublelog(doublex):返回自然对数。(6)publicdoubleexp(doublex):返回e的x次幂(ex)。(7)publicintround(floatf):返回最靠近f的整数。(8)publicdoubleceil(doubled):返回不小于d的最小整数(返回值为double型)。(9)publicdoublefloor(doubled):返回不大于d的最大整数(返回值为double型)。5.3Java常用类【例5-12】输入直角三角形的两个直角边,输出三角形的面积及两个锐角的度数。【程序】【运行结果】【程序说明】a/c为a边对角的正弦值,Math.asin(a/c)为该角的弧度数,Math.asin(a/c)*180/Math.PI进一步将弧度转换为角度,Math.round(Math.asin(a/c)*180/Math.PI)则进行了四舍五入处理,保留整数部分。5.3Java常用类5.3.4Date类Date类表示特定的时间,精确到毫秒。Date类常用的方法有:(1)publicDate():获取本地当前时间创建日期时间对象。(2)publicStringtoString():由日期时间对象获取对应字符串。(3)publiclonggetTime():返回自1970年01月01日凌晨0点0分0秒至现在所经过的毫秒数。5.3Java常用类【例5-13】Date类示例。【程序】【运行结果】04范例5.4范例【例5-12】定义Complex类,表示复数。【程序】5.4范例【例5-13】定义VPoint类,表示三维空间点。【程序】3.4范例【例5-14】定义Triangle类,表示三角形类。【分析】三角形由三条边a、b、c组成,计算三角形的周长及面积。【程序】5.4范例【例5-15】定义汽车类Car,包括一个double类型的变量speed,用于刻画机动车的速度,还包括一个double型变量power,用于刻画机动车的功率。【分析】方法speedUp(intspeed)体现了机动车的加速功能。方法speedDown(intspeed)体现了机动车的减速功能。【程序】5.4范例【例5-16】定义一个学生类,其中有3个数据成员:学号、姓名、年龄,以及若干成员函数。编写main()函数使用这个类,实现对学生数据的赋值和输出。【分析】设学生类名为Student,学号为no,类型为String,姓名为name,类型为String,年龄为age,类型为int。【程序】5.4范例【例5-17】建立一个学生类,有姓名、学号、3门课成绩、总分等信息,能输入/输出学生数据,并能对总分进行排序,打印名次。【分析】方法publicStudent(Strings1,Strings2,doublej,doublem,doublee)为构造方法,在创建实体对象的时候执行,构造方法中,有数据类型、属性值,声明构造方法是为了进行类中属性的初始化。【程序】5.4范例5.4范例【例5-18】利用构造方法的重载,计算圆、三角形、矩形的面积。【分析】对于同一个类,如果这个类里面有两个或者多个重名的方法,但是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 30104.202-2013数字可寻址照明接口 第202部分:控制装置的特殊要求 自容式应急照明 (设备类型1)》
- 学校办学管理经验交流会校长发言:跳出制度依赖激活生态活力
- 深度解析(2026)《GBT 29658-2013电子薄膜用高纯铝及铝合金溅射靶材》
- 2026年中考英语一轮复习检测卷苏州专用含答案解析
- 《GAT 1024-2013视频画面中目标尺寸测量方法》(2026年)合规红线与避坑实操手册
- 2026年社区家政保洁服务协议书
- 细胞培养肉规模化生产关键技术研究与示范项目可行性研究报告模板拿地备案立项
- 早绝经与绝经女性骨质疏松非药物干预总结2026
- 2025北京牛栏山一中高三(上)期中化学试题及答案
- 胆囊结石护理培训考核试题及答案解析
- 人教版 (2019)必修1《分子与细胞》第2节 细胞器之间的分工合作表格教案
- 2026年企业主要负责人和安全管理人员安全培训题库及答案
- 2026年2026年浙江省名校高三语文第二次联考试卷附答案解析新版
- 中国资产评估协会中国资产评估协会资产评估技术案例汇编2025年
- 2026年小学生气象知识竞赛题库及实战解析
- 2026年中国化工经济技术发展中心招聘备考题库及完整答案详解一套
- 2026年卫星互联网全球连接报告及未来五至十年通信基建报告
- 2024版股份合资企业运营管理及风险控制合同3篇
- 磷石膏固废资源化利用技术及应用前景
- 【MOOC】声乐教学与舞台实践-江西财经大学 中国大学慕课MOOC答案
- 试卷保密工作流程
评论
0/150
提交评论