【JAVA】变量的作用域与生存周期

news2024/11/20 20:18:43

在这里插入图片描述


个人主页:【😊个人主页】
系列专栏:【❤️初识JAVA】


文章目录

  • 前言
  • 变量的作用域
  • 变量的生命周期
  • 局部变量
  • 全局变量


前言

变量,我们学习过程中逃不掉的知识,无论在哪种语言中我们都需要学会去合理的运用它,今天我们就来详细的讲讲变量的运用.
在这里插入图片描述

变量的作用域

通常来说,一段程序代码中所用到的名字并不总是有效可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用,**可提高程序逻辑的局部性,增强程序的可靠性,减少名字冲突。**从作用域角度区分,变量可分为全局变量局部变量。在Java中作用域指的是变量在程序中有效的范围,即变量能够访问的代码区域

分为以下四种情况:

  • 类级别的变量:在类中定义的变量,可以在整个类中访问。
  • 方法级别的变量:在方法中定义的变量,只能在该方法中使用。
  • 块级别的变量:在代码块内定义的变量,只在该代码块及其子块中有效。
  • 循环变量:在循环结构中定义的变量,在循环体中有效,出了循环体变量失效。

public class ScopeExample {

   public static void main(String args[]) {
      int a = 10; // 类级别变量
      int b = 20; // 类级别变量
      {
         int c = 30; // 块级别变量
         System.out.println("a = " + a + ", b = " + b + ", c = " + c);
      }
      for(int i=0; i<5; i++) {
         int d = i; // 循环变量
         System.out.println("d = " + d);
      }
      
      System.out.println("a = " + a + ", b = " + b);
   }
}
//变量a和b是类级别变量,可以在整个类中访问。变量c是块级别变量,
//只在代码块内有效。变量d是循环变量,只在循环结构中有效。在输出语句中,
//使用了不同作用域的变量。

变量的生命周期

变量的生命周期指的是变量从创建到销毁的整个过程。在程序执行时,变量需要先创建,然后被使用,最后被销毁。
通常来说变量的生命周期可以分为以下几个阶段:

  1. 定义变量:变量需要先定义才能使用。定义变量时,计算机会给变量分配内存空间。
  2. 初始化变量:定义变量时也可以对变量进行初始化。这意味着为变量赋予一个初始值。如果不进行初始化,变量的值就是未知的。
  3. 变量使用:变量在程序中被使用,可以被修改或者读取。变量使用的时间取决于程序的需求。
  4. 变量销毁当变量不再需要时,它会被销毁。这意味着释放变量占用的内存,以便其他变量或程序使用。变量在程序中的作用域结束后会被销毁。例如,当变量在函数内部声明时,当函数退出时,变量就会被销毁。

在编写程序时需要注意变量的生命周期,避免出现内存泄漏等问题。

局部变量

局部变量是在方法、代码块或构造函数内声明的变量。这些变量只能在声明它们的代码块内部使用,因此不会影响整个Java程序中的其他部分。

在方法内部声明的局部变量只能在该方法内部使用,一旦该方法执行结束,其生命周期也就结束了,其值也将被销毁。局部变量的作用域在其声明的代码块内部,只有在该作用域内才能访问。

当需要使用某个变量时,应该尽可能地将其作为局部变量来声明。这样可以减少程序中不必要的变量,提高程序的性能和可读性。

public class LocalVariablesExample {

    public static void main(String[] args) {
        int a = 10; // 声明并初始化一个整数类型的局部变量a
        double b = 3.14; // 声明并初始化一个双精度类型的局部变量b
        System.out.println("a = " + a);
        System.out.println("b = " + b);
        a = 20;  // 修改a的值
        System.out.println("a = " + a);
        double result = a * b; // 使用a和b计算一个结果
        System.out.println("a * b = " + result);      
        String c;// 声明另一个局部变量c,未初始化
        // 编译错误!局部变量c未初始化
        // System.out.println("c = " + c);
    }

}

