【从浅到深的算法技巧】构造函数,实例方法

1.2.3抽象数据类型的实现

和静态方法一样,我们也需要使用Java的类(class )实现抽象数据类型并将所有代码放入一个和类名相同并带有java扩展名的文件中。文件的第一部分语句会定义表示数据类型的值的实例变量。它们之后是实现对数据类型的值的操作的构造函数和实例方法。实例方法可以是公共的或是私有的(用于辅助计算,用例无法使用)。一个数据类型的定义中可能含有多个构造函数,而且也可能含有静态方法,特别是单元测试用例main(),它通常在调试和测试中很实用。作为第一个例子,我们来学习1.2.1.1节定义的Counter抽象数据类型的实现。它的完整实现(带有注释)如下所示:

数据类型的定义类
public class Counter{  //类名//实例变量private final String name;private int count;//构造函数public Counter(String id){name=id;}//实例方法public void increment()(count++; 
}//实例方法
public int tally(){return count;
}//实例方法
public String toString(){			return count +" "+ name;  //实例变量名
}//测试用例
public static void main(String[] args){//创建并初始化对象Counter heads = new Counter("heads") ;Counter tails = new Counter("tails");heads.increment();heads.increment();tails. increment();//自动调用toString()方法System.out.println(heads+" "+tails);
}		
}
抽象数据类型中的实例变量是私有的
private int count;private final String name;
1.2.3.1实例变量

要定义数据类型的值(即每个对象的状态) ,我们需要声明实例变量,声明的方式和局部变量差不多。实例变量和你所熟悉的静态方法或是某个代码段中的局部变量最关键的区别在于:每时刻每个局部变量只会有一个值,但每个实例变量则对应着无数值(数据类型的每个实例对象都会有一个)。

这并不会产生二义性,因为我们在访问实例变量时都需要通过一个对象——我们访问的是这个对象的值。同样,每个实例变量的声明都需要一个可见性修饰符。在抽象数据类型的实现中,我们会使用private,也就是使用Java语言的机制来保证向使用者隐藏抽象数据类型中的数据表示。如果该值在初始化之后不应该再被改变,我们也会使用final。Counter 类型含有两个实例变量,一个String类型的值name和一个 int类型的值count。

1.2.3.2构造函数

每个Java类都至少含有一个构造函数以创建一个对象的标识。 构造函数类似于一个静态方法, 但它能够直接访问实例变量且没有返回值。一般来说, 构造函数的作用是初始化实例变量。每个构造函数都将创建一个对象并向调用者返回一个该对象的引用。构造函数的名称总是和类名相同。我们可以和重载方法一样重载这个名称并定义签名不同的多个构造函数。如果没有定义构造函数,类将会隐式定义一个默认情况下不接受任何参数的构造函数并将所有实例变量初始化为默认值。原始数字类型的实例变量默认值为0,布尔类型变量为false,引用类型变量为null。我们可以在声明语句中初始化这些实例变量并改变这些默认值。当用例使用关键字new时,Java 会自动触发一个构造函数。 重载构造函数一般用于将实例变量由默认值初始化为用例提供的值。例如,Counter 类型有个接受一个参

数的构造函数,它将实例变量name初始化为由参数给定的值(实例变量count仍将被初始化为默认值0)。

详解构造函数
//public:可见性修饰符;Counter:构造函数名称(和类名相同);String id:参数变量public Counter (String id){  name=id; }//初始化实例变量的代码,(count将会被初始化为默认值0)
1.2.3.3实例方法

实现数据类型的实例方法(即每个对象的行为)的代码和实现静态方法(函数)的代码完全相同。每个实例方法都有一一个返回值类型、一个签名(它指定了方法名、返回值类型和所有参数变量的名称)和一个主体(它由一系列语句组成,包括一个返 回语句来将一个返回类型的值传递给调用者)。当调用者触发了一个方法时,方法的参数均会被初始化为调用者所提供的值,方法的语句会被执行,直到得到一个返回值并且将该值返回给调用者。它的效果就好像调用者代码中的丽数调用被替换为了这个返回值。实例方法的所有这些行为都和静态方法相同,只有一点关键的不同:它们可以访问并操作实例变量。如何指定我们希望使用的对象的实例变量?就是在一个实例方法中对变量的引用指的是该方法的变量中的值。

