java成员变量/局部变量2023017

news2024/11/17 3:46:24

成员变量/局部变量
1.定义位置不同,成员变量定义在类里,局部变量定义在类的方法里。
来自网络在这里插入图片描述
2.成员变量中,其中类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同,一个类在使用之前要经过类加载、类验证、类准备、类解析、 类初始化等几个阶段;而实例变量则从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同。
正是基于这个原因,可以把类变量和实例变量统称为成员变量,其中类变量可以理解为类成员变量,它作为类本身的一个成员,与类本身共存亡;实例变量则可理解为实例成员变量,它作为实例的一个成员,与实例共存亡。
3.关于初始化,成员变量无须显式初始化,只要为一个类定义了类变量或实例变量,系统就会在这个类的准备阶段或创建该类的实例时进行默认初始化,成员变量默认初始化时的赋值规则与数组动态初始化时数组元素的赋值规则完全相同。
4.局部变量根据定义形式的不同,又可以被分为如下三种:
–形参:在定义方法签名时定义的变量,形参的作用域在整个方法内有效。当通过类或对象调用某个方法时,系统会在该方法栈区内为所有的形参分配内存空间,并将实参的值赋给对应的形参,这就完成了形参的初始化。
–方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时失效。
–代码块局部变量:在代码块中定义的局部变量,这个局部变量的作用域从定义该变量的地方生效,到该代码块结束时失效。
与成员变量不同的是,局部变量除形参之外,都必须显式初始化。也就是说,必须先给方法局部变量和代码块局部变量指定初始值,否则不可以访问它们。
在这里插入图片描述
变量的使用规则:
对Java初学者而言,何时应该使用类变量?何时应该使用实例变量?何时应该使用方法局部变量?何时应该使用代码块局部变量?
这种选择比较困难,如果仅就程序的运行结果来看,大部分时候都可以直接使用类变量或者实例变量来解决问题,无须使用局部变量。但实际上这种做法相当错误,因为定义一个成员变量时,成员变量将被放置到堆内存中,成员变量的作用域将扩大到类存在范围或者对象存在范围,这种范围的扩大有两个害处。
1.增大了变量的生存时间,这将导致更大的内存开销。
2.扩大了变量的作用域,这不利于提高程序的内聚性。

局部变量有应用场景,成员变量呢?如果有如下几种情形,则应该考虑使用成员变量:
1.如果需要定义的变量是用于描述某个类或某个对象的固有信息的,例如人的身高、体重等信息,是人对象的固有信息,每个人对象都具有这些信息。这种变量应该定义为成员变量。
再进一步,如果这种信息对这个类的所有实例完全相同,或者说它是类相关的,例如人类的眼睛数量,目前所有人的眼睛数量都是2,如果人类进化了,变成了3个眼睛,则所有人的眼睛数量都是3, 这种类相关的信息应该定义成类变量;
如果这种信息是实例相关的,例如人的身高、体重等,每个人实例的身高、体重可能互不相同,这种信息是实例相关的,因此应该定义成实例变量。
2.如果在某个类中需要以一个变量来保存该类或者实例运行时的状态信息,例如五子棋程序中的棋盘数组,用以保存五子棋实例运行时的状态信息。这种用于保存某个类或某个实例状态信息的变量通常应该使用成员变量。
3.如果某个信息需要在某个类的多个方法之间进行共享,则这个信息应该使用成员变量来保存。例如,在把浮点数转换为人民币读法字符串,数字的大写字符和单位字符等是多个方法的共享信息,因此应设置为成员变量。
即使在程序中使用局部变量,也应该尽可能地缩小局部变量的作用范围,局部变量的作用范围越小,它在内存里停留的时间就越短, 程序运行性能就越好。因此,能用代码块局部变量的地方,就坚决不要使用方法局部变量。

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

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

相关文章

超市进销存之openGauss数据库的应用与实践

目录 一、背景 二、目的 三、什么是“进销存”,什么是超市进销存管理系统? 四、什么是openGauss数据库? 五、应用与实践(模拟超市进销存系统) 1、超市进销存数据库表设计 2、创建数据库表 3、手工插入数据 4、…

Python:使用xlrd过滤execl表中数据

一、写代码前需要注意事项首先我们需要注意:python xlrd库的新版本2.0.1版本移除了对.xlsx格式的支持,只支持.xls格式。报错信息如下:File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/xlrd/__ini…

react17+ts 学习

文章目录前言一、创建一个react项目启动项目项目打包打包命令npm run eject的作用入口文件分析react的设计理念二、创建一个reacttypescript的项目创建项目命令如何让react支持json引入不报错react为什么使用jsxjsx特点jsx命令规范jsx表示对象如何在jsx中防止注入攻击&#xff…

Spring的三种装配机制(XML、JavaConfig、自动配置)