a和b是在main方法中声明的局部变量。a被初始化为10,b被初始化为3.14。在程序中,我们可以修改a的值,并使用a和b来计算一个结果。请注意,我们可以在方法中声明多个局部变量。例如,在此示例中,我们声明了一个未初始化的字符串变量c,但由于它未初始化,尝试使用它会导致编译错误。

全局变量

全局变量指的是在类中定义的变量,即类变量或静态变量。这些变量可以在整个类中的任何方法中使用,不需要使用实例化对象或者传递参数。类变量在程序开始运行时被初始化,一直存在于内存中,直到程序结束。
全局变量是在类中定义的,而不是在方法中定义的。如果在方法中定义一个变量,则该变量只能在该方法中使用,而不是在整个类中使用。

public class MyClass {
    static int x = 5; // 声明一个静态变量 x
    public static void main(String[] args) {
        System.out.println(x); // 输出 5
    }
}

变量 x 是一个静态变量,它可以在整个 MyClass 类中的任何方法中使用。当程序开始运行时,变量 x 被初始化为 5,并且可以在 main 方法中访问和输出。

在这里插入图片描述

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

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

相关文章

电测知识分享——错过就要被淘汰掉?这个电子测试超重要项目你了解多少?

一、为什么准确性这么重要&#xff1f; 任何测试都会有误差的存在。假设我们现在有个项目&#xff1a;设计一个LNA&#xff0c;其噪声系数NF2dB.测试误差为0.5dB。这就意味着设计人员需将NF指标控制在1.5dB甚至更低&#xff0c;NF超1.5dB的产品在测试过程中就要被淘汰掉。如果…

ES6自用笔记

原型链 引用类型&#xff1a;__proto__(隐式原型)属性&#xff0c;属性值是对象函数&#xff1a;prototype(原型)属性&#xff0c;属性值是对象 ​​​​​​​ 相关方法 person.prototype.isPrototypeOf(stu) Object.getPrototypeOf(Object)替换已不推荐的Object._ _ pro…

【项目设计】负载均衡式在线OJ

&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《项目设计》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录 &#x1f449;项目地址&am…

自研的EtherCAT总线一拖四开环步进驱动器低成本方案

自研的EtherCAT总线一拖四开环步进驱动器&#xff0c;可以连接TwinCAT 欧姆龙 汇川PLC Codesys SOEM主站&#xff0c;IGH主站。 电机单轴驱动电流最大4A&#xff0c;可以带42/57/86电机。带12路数字输入&#xff0c;8路数字输出。 EtherCAT总线DC同步周期125us&#xff0c;支持…

“深入剖析Java多态:点燃编程世界火花“

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:“继承与组合&#xff1a;代码复用的两种策略“&#x1f649; &#x1f439;今日诗词:马踏祁连山河动,兵起玄黄奈何天&#x1f439; 快去学习 &#x1f338;思维导…

8月14日上课内容 LVS负载均衡的群集

知识点&#xff1a; 本章结构: 企业群集概述 集群的含义&#xff1a; 1、群集的含义 ①、Cluster、集群、群集 ②、由多台主机构成&#xff0c;但对外只表现为一个整体&#xff0c;只提供一个访问入口&#xff08;域名与IP地址&#xff09;&#xff0c;相当于一台大型计算机。…

重要日期提醒软件是哪个?帮你记住重要日程的提醒软件

生活、工作、学习中有众多重要的日期&#xff0c;如生日、纪念日、会议、截止日期等&#xff0c;它们承载着我们珍贵的回忆和重要的任务&#xff0c;因此绝对不能忘记。然而在信息爆炸的时代&#xff0c;我们的生活和工作节奏都是非常快的&#xff0c;时常会忘记这些重要的日程…

关于git执行提交报错问题

1.在执行git中 执行git init 执行 git add . 执行git commit -m “first commit” 时会出现 git config --global user.email "youexample.com" git config --global user.name "username" 这个问题是由于在git中没有设置默认的user跟emali导致需要手…

Cesium加载Supermap的wmts服务

