您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页【java从入门到精通】第四篇·编写类

【java从入门到精通】第四篇·编写类

来源:五一七教育网


1. 前言

       Java是很多人除了C语言外接触的第一门计算机语言,而且在遥远的未来,它有很大的概率将陪伴你一路走下去。猫猫整理这一份文档,希望能帮助每一位想要入门Java的战友们,未来就在我们脚下,让我们一起努力吧✊

本系列分为两个部分:

(全面知识梳理一律加上【第*篇】字样,是软件工程所有知识的全面梳理)

(特别知识梳理针对【面向对象】部分的知识展开,这是Java的核心部分)

参考书籍🥰:

《Java从入门到精通(第7版)》是2023年清华大学出版社出版的图书,作者是明日科技

十二月的猫猫在这里祝愿大家都能在期末考试中取得好成绩,高分拿拿拿!考试过过过!💯


2. 编写类

        了解对象和类的关系、区别;编写类时最初需要熟悉类的结构(数据、方法)、基础知识(返回值、参数列表等),之后需要能够根据类的特点自己设计它所包含的变量、方法。

2.1 章节框架

2.2 基本概念

        类与对象:类是一类相似事物的总和,而对象则是具体存在的一个事物,比如人是个类,而你就是一个对象;又或者学生是一个类,而你是学生这个类的一个对象。

        对象:对象是类的一次实现,是有确定的状态和行为

        对象的状态:内部的属性(变量)表示,例如:学生张三是学生类的一个对象,它有一些状态,比如学习的状态,这可以用一个变量来表示(例如用 boolean 类型的变量 study 表示是否学习,true 表示正在学习,false 为玩耍状态)。

        对象的行为:以学生张三为例,它存在上课这个行为,所以可以定义一个函数 Learn()来表示它上课的行为,每次调用这个函数就表示张三进行了上课这个行为。

注意:对象的行为可能会改变对象的状态,上面的例子中当张三执行上课这个函数时它就会改变张三的状态,改变成学习状态。

类的编写:因为我们平时用到的类很多都不是 Java 类库的预定义类,所以需要我们自己进行类的编写来实现我们的需求。

2.3 类的分析

        对象存在状态和行为,所以作为一类对象的抽象事物,类也存在状态和行为,即数据和方法,类的数据和方法称为类的成员

2.3.1 编写类的一般方法

        (1)声明类包含的各种变量
        (2)编写类的各种方法,方法中可能会修改类的变量。类的方法包括构造方法和常规方法。写方法时需要考虑方法的返回值、参数等。

2.3.2 概念

        构造方法:和常规方法的编写方法没有差别,不同的是它的方法名称跟类名称相同方法不能有返回值(void 返回值也不可以),创建一个对象时会调用它来初始化一个对象(一般是用来初始化对象的一些变量值等)。不必为每个类都创建构造方法,因为每个类都有一个不带参数的默认构造方法

        实例数据:类中的属性(变量),每次创建一个对象时会为这个对象的实例数据分配内存空间,这就是为什么同一个类的不同对象都具有自己的状态。变量的声明位置定义了这个变量的可见范围,变量的可见范围确定了变量在程序中已被引用的区域。当变量声明在类的级别(不是在某个方法内部声明)类内的所有方法都能引用这个变量

2.3.3 实例分析

        (1) 分析

        以 Die 类(骰子)为例:因为 Die 不是 Java 类库的预定义类,所以需要我们自己进行类的编写,需要编写类的数据和方法:

        ①类的数据声明:分析骰子的各种状态,它有最大面值和当前面值,所以需要两个变量来表示这两个状态。

        ②类的方法的声明:骰子具有的行为有旋转、设置当前面值、获取当前面值,所以需要三个方法来分别实现这三个行为。除了类本身的各种行为以外,还可能会声明一些方法用于信息的输出,例如下面要看的方法 toString().

        Die 类包含两个变量(实例数据):整型常量 MAX 来表示骰子的最大面值,整型变量faceValue 来表示骰子当前面的数值,这两个实例数据的声明在类的级别,所以 Die 类内的所有的方法都可以引用它们。final 修饰 MAX 表示 MAX是一个常量(一次执行过程中不能被修改),private 修饰符在后面会讲到。

        Die 类包含构造方法和普通方法。它的构造方法是方法名和类名 Die 相同的方法,也就是方法 Die(),它实现的是把当前面的数值初始化成 1.当使用new 运算符来创建一个 Die 对象的时候,系统会调用 Die 类的构造方法 Die()完成。

        facevalue 变量初始化为 1。常规方法包括骰子自身的一些行为和用于输出信息的方法。