Spring中bean有三种装配机制 一、在xml中显示装配 1. 基本类型装配 Data NoArgsConstructor AllArgsConstructor public class Student{private String name;private Address address;private String[] books;private List<String> hobbys;private Map<String Stri…

Linux常见命令 14 - 软/硬连接命令 ln

目录 1. 软连接 ln -s 2. 硬连接 ln 目前Linux中比较常用的是软连接&#xff0c;硬连接不常用&#xff0c;掌握基本的软连接常识即可 1. 软连接 ln -s 语法&#xff1a;ln -s [源文件] [目标文件] liuSLR:/hd1/Dling/lane/Wmq/test$ ln -s hello.txt hello.txt.soft liuS…

28. 实战:基于selenium实现12306自动购票

目录 前言 目的 思路 代码实现 1. 进入登录界面&#xff0c;输入账号密码 2. 点击登录按钮&#xff0c;完成滑块验证 3. 在个人中心点击购票&#xff0c;跳转 4. 输入出发地、目的地&#xff0c;从控制台输入得到 5. 文本框输入出发日 6. 若是学生票则切换票型 7. 点…

离线增量文章画像计算

2.5 离线增量文章画像计算 学习目标 目标 了解增量更新代码过程应用 无 2.5.1 离线文章画像更新需求 文章画像&#xff0c;就是给每篇文章定义一些词。 关键词&#xff1a;TEXTRANK IDF共同的词 主题词&#xff1a;TEXTRANK ITFDF共同的词 更新文章时间&#xff1a; 1、…

10.1002.1:VectorDraw Web /VectorDraw Developer Crack

VectorDraw 网络库 VectorDraw Web Library 是一个矢量图形库&#xff0c;旨在不仅可以打开 CAD 绘图&#xff0c;还可以在任何支持 HTML 5 标准的平台&#xff08;例如 Windows、Android、IOS 和 Linux&#xff09;上显示通用矢量对象。它可以在支持使用 canvas 和 Javascript…

DW动手学数据分析Task3:数据重构)

目录1 数据的合并1.1合并方法一&#xff1a;用concat函数1.2 合并方法二&#xff1a;使用DataFrame自带的方法join方法和append1.3 合并方法三&#xff1a;使用Panads的merge方法和DataFrame的append方法2 换一种角度看数据3 数据聚合与运算3.1 groupby机制3.2 数据运算1 数据的…

论文浅尝 | 利用常识知识图增强零样本和少样本立场检测

笔记整理&#xff1a;张嘉芮&#xff0c;天津大学硕士链接&#xff1a;https://aclanthology.org/2021.findings-acl.278.pd动机传统的数据驱动方法不适用于零样本和少样本的场景。对于人类来说&#xff0c;常识知识是理解和推理的关键因素。在没有标注数据和用户立场的隐晦表达…

2022最新MySQL高频面试题汇总

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…

【C进阶】通讯录1.0(文末附原码)

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C语言进阶 ⭐代码仓库&#xff1a;C Advanced 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们…

数据结构进阶 unordered_set unordered_map的使用

作者&#xff1a;小萌新 专栏&#xff1a;数据结构进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍高阶数据结构 unorder_set unorder_map的使用 unorder_set unorder_mapunordered系列关联式容器unordered_set介绍unordere…

微信小程序流量主提升ecpm的一些方法

本篇文章主要讲解:微信小程序流量主提升ecpm的一些方法 日期:2023年1月19日 作者:任聪聪 一、对ecpm的疑问和科普 什么是ecpm ecpm就是千次广告曝光收入,是一个预估的价格,而不是额定的,他是随着曝光度,用户点击度,页面访问数来决定的。 ecpm为什么会低? 微信官方…

KaiwuDB 数据服务平台 1.0 产品详解

大家好&#xff0c;今天我分享的是 KaiwuDB 数据服务平台&#xff08;KDP&#xff09;&#xff0c;一款由我们独立自主研发&#xff0c;以 KaiwuDB 为核心的数据服务产品。KDP 产品建设目标是实现数据的云边端的一体化治理&#xff0c;提供一套完整的全生命周期服务。接下来我将…

2.5、线程概念和多线程模型

整体框架 1、什么是线程&#xff0c;为什么要引入线程&#xff1f; 还没有引入进程之前&#xff0c;各个程序只能串行执行 进程是程序的一次执行过程&#xff0c;但这些功能显然不可能是由一个程序顺序处理就能实现的 有的进程可能需要 “同时” 做很多事&#xff0c;而传统的…

伯俊ERP与金蝶云星空对接集成连通应收单新增

伯俊ERP与金蝶云星空对接集成表头表体组合查询连通应收单新增(应收单-标准应收单&#xff08;KD应收单销售退)数据源系统:伯俊ERP未来&#xff0c;伯俊科技也会砥砺前行&#xff0c;不断为品牌提供更全面的零售终端致胜利器。伯俊科技始终坚持创新发展&#xff0c;探索大零售行…

【IDEA】自动部署SpringBoot Jar包到远程服务器并通过脚本启动jar

【IDEA】自动部署SpringBoot Jar包到远程服务器并通过脚本启动jar 文章目录 前言一.Deployment使用二.ssh使用三.启动脚本 前言 IDEA版本: 2019.3 一.Deployment使用 IDRA原生的Deployment不需要离开idea就可以直接将项目部署到远程运行&#xff0c;同时拥有远程视图窗口…

高并发系统设计 --计数服务抽离

传统计数 模糊计数 Cache DB。写Cache&#xff0c;批量刷新DB。 有一个写请求&#xff0c;我们就写cache&#xff0c;写一个在cache中1&#xff0c;buffer记一个&#xff0c;差不多&#xff08;buffer满了&#xff0c;时间到了&#xff09;写一次DB&#xff0c;丢数据也就丢…

JVM快速入门学习笔记(二)

临近过年&#xff0c;事太多&#xff0c;学习效率也好低&#xff0c;最近已经好久没搞学习了&#xff0c;发篇简单的学习笔记意思下吧 5. 沙箱安全机制 Java安全模型的核心就是Java沙箱&#xff08;sandbox&#xff09;&#xff0c;什么是沙箱&#xff1f;沙箱是一个限制程序运…