最近使用cesium 加载supermap的wmts 服务&#xff0c;多次遇到加载异常与白页面问题&#xff0c;纠结好久最后才搞定[特此记录] 1、首先找到方法加载wmts 的api 文档 官方提示使用WebMapTileServiceImageryProvider加载wmts 2、然后编辑加载代码 //1.新建ImageryProviderlet…

产品经理为什么是程序员转行的首选?答案在这里!

经常看到有程序员小哥工作几年因为压力大想转行&#xff0c;这种情况确实是存在的。整日泡在无穷无尽的代码中&#xff0c;确实是一件很枯燥的事情。这可能不仅仅是工作量方面的压力&#xff0c;更多的是做到一定程度后&#xff0c;对这个工作不够感兴趣&#xff0c;需要找到更…

WMS:SurfaceView绘制显示

WMS:SurfaceView绘制显示 1、SurfaceView控件使用1.1 Choreographer接受VSync信号1.2 自定义SurfaceView1.3 结果 2、SurfaceView获取画布并显示2.1 SurfaceHolder.lockCanvas()2.2 SurfaceHolder.unlockCanvasAndPost(Canvas canvas) 1、SurfaceView控件使用 1.1 Choreograph…

如何做好出入库管理工作,好用的出入库管理系统有哪些?

出入库管理通常会涉及到多个供应商和分销渠道&#xff0c;人为错误、货品损坏或盗窃等问题可能导致库存数量与实际不符&#xff0c;需要花费大量时间和人力资源。 借助出入库管理系统&#xff0c;能够自动记录出入库活动、生成报告&#xff0c;并实时跟踪库存情况&#xff0c;建…

小程序开发中事件绑定的执行方法

事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为&#xff0c;反馈到逻辑层进行业务的处理。小程序中常用属性和绑定方式如下&#xff1a; 当事件回调触发的时候&#xff0c;会收到一个事件对象 event&#xff0c;它的详细属性如下表所示&#xff1a; …

「快学Docker」探索Docker的优势和多样化用途

「快学Docker」探索Docker的优势和多样化用途 Docker的优势Docker的多样化用途总结 Docker的优势 环境一致性&#xff1a;传统软件开发和部署中&#xff0c;环境配置常常是一个棘手的问题&#xff0c;不同环境之间可能存在差异&#xff0c;导致问题难以定位和解决。Docker通过…

机器学习深度学习——注意力分数(详细数学推导+代码实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——机器翻译&#xff08;序列生成策略&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&&…

【实战】十一、看板页面及任务组页面开发(一) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十三)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

docker安装redis7-主从模式

说明 系统版本&#xff1a;CentOS7.9 redis版本&#xff1a;7.0.5镜像 此模式为1主2从,主节点端口为6379&#xff0c;从节点端口为6380、6381以下所有的示例以redis7.0.5为例 下载镜像 docker pull redis:7.0.5 创建挂载路径 所有节点的数据、配置文件以及日志都挂载到宿…

隧道人员定位方案

针对隧道环境的人员定位方案&#xff0c;UWB定位技术同样可以提供高精度和可靠的定位服务。以下是一个可行的方案&#xff1a; 部署基站网络&#xff1a;在隧道内建立一个基站网络&#xff0c;基站需要均匀分布在各个关键位置&#xff0c;以确保全方位的覆盖。由于隧道的特殊环…

CMake:检测外部库---使用pkg-config

CMake:检测外部库---使用pkg-config 导言ZMQ安装项目结构CMakeLists.txt相关源码 导言 前面几篇内容的学习&#xff0c;我们基本上了解了如何链接一个三方库的方法。本篇以及下一篇将补充两个检测外部库的方法。 目前为止&#xff0c;我们已经学习了两种检测外部依赖关系的方…

文件的导入与导出

文章目录 一、需求二、分析1. Excel 表格数据导出2. Excel 表格数据导入一、需求 在我们日常开发中,会有文件的导入导出的需求,如何在 vue 项目中写导入导出功能呢 二、分析 以 Excel 表格数据导出为例 1. Excel 表格数据导出 调用接口将返回的数据进行 Blob 转换,附: 接…