其中骰子自身的行为包括roll(),setFaceValue(),getFaceValue()三个,这跟之前分析的骰子的行为是一致的。而 toString()函数要执行的操作就是返回 facevalue 变量的值。它的使用情况:把一个Die 对象传递给 print 方法或者 println 方法的时候,系统会自动调用 toString 方法,输出 toString 方法的返回值,这会在之后的学习中进行剖析,此处先了解一下。

2.3.4 UML 图

  •  UML:统一建模语言,最流行的一种描述面向对象程序设计的符号体系。
  • UML 类图:描述类的结构及其类间的关系的 UML 图。 
  • 用法:UML 类图中每个类用矩形表示,其中由三部分组成:类名、属性(数据)、操作(方法)。

类间关系:以类 A,类 B 为例
        ①“A uses B”:A 使用 B 的方法
        ②“A has B”:类 A 内部有 B 类型的变量
        ③“A is B”:A 类属于 B 类,例如人类属于生物这个类
例:下图中 RollingDice 类调用了 Die 的方法,用带箭头的虚线表示,是“use”关系。 

2.4 封装

        封装:对象必须是运行的,内部变量必须经过自己的方法修改,类之外的代码难于甚至无法访问和修改在类内部声明的变量,这种特性叫做封装,java 中通过修饰符(java 保留字)实现封装。

        图示说明:client 想要获取对象的数据,必须通过调研对象的方法来获得数据,而不能直接获取数据。  

2.4.1 可见性修饰符

        Java 中可见性修饰符包括 privatepublic

        Public:修饰的方法和变量是公开可见的,所有类都可见(可以引用),称为服务方法,UML图中在变量前面加“+”表示 public 可见性。

        Private:修饰的方法和变量则只能在类的内部可见,类外不可见(之前的 Die 类的
MAX,faceValue 变量都是 private 修饰,所以只在 Die 类内可见)。Private 修饰的方法只在类的内部可见,所以它一般辅助类内的其他方法工作,也称为支持方法,UML 图中在变量前面加“-”表示 private 可见性。

2.4.2 访问器和修改器

        访问器方法:类似 getFaceValue()这样的方法,调用这种方法可以得到相关数据。
        修改器方法:类似 setFaceValue()这样的方法,调用这种方法可以用于修改实例数据。
        规范:一般来说,若变量名为 Height,则它的访问器方法和修改器方法分别为getHeight() 、setHeight()。

2.5 方法剖析

2.5.1 概念

        方法声明:调用本方法时要执行的代码。
        方法调用:当一个方法被调用时,执行控制流就转移到该方法,并逐条执行该方法中的语句,方法执行完后返回到调用该方法的位置继续往下执行,图解:
情况一:只调用一次方法:

情况二:调用方法内部又调用了另外的方法:

2.5.2 方法声明

        函数(方法)包括函数头函数体两部分,所以函数的编写也需要按这两部分进行编写。

        (1)函数头

返回类型:函数要返回给调用位置的数据,若没有返回值则写 void 作为返回值类型。

参数:
        实际参数:一次方法调用中,实际传递给方法的参数是实际参数(实参,也称为方法的变元)。
        形式参数(形参):是方法声明时的参数,方法调用时形参的初始值由调用该方法时传递的实参赋予。
参数列表:调用这个函数时需要给出的数据,给出的参数列表(数据的类型、排列顺序等)需要跟函数的声明时的参数列表完全一致,若该方法没有参数也需要在方法名后面写一个空括号。
        图解:num1,num2,message 是形参,而 25,count,“Hello”是实参。

  

        (2)函数体

        ①返回语句:存在返回值时需要有返回语句 return。当执行返回语句时控制立即返回到调用该方法的位置并继续往下执行。返回语句由 return 和后续的表达式组成,表达式确定了要返回的值,并且类型和函数头规定的返回值类型一致。一般一个方法只有一个 return 语句,写在方法的最后一行。图解:

        ②局部数据:声明位置在方法内部的变量,相对于实例数据(类级别的)。局部数据只能在声明它的方法内部使用,方法外不可见

        注意:当一个类内存在实例数据和局部数据名称相同时,在局部数据对应的方法内部使用的

2.6 例题参考

例题一:

注解:

  1. 代码执行到 return 语句后会立即返回到调用该方法的位置并继续执行,并不会继续执行 return 后面的语句。
  2. Getter 和 setter 的使用不仅仅是针对于基本数据类型,而是类内的变量,通过对类内变量的 get 和 set 实现封装。
  3. 方法的返回值类型没有特殊规定,只需要返回值类型和函数头中声明的返回值类型一致。

例题二:

 例题三:

3. 总结

本文到这里就结束啦~~

目前已完成:

期待您的关注~~🥰🥰

猫猫陪你永远在路上💪💪

如果觉得对你有帮助,辛苦友友点个赞哦~

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务