如何定义类

news2024/11/23 7:36:26

        类是将数据和方法封装在一起的一种数据结构,其中数据表示类的属性,方法表示类的行为,所以定义类实际上就是定义类的属性与方法。用户定义一个类实际上就是定义一个新的数据类型。在使用类之前,必须先定义它,然后才可利用所定义的类来声明相应的变量,并创建对象,这与声明一个基本类型的变量(如int x)实质上是一个概念,只是基本数据类型是系统定义好的,无须用户定义。

1.类的一般结构

        定义类又称为声明类,其一般的语法结构如下:

其中,方括号[]中的修饰符是可选项,它是一组限定类、成员变量和成员方法是否可以被程序里的其他部分访问和调用的控制符。其中,类修饰符分为公共访问控制符、抽象类说明符、最终类说明符和缺省访问控制符四种。各修饰符的含义如表6.1所示。

                                                        表 1  类修饰符的含义

一个类可以有多个修饰符,且无先后顺序之分,但abstract和final相互对立,所以不能同时应用在一个类的定义中。

2.成员变量

        一个类的成员变量描述了该类的内部信息,一个成员变量可以是基本类型变量,也可以是对象、数组等其他引用型数据。成员变量的格式如下:

[修饰符]变量类型变量名[=初值];

成员变量的修饰符有访问控制符、静态修饰符、最终修饰符、过渡修饰符和易失修饰符等,其含义如表6.2所示。

                                                        表 2  成员变量修饰符的含义

除了访问控制修饰符有多个之外,其他的修饰符都只有一个。一个成员变量可以被两个以上的修饰符同时修饰,但有些修饰符是不能同时定义在一起的。

说明 :在定义类的成员变量时,可以同时赋初值,表明成员变量的初始状态,但对成员变量的操作只能放在方法中。

3.成员方法

        类的方法是用来定义对类的成员变量进行操作的,是实现类内部功能的机制,同时也是类与外界进行交互的重要窗口。声明方法的语法格式如下:

说明 :如果不需要传递参数到方法中,只需将方法名后的圆括号写出即可,不必填写任何内容。另外,若方法没有返回值,则返回值的数据类型应为void,且return语句可以省略。在方法的定义中修饰符是可选项。方法的修饰符较多,包括访问控制符、静态修饰符、抽象修饰符、最终修饰符、同步修饰符和本地修饰符等,其含义如表6.3所示。

                                                        表 3  成员方法修饰符的含义

成员方法与成员变量同样有多个控制修饰符,当用两个以上的修饰符来修饰同一个方法时,需要注意,有的修饰符之间是互斥的,所以不能同时使用。

下面定义前面叙述过的圆柱体类如下:

4.成员变量与局部变量的区别

由类和方法的定义可知,在类和方法中均可定义属于自己的变量。类中定义的变量是成员变量,而方法中定义的变量是局部变量。类的成员变量与方法中的局部变量是有一定区别的。

(1)从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public、private、static等修饰符所修饰,而局部变量则不能被访问控制修饰符及static所修饰;成员变量和局部变量都可以被final所修饰。

(2)从变量在内存中的存储方式上看,成员变量是对象的一部分,而对象是存在于堆内存的,而局部变量是存在于栈内存的。

(3)从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而产生,随着方法调用的结束而自动消失。

(4)成员变量如果没有被赋初值,则会自动以类型的默认值赋值(有一种情况例外,被final修饰但没有被static修饰的成员变量必须显式地赋值);而局部变量则不会自动赋值,必须显式地赋值后才能使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1181807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaEE初阶】 UDP协议的详细解析

文章目录 🌲UDP协议概念🌴UDP协议端格式🎄UDP的特点🚩无连接🚩不可靠传输🚩面向数据报🚩缓冲区🚩全双工🚩大小受限 🍀基于UDP的应用层协议🎍扩展问…

Linux安装nodejs问题

安装nodejs后,使用node -v报下图 参考下面两个可解决:【Linux-编译器gcc/glibc升级】CentOS7.9使用NodeJS18时报错/lib64/libm.so.6: version GLIBC_2.27‘ not found-CSDN博客 报错信息ImportError: /lib64/libstdc.so.6: version CXXABI_1.3.9‘ not f…

JavaScript使用对象

对象(object)是最基本、最通用的类型,具有复合性结构,属于引用型数据,对象的结构具有弹性,内部的数据是无序的,每个成员被称为属性。在JavaScript中,对象是一个泛化的概念,任何值都可以转换为对…

FreeRTOS源码阅读笔记2--list.c

list.c中主要完成列表数据结构的操作,有列表和列表项的初始化、列表的插入和移除。 2.1列表初始化vListInitialise() 2.1.1函数原型 void vListInitialise( List_t * const pxList ) pxList:列表指针,指向要初始化的列表。 2.1.2函数框架…

