版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.1面向过程与面向对象的概念3.2类与对象的定义和使用3.3访问修饰符3.4构造方法3.5this关键字3.6static关键字人们在探索客观世界的时候,为了更加方便地描述客观事物,会对事物进行分门别类。人们把具有相同属性、特性或者用途的事物归为一类,在这个类中的每个个体都具有该类的所有特征。这种思维其实就是面向对象的思维,它能够清晰明了地描述事物的特点和关系,同时便于研究和使用。其实,面向对象的编程思想就源于人们对客观世界的认知思维。Java语言是一门纯面向对象的高级编程语言,它具有抽象、封装、继承和多态四大特性。从“面向对象”的名字中就可以看到对象在Java语言中的重要性。实际上,Java语言最核心的概念就是类和对象,它们是实现上述四大特性的基石。本章围绕类和对象这两个概念重点介绍类的抽象和封装。3.1面向过程与面向对象的概念3.1.1面向过程与面向对象编程思想高级编程语言分为面向过程和面向对象两类语言,面向过程的编程思想是按照事物发展的先后顺序把过程分成几个步骤,每个步骤执行一段相对独立的代码处理一部分数据,相当于把问题的处理过程拆分成一个个的方法和数据,然后按照一定的顺序执行。通俗而言,面向过程编程就是通过创建变量和方法,并使用多个方法协同处理数据的过程。而面向对象的编程思想是把客观世界中具有相同属性的事物抽象成类的概念,在类中描绘该类事物共有的属性(变量)和行为(方法)。该类事物中的每个个体就是一个对象,每个对象可以有自己的属性值,同时可以调用类中的方法。然后在待处理的问题中创建一个个的对象,通过多个对象的相互配合来实现应用程序的功能。面向过程编程和面向对象编程都是按照一定的逻辑顺序调用预设的方法解决问题。但不同的是,面向过程编程的基本单元是方法,面向对象编程的基本单元是类,通过创建类的对象来调用类中定义的方法。当要处理的事务比较简单时,使用面向过程编程相对简洁。但如果需要处理的事务繁杂,那么每个步骤都要单独定义一个方法,在大多时候方法还不能通用,此时使用面向对象的编程方法就会显得简单明了。此外,在代码后续的扩展和维护上,面向对象的编程方法更加容易。面向过程和面向对象编程方式的对比如表3-1-1所示。3.1.2类与对象的概念类和对象是面向对象编程的核心概念。其中类是对客观世界中某一类事物的抽象,在描述这类事物的时候使用到了属性和行为。对象是类的实例化。类是一个抽象的概念,是对象的模板,而对象是一个具体的实例,是类的实体。在代码实现时,属性使用变量来描述,行为使用函数来描述。面向对象编程的过程就是根据需求创建许多不同的类,然后创建每个类的对象,每个对象都有各自的数据值,通过调用类中的方法来实现一定的功能逻辑。在Java编程中“一切事物皆对象”,客观世界中的所有事物都可以通过类来抽象,通过对象来描述。例如,可以创建天气类来描述天气的属性和行为,可以创建一个算法类来描述算法的属性和行为。在定义类的时候,并不是这类事物的属性和行为都需要写进去,也并不是必须同时具有属性和行为,而是根据编程的需求填写。当类定义好之后,就可以创建该类的对象了。3.2类与对象的定义和使用3.2.2对象的创建和使用类只是声明了一种自定义的引用数据类型,在编程时只有类是不够的,还需要创建类的对象。Java类的对象和数组相似,都是引用数据类型,因此它也符合数组定义的步骤,即先声明后实例化。在编写代码时可以使用两行代码,也可以合并成一行代码。Java对象的创建格式有如下三种:这三种形式基本没有区别,其中第三种形式更加简洁。只是在某些场合使用第二种形式编程会更加方便些。当声明一个Student类的对象stu时,JVM在内存空间为其开辟一个存储单元,该单元的默认值为null。当实例化一个对象时,在内存里面就会开辟另一个空间,里面存储该对象的属性值,同时将这个空间的存储地址赋值到stu变量的存储单元,如图3-2-1所示。由此可知,对象本身存储的是一个内存单元的地址,这个地址对应的内存空间才是真正存储对象属性值的地方。在Java语言中引用数据类型的变量在内存中存储时基本都是这种模式,如数组和枚举等。对象实例化后就可以使用本类中的成员了,它的语法规则为:此外,也可以创建类类型的数组,它的语法规则与基本数据类型的数组一致。3.3访问修饰符为了实现对数据的封装和保护,在Java语言中定义了类成员的访问修饰符,也叫访问控制符,用来控制成员能够被访问的范围。访问修饰符有以下四种:(1)private(私有的):只能在当前类中可访问。(2)default(缺省的):不用任何访问修饰符,也称作默认访问修饰符。在当前包内可访问。(3)protected(保护的):在当前类、当前包以及不同包里面的子类中可访问。(4)public(公有的):所有类都能访问。表3-3-1总结了这四种访问修饰符的权限控制范围。这里需要注意的是public和default可以用来修饰class关键字,但protected和private不可以用来修饰class关键字。通常,类的成员变量使用private来修饰,成员方法使用public来修饰。如果需要在类外访问一个私有化的成员变量,那么可以为其提供公有的访问方式。通常的做法是定义public类型的getter和setter方法,也称作getter和setter接口。通过getter方法返回一个私有化的成员变量,通过setter方法修改一个私有化的成员变量。getter及setter方法名的命名规范为:3.4构造方法为了能够在实例化对象的同时给对象的属性赋值,在Java类中定义了一种特殊的成员方法,即构造方法。构造方法不需要像其他成员方法那样通过对象来调用,而是由JVM在实例化对象的时候自动调用。Java构造方法必须满足以下三个条件:(1)方法没有返回类型;(2)方法大括号内可以使用return关键字来结束方法的执行,但不能使用return语句返回一个值;(3)方法名与类名相同。Java构造方法作为Java函数的一种,可以重载,同时也不支持默认形参。它为实例化对象提供了更丰富的方式。在一个Java类中至少需要一个构造方法,如果编程人员没有定义,那么JVM会默认生成一个public修饰的、无参的、没有任何执行代码的构造方法,例如:如果编程人员定义了类的构造方法,不论自定义的构造方法是否有形参,JVM都不会再默认生成构造方法。通常构造方法使用public来修饰,在一些应用场合中也会使用其他访问修饰符来修饰自定义的构造方法。需要说明的是,虽然Java语言从C++语言中汲取了构造方法的内容,但Java语言摒弃了C++语言中的析构函数。Java类里面不存在析构函数,而是引入了垃圾回收机制。有了这种机制,程序员不需要过多关心垃圾对象回收的问题,JVM会自动启动垃圾回收器将垃圾对象从内存中释放。3.5this关键字一个类可以创建多个对象。当一个对象被实例化时,就会在内存空间为其开辟一个存储单元,用以存储该对象的属性值。若一个类有N个被实例化的对象,内存空间就会有N个存储单元分别独立地存储每个对象的属性值。类的每个成员方法在内存中只存储一份,所有对象都可以去调用类的成员方法,将自己的属性值传递到函数中参与运算。对象和成员方法在内存中的存储结构如图3-5-1所示。那么,成员方法是如何识别不同的对象呢?这里就用到了this关键字。在Java中,this关键字主要用于类中,它代表当前类对象的引用。this关键字主要有以下三种用法:(1)使用this关键字访问类的成员变量。(2)使用this关键字访问类的成员方法。(3)使用this关键字访问类的构造方法。构造方法通常是由JVM自动调用,但程序员可以在构造方法内使用this关键字调用其他的构造方法。它的调用格式为:此处调用的是与this形参列表完全一致的构造方法。3.6static关键字在第一个Java代码程序中读者就接触到了static关键字,它用来修饰主函数,放在访问修饰符之后,方法返回类型之前,表示“静态的”。实际上,static关键字在Java语言中既可以修饰成员方法,也可以修饰成员变量、代码块等。3.6.1静态变量在Java语言中,静态变量就是使用static修饰的成员变量。在实际开发中,有时候需要一个类的对象共享一个成员变量,以节省内存开销。例如,一个学校的学生可以共享同一个学校名称,在大西洋中的鱼共享同一片海域,人类共享同一个家园等。由于在创建对象时每个对象都会有自己独立的数据存储单元,而共享的成员变量不需要每个对象空间都存储,这时就可以将这个共享的成员变量定义为静态变量。一个类的静态变量是该类对象所共享的,因此每个对象都可以访问它。同时静态变量在存储结构上不属于某一个对象,而是属于这个类,因此也可以通过类名直接访问静态变量。在实例化对象之前就可以使用类名调用静态变量。建议静态变量使用类名调用,这样可以直观地辨别出它是静态的。静态变量使用类名调用的语法格式为:类或者任一对象改变了静态变量的值,那么该值就会即时更新。如果希望静态变量能够在全局范围内被访问到,就将其定义为公有的。3.6.2静态代码块类的成员变量分为静态变量和非静态变量。一般而言,非静态变量是通过构造方法初始化的,每次实例化一个对象,都会调用相应形参的构造方法。而静态变量不需要每次实例化对象的时候都赋值,大多数时候静态变量只需要初始化一次就可以了。因此,静态变量一般不通过构造方法来赋值,而是通过Java类中的静态代码块来初始化。静态代码块是在Java类中独立存在的一段代码,用大括号括起来,前面加上static关键字,其语法格式如下:静态代码块只会在第一次使用类或者实例化第一个本类对象的时候才会执行,而且仅执行一次。如果静态代码块、构造方法和实例代码块都需要执行,那么执行的顺序依次为:静态代码块、实例代码块和构造方法。需要注意的是,静态代码块是不可以对非静态变量赋值的。3.6.3静态方法static关键字还可以修饰成员方法,此时这个方法就被称为静态方法。同静态变量一样,静态方法也可以在没有创建对象的情况下使用类名调用执行,而非静态方法只能通过实例化的对象调用。这就是为什么Java语言的主方法使用static修饰
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年托管装修合同模板
- 2024年技术成果转化与奖励合同
- 2024年度全球金融服务与合作合同
- 2024年搬运工伤害预防协议
- 2024年新式货物装卸服务承包合同
- 2024年式飞机舱天花板装修协议
- 2024年戏曲数字化保存与应用协议
- DB4117T 284-2020 强筋小麦新麦26生产技术规程
- 2024年房产买卖合同书私人对私人
- 2024年新合同法:权益保障全解析
- 医院卒中中心建设各种制度、流程汇编
- 邮储高级练习卷三(第12章-第17章)附有答案
- 重庆市江北区2023-2024学年六年级下学期期末考试数学试题
- 军队文职聘用合同管理规定
- 2024年贵州省安顺市西秀区小升初语文试卷
- 2024-2029年中国儿童牙冠行业市场现状分析及竞争格局与投资发展研究报告
- 新时代铁路发展面对面全文内容
- 人工智能与语文阅读理解教学
- 科学素养培育及提升-知到答案、智慧树答案
- 快递主管岗位职责
- 医疗差错、纠纷、事故登记表
评论
0/150
提交评论