详解实例方法
//public:可见性修饰符;void:返回值类型;increment():方法名public void increment(){Count++;  //实例变量名}
1.2.3.4作用域

总的来说,我们在实现实例方法的Java代码中使用了三种变量:

​ 1.参数变量;

​ 2.局部变量;

​ 3.实例变量。

在静态方法中前两者的用法没有变化:方法的签名定义了参数变量,在方法被调用时参数方法会被初始化为调用者提供的值;局部变量的声明和初始化都在方法的主体中。参数变量的作用城是整个方法;局部变量的作用城是当前代码段中它的定义之后的所有语句。实例变量则完全不同 :它们为该类的对象保存了数据类型的值,它们的作用城是整个类(如果出现二义性,可以使用this前缀来区别实例变量)。

实力方法中的实力遍历和局部变量的作用范围
public class Example{  //实例变量private int var;...private void method1(){int var;  //局部变量...  var  ...  //调用的是局部变量...  this.var  ...  //调用实例变量}private void method2(){...  var  ...  //调用实例变量}}

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

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

相关文章

2024年第二届“华数杯”国际大学生数学建模竞赛 (A题 MCM)| 废水扩散分析 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 让我们来看看华数杯的A题! 完整内容可以在文章末…

zabbix-api

一、API官方文档 https://www.zabbix.com/documentation/4.0/zh/manual/api https://www.zabbix.com/documentation/5.0/zh/manual/api 二、使用示例 1、获取zabbix token curl -s -X POST http://192.168.1.1/zabbix/api_jsonrpc.php -H Content-Type: application/json-rp…

机器学习算法 - 马尔可夫链

马尔可夫链(Markov Chain)可以说是机器学习和人工智能的基石,在强化学习、自然语言处理、金融领域、天气预测、语音识别方面都有着极其广泛的应用 > The future is independent of the past given the present 未来独立于过去&#xff…

java SECS管理系统 将逐步推出 SECS 客户端(Passive) 管理系统 SECS快速开发平台 springboot secs开发平台

SECS管理系统 这是一套SECS客户端(Passive),可以直接连接PLC设备,支持Modbus、三菱MC、欧姆龙Fine、OPC-UA、西门子S7设备等通信。 企业已经有了EAP软件,但是设备没有SECS通信功能,这时候可以使用这套框架,直接连接设备&#xff…

GEE使用

【GEE】Google Earth Engine(GEE)注册详细教程&无需教育邮箱-CSDN博客 数据下载代码 // Map the function over 3 months of data and take the median. // Load Landsat-8 surface reflectance data.var landsat8 ee.ImageCollection("LAND…

vue3和vue2区别

响应式区别 在 Vue 2 中,使用了 Object.defineProperty 来实现数据的响应式。它通过逐个定义对象属性的方式来进行数据的劫持和监听。这种方式存在一些限制,例如无法监听新增的属性,需要使用 Vue 提供的 $set 方法来实现响应式。此外&#x…

使用composer生成的DMG和PKG格式软件包有何区别

在使用Composer从包源构建软件包时候,有两种不同类型的包:PKG和DMG。你知道两者之间的区别吗? 以及如何选取吗? 每种格式都有各自的优势具体取决于软件包的预期用途以及用于部署软件包的工具。下面我们来了解一下PKG和DMG格式的区别和用途。…

STM32面试体验和题目

目录 一、说一下你之前的工作主要干了什么? 二、stm32有关的知识点 1.stm32的外设有哪一些 2.你的毕业论文的项目里面是怎么设计的 三,C语言的考察 1.写一个结构体(结构体的内容自由发挥) 2.写一个指针型的变量 3.结构体是…

C语言经典算法之快速排序算法

目录 前言 1. 快速排序简介 2. 快速排序的基本原理 2.1 选择基准元素 2.2 分割操作 2.3 递归排序 3. C语言中的快速排序实现 4. 总结 前言 快速排序算法可以分为两部分来看: 第一部分:将枢轴元素移动到最终位置 第二部分:分别处理枢轴…

Python密码本连接wifi

有时候我们会忘记自己的Wi-Fi密码,或者需要连接某个Wi-Fi网络以满足合法需求。本文将介绍如何使用Python编程语言编写一个简单的连接Wi-Fi的程序。 一、密码本准备 在进行wifi猜测时,其实就是列出各种可能的密码,用来尝试去访问目标wifi&…

Vue + JS + tauri 开发一个简单的PC端桌面应用程序

Vue JS tauri 开发一个简单的PC端桌面应用程序 文章目录 Vue JS tauri 开发一个简单的PC端桌面应用程序1. 环境准备1.1 安装 Microsoft Visual Studio C 生成工具[^2]1.2 安装 Rust[^3] 2. 使用 vite 打包工具创建一个 vue 应用2.1 使用Vite创建前端Vue项目2.2 更改Vite打包…

计算机毕业设计 基于Java的美食信息推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

vi/vim 编辑器 --基本命令

1 vi/vim编辑器介绍 vi 是visual interface 的简称,是Linux中最经典的文本编辑器 vim是vi的加强版。兼容了vi的所有指令,不仅能编辑文本,而且具有shell程序编辑的功能,可以通过不同颜色的字体辨别语法的正确性,极大…

轻松识别Midjourney等AI生成图片,开源GenImage

AIGC时代,人人都可以使用Midjourney、Stable Diffusion等AI产品生成高质量图片,其逼真程度肉眼难以区分真假。这种虚假照片有时会对社会产生不良影响,例如,生成公众人物不雅图片用于散播谣言;合成虚假图片用于金融欺诈…

支持华为GaussDB数据库的免费开源ERP:人力资源管理解决方案概述

开源智造所推出的Odoo SuperPeople数字化解决方案将HR和薪资数据与财务、项目规划、预算和采购流程连接起来,消除了多套系统给企业带来的信息孤岛问题。 ——复星集团 人力资源中心 高经理 一种更具吸引力、更有洞察力的人员管理方式 什么是开源智造Odoo的人力资源…

【Vue】后端返回文件流,前端预览文件

let date;request({url: this.$route.query.url,method: get,responseType: blob,}).then(resp > {date respthis.path window.URL.createObjectURL(new Blob([resp], {type: "application/pdf"}))}).catch((e) > {//旧版本浏览器下的blob创建对象window.Blo…

centos系统设置runlevel为5

在 CentOS 系统中,可以使用以下步骤将运行级别(runlevel)设置为 5: 1. 打开终端或 SSH 连接到 CentOS 服务器。 2. 以 root 用户身份登录。 3. 运行以下命令来编辑 /etc/inittab 文件: shell sudo vi /etc/inittab…

中产医学产康AI智慧云发布会暨中产学院2024年度盛典圆满成功

【向光而行】中国医学产康AI智慧云服务平台发布会暨中产学院2024年度盛典 前言 开新局,迈新步,谋新篇,创新绩。中产医学产康AI智慧云服务平台发布会 暨中产学院2024年度盛典于2024年1月10日在郑州.涵唐酒店成功举办。本次年会以“【向光而行…

跟着cherno手搓游戏引擎【7】Input轮询

在引擎程序中任何时间,任何位置都能知道按键是否按下、鼠标的位置等等信息。 与事件系统的区别:事件系统是在按下时调用并传递按键状态;轮询是每时每刻都能获取按键状态 创建基类: YOTO/Input.h:名如其意 #pragma …

php反序列化之pop链构造(基于重庆橙子科技靶场)

常见魔术方法的触发 __construct() //创建类对象时调用 __destruct() //对象被销毁时触发 __call() //在对象中调用不可访问的方法时触发 __callStatic() //在静态方式中调用不可访问的方法时触发 __get() //调用类中不存在变量时触发(找有连续箭头的…