局部变量调用实例

本文记录鄙人在开发中遇到的一个实例,以此说明使用局部变量和全局变量的区别

局部变量和全局变量在编程中扮演着不同的角色,它们之间在定义、作用域、内存存储方式、生命期以及使用方式等方面存在显著的区别。

局部变量与全局变量的区别

  1. 定义与作用域
    • 局部变量:在函数或复合语句内部定义的变量,其作用域被限制在定义它的函数或复合语句内部。这意味着局部变量只能在其所在的函数或复合语句中被访问和修改。
    • 全局变量:在函数外部定义的变量,其作用域从定义点开始,一直延伸到整个源文件的末尾。全局变量可以被源文件中的任何函数或复合语句访问和修改。
  2. 内存存储方式
    • 局部变量:通常存储在栈(Stack)内存中。栈是一种后进先出(LIFO)的数据结构,用于存储程序运行时函数调用的上下文信息,包括局部变量、函数参数等。当函数被调用时,会为其局部变量分配栈空间;当函数返回时,这些空间会被自动释放。
    • 全局变量:存储在全局数据区(或静态数据区)中。这个区域在程序启动时被分配,并在程序结束时被释放。全局变量的生命周期贯穿整个程序运行期间。
  3. 生命期
    • 局部变量:随函数的调用而创建,随函数的返回而销毁。一旦函数执行完毕,其内部定义的局部变量就会被释放,不再可用。
    • 全局变量:从程序开始执行到程序结束一直存在。全局变量的生命周期与程序本身相同。
  4. 使用方式
    • 局部变量:只能在定义它的函数或复合语句内部使用。由于其作用域的限制,局部变量不会与其他函数中的同名变量产生冲突。
    • 全局变量:可以在程序的任何地方被访问和修改,这使得全局变量在跨函数数据共享方面非常有用。但是,过度使用全局变量会导致程序的可读性和可维护性降低,因此应谨慎使用。

实例:

private static final long CLICK_INTERVAL = 3000;   //3秒
private long startClickTime = -1L;  //第一次点击时间
private int clickCount = 0;  //点击次数计数器

//3秒内点击5次,执行***
private void handleClicks() {

    long currentTime = System.currentTimeMillis();// 获取当前时间
    
    if (startClickTime == -1L || currentTime - startClickTime > CLICK_INTERVAL) {
        //重新开始计时
        startClickTime = currentTime;
        clickCount = 1;
    } else {
        clickCount++;
    }

    if (clickCount==5 ) {
       // 其他逻辑
        clickCount = 0;
        startClickTime = -1L;
    }
}

问题:

long currentTime 可以写在handleClicks()方法外面吗? 方法里只写currentTime = System.currentTimeMillis()

答:

long currentTime = System.currentTimeMillis(); 写在 handleClicks() 方法外面是可以的,但要注意这样做的影响:

  1. 方法外部: 如果你把 currentTime 声明在 handleClicks() 方法外面(例如在类的成员变量中),它会变成类的成员变量。每次调用 handleClicks() 方法时,这个变量的值不会被重新赋值为当前时间,导致你可能无法获得正确的时间戳。
  2. 方法内部: currentTime 作为局部变量在 handleClicks() 方法内部声明和赋值是更安全的做法。这样每次调用 handleClicks() 时,currentTime 都会获得最新的系统时间,确保时间比较的准确性。

总结

建议: 将 currentTime 声明为局部变量在 handleClicks() 方法内部。这样可以确保每次调用方法时获得最新的时间戳,避免可能的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值