viple进阶2:打印九九乘法表

(1)题目 题目:使用viple打印九九乘法表 (2)设计与实现 观察效果图,发现: 1、第1行,有1个公式;第2行有2个公式;第3行有3个公式,以此类推&#x…

Texlive安装

下载4.8G的iso文件 解压 或 装载后,以管理员身份运行(.bat)文件。 运行以下两句代码进行Texlive相关升级 tlmgr option repository otan tlmgr update --self --all 运行以下三行代码,检查是否安装成功 latex -v xelatex -v pdflatex -v 如果有异常…

基于协作搜索算法的无人机航迹规划-附代码

基于协作搜索算法的无人机航迹规划 文章目录 基于协作搜索算法的无人机航迹规划1.协作搜索搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用协作搜索算法来优化无人机航迹规划。 …

思谋科技进博首秀:工业多模态大模型IndustryGPT V1.0正式发布

大模型技术正在引领新一轮工业革命,但将其应用于工业制造,仍面临许多挑战,专业知识的缺乏是关键难点。11月5日,香港中文大学终身教授、思谋科技创始人兼董事长贾佳亚受邀参加第六届中国国际进口博览会暨虹桥国际经济论坛开幕式。虹…

技术分享 | app自动化测试(Android)--显式等待机制

WebDriverWait类解析 WebDriverWait 用法代码 Python 版本 WebDriverWait( driver,timeout,poll_frequency0.5,ignored_exceptionsNone) 参数解析: driver:WebDriver 实例对象 timeout: 最长等待时间,单位秒 poll_frequency: 检测的间…

技术分享 | Appium 用例录制

下载及安装 下载地址: github.com/appium/appi… 下载对应系统的 Appium 版本,安装完成之后,点击 “Start Server”,就启动了 Appium Server。 在启动成功页面点击右上角的放大镜,进入到创建 Session 页面。配置好…

nginx-配置拆分(各个模块详细说明)

主配置文件 配置结构 ... #nginx全局块events { #events块... #events块 }http { #http块... #http全局块server { #server块... #server全局块location [PATTERN] { #location块... #location块}location [PATTERN] {...}}serv…

2023年起重机司机(限桥式起重机)证考试题库及起重机司机(限桥式起重机)试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2023年起重机司机(限桥式起重机)证考试题库及起重机司机(限桥式起重机)试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作…

算法打卡01——求两数之和

题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你…

TCP/IP的基础知识

文章目录 TCP/IP的基础知识硬件(物理层)网络接口层(数据链路层)互联网层(网络层)TCP/IP的具体含义传输层应用层(会话层以上的分层)TCP/IP分层模型与通信示例发送数据包的一个例子接收…

Notepad++中删除连续的任意n行

使用Notepad里的行标记功能,可以删除指定的任意n行。 案例1,删除sample2.dat里的第201行到第10000行。方法如下: (1) 用户NotePad打开sample2.dat,右击201行 —》“开始/结束”/开始 图(1) 选择行的起点:201 (2) 接…

计算机网络第4章-通用转发和SDN

引子: 在前面,我们将基于目的地转发的特征总结为两个步骤: 查找目的IP地址(匹配),然后将分组发送到有特定输出端口的交换结构(“动作”)。 但是这种转发特征会带来许多问题&#…

Codeforces Round 907 (Div. 2——ABC)

A.Sorting with Twos 题目 给定一个数组a,可执行操作如下: 1、选择一个非负整数m,要求 2、将数组中元素从1到m减去1 问,是否可以通过以上操作得到一个单调不增的数组序列。 输入 首行样例个数t, 每个样例首行数…

MySQL第七讲·怎么利用聚合函数实现高效地分组统计?

你好,我是安然无虞。 文章目录 聚合函数:怎么高效地进行分组统计?sum( )avg( ) & max( ) & min( )count( ) 聚合函数:怎么高效地进行分组统计? MySQL中有5种聚合函数较为常用,分别是求和函数sum(…

面试官:说说Redis的SDS底层实现原理

文章目录 前言面试开始1、说说Redis基本类型有哪些2、String类型常用于什么场景3、String类型采用什么数据结构4、继续深入讲讲SDS实现细节5、你说说SDS和C语言字符串的区别5.1、SDS获取长度时间复杂度更低5.2、SDS杜绝缓冲区溢出5.3、SDS减少字符串内存重分配次数5.4、SDS二进…

pytest全局变量的使用

这里重新阐述下PageObject设计模式: PageObject设计模式是selenium自动化最成熟,最受欢迎的一种模式,这里用pytest同样适用 这里直接提供代码: 全局变量 conftest.py """ conftest.py 全局变量,主要实…