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

news/2024/7/24 10:21:49 标签: java, python, 开发语言

在这里插入图片描述


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


文章目录

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


前言

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

变量的作用域

通常来说,一段程序代码中所用到的名字并不总是有效可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用,**可提高程序逻辑的局部性,增强程序的可靠性,减少名字冲突。**从作用域角度区分,变量可分为全局变量局部变量。在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程序中的其他部分。

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

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

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,但由于它未初始化,尝试使用它会导致编译错误。

全局变量

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

java">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.niftyadmin.cn/n/4943233.html

相关文章

耗费半年研究了市面上的10款大屏工具,这个宝藏终于被我发现了!

可视化大屏最近可真的是越来越火了&#xff0c;就拿我自己身边的情况来说&#xff0c;老李部门马上要开月度复盘会了&#xff0c;突然发现&#xff0c;现在做汇报PPT已经不能满足这些领导间的“攀比之心”了&#xff0c;老李的领导直接下达命令说月度总结要用大屏展示出来&…

File Inclusion

File Inclusion 服务器执行PHP文件时&#xff0c;可以通过文件包含函数加载另一个文件中的PHP代码&#xff0c;并且当PHP来执行&#xff0c;这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时&#xff0c;您只更新一个包含…

Wireshark有线网卡抓包报错The capture session could not be initiated on capture device

最近在使用Wireshark进行抓包排错时&#xff0c;选择网卡后提示报错&#xff0c;在此之前从未出现过&#xff0c;报错内容如下&#xff1a; 提示内容是The capture session could not be initiated on capture device&#xff0c;无法在捕获设备上启动捕获会话要求操作是Please…

grafana-zabbix基础操作篇------导入数据源

文章目录 一、grafana的安装1.1、下载地址1.2、下载后导入所安装机器1.3、yum安装解决依赖1.4、启动grafana1.5、查看端口是否启用&#xff08;端口默认3000&#xff09;1.6、浏览器访问 二、添加zabbix数据源2.1、导入数据源 **下一篇 我们讲讲构建仪表板的操作** 今天&#x…

LVS-DR集群(一台LVS,一台CIP,两台web,一台NFS)的构建以及LVS-DR模式工作原理和特点

一.LVS-DR工作模式原理和特点 1.工作模式 2.模式特点 二.构建环境 1.五台关闭防火墙&#xff0c;关闭selinux&#xff0c;拥有固定IP&#xff0c;部署有http服务的虚拟机&#xff0c;LVS设备下载ipvsadm工具&#xff0c;NFS 设备需要下载rpcbind和nfs-utils 2.实现功能 3…

网络通信原理数据链路层数制转换(第四十一课)

数制概述 数制是表示和计算数值的一种方式,不同的数制使用不同的数字和规则来表示数值。最常见的数制是十进制(也称为阿拉伯数字),使用0-9个数字来表示数值。其他常见的数制包括二进制**(使用0和1表示数值)、八进制(使用0-7表示数值)和十六进制(使用0-9和A-F表示数值…

[PyTorch][chapter 52][迁移学习]

前言&#xff1a; 迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习方法&#xff0c;它通过将一个领域中的知识和经验迁移到另一个相关领域中&#xff0c;来加速和改进新领域的学习和解决问题的能力。 这里面主要结合前面ResNet18 例子&#xff0c;详细讲解一…