`
TonyLian
  • 浏览: 401538 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【第29条】将局部变量的作用域最小化

阅读更多

《第7章 通用程序设计》

 

本章主要讨论Java语言的语法细节。和上一章类似,很多条目都同样适用于其他面向对象的开发语言,尤其是类C语言们。

 

 

【第29条】将局部变量的作用域最小化

 

    将局部变量的作用域最小化,可以增加代码的可读性和可维护性,并降低出错的可能性。C语言要求局部变量必须声明在代码块的开始处,出于习惯很多人依然这样做。但是现在应该打破这一习惯了。为了使局部变量的作用域最小化,最好的办法就是在第一次使用的时候再声明之。换句话说,就是在你还没有足够的信息初始化一个变量时,应该推迟它的声明。也就是说几乎每一个局部变量的声明都应该包含一个初始化表达式(有些try-catch的情况下除外)。

 

for (Iterator i = c.iterator(); i.hasNext();){
    doSomething(i.next());
}

 

几乎总是比

Iterator i = c.iterator();
while (i.hasNext()){
    doSomething(i.next());
}

 

安全。因为后者的 变量i 的生命周期被拉长了,在之后的代码中就有可能发生二义性Bug或“复制 — 粘贴”Bug。

 

int i = 0;
for (i=0; i<a.length; i++){
    ....
    if (......) {
        break;
    }
}
int max = i;

 

这样的代码尽量避免,为了最后一行,必须把 变量i 的定义提前到 for 语句之前,这样扩大了 变量i 的作用域。

 

 

    接下来不得不提一下AS3语言,在AS3语言中局部变量可以被声明在方法的任意地方,然而它的作用域确是整个方法!也就是说,你甚至可以先使用一个局部变量,然后再声明它!AS3为什么要这样,目前我也不清楚。哪位如果知道,请回复我,谢谢!

 

 

 

【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208

 

 

分享到:
评论

相关推荐

    Visual Basic 2010入门经典.part1.rar

    11.5.2 理解过程级(局部)作用域 194 11.5.3 理解模块级作用域 194 11.5.4 使用全局(命名空间级)作用域 195 11.5.5 名称冲突 196 11.6 声明静态变量 196 11.7 命名规范 197 11.7.1 使用前缀表示数据类型 ...

    Visual Basic 2010入门经典.part2.rar

    11.5.2 理解过程级(局部)作用域 194 11.5.3 理解模块级作用域 194 11.5.4 使用全局(命名空间级)作用域 195 11.5.5 名称冲突 196 11.6 声明静态变量 196 11.7 命名规范 197 11.7.1 使用前缀表示数据类型 ...

    语言程序设计课后习题答案

    局部变量,一般来讲就是具有块作用域的变量;全局变量,就是具有文件作用域的变量。 2-16 已知x、y两个变量,写一条简单的if语句,把较小的的值赋给原本值较大的变量。 解: if (x &gt; y) x = y; else // y &gt; x || y...

    面试题总结.docx

    ### 二十九、let、var和const的区别 let和const是ES6引入的新关键字,它们与传统的var关键字相比具有不同的作用域规则和变量提升行为。let声明的变量具有块级作用域,而var具有函数级作用域;const用于声明常量,...

    2021-2022计算机二级等级考试试题及答案No.137.docx

    - 局部内部类可以访问其所在的作用域内的局部变量,包括final修饰的变量。 18. SQL语言分类: - SQL分为DDL(数据定义语言)、DML(数据操作语言)、DCL(数据控制语言),不包括DLL(数据链接语言)。 19. 表格...

    c语言随身记

    #### 第二章:Scanf输入 - **知识点1:标准输入** - 使用`&lt;stdio.h&gt;`头文件中的`scanf`函数进行输入。 - `scanf`函数需要提供格式化字符串以及指向输入变量的地址。 - 示例:`scanf("%d", &n);` 输入一个整数到...

    计算机软件基础(一)高等教育自学考试试题与答案.doc

    38. **局部变量作用域**:局部变量只在其所在函数内有效。 39. **访问方式**:直接存取和间接存取是访问地址的两种方式。 40. **指针运算**:q指向数组元素x[3]。 41. **空间复杂度**:o(1)表示空间复杂度与问题规模...

    javascript入门笔记

    特点:将 a 和 b 先转换为二进制,按位操作,对应位置上的两个数字,相同时,该位整体结果为0,不同时,该位的整体结果为 1 使用场合:快速交换两个数字 5 ^ 3 101 011 ========== 110 结果为 6 练习: ...

    精品资料(2021-2022年收藏)计算机软件基础一高等教育自学考试试卷与答案.doc

    38. **局部变量作用域**:局部变量仅在其所在函数内部有效。 39. **访问方式**:C语言中,变量的访问方式包括直接存取和间接存取(通过指针)。 40. **指针运算**:通过指针变量的运算,可以访问数组元素,如q=p+3...

    传智播客Java SE基础毕向东老师全程笔记

    - **作用域:** 变量的作用域取决于其声明的位置。 **常量:** - **不可变性:** 常量一旦初始化后,其值就不能被改变。 - **声明方式:** 使用`final`关键字声明常量。 #### 第二章:数组 - **数组的概念:** ...

    Java入门学习笔记

    - **变量(Variable):** 变量用来存储数据值,根据其作用域可分为局部变量和成员变量。 #### 三、定义、关键字和类型 **3.1 注释的三种形式** - **单行注释:** `//` - **多行注释:** `/* ... */` - **文档注释...

    Google C++编程规范.pdf

    1. **局部变量**:尽可能将变量的作用域限制在最小范围内,这有助于减少错误并提高代码的可读性。 2. **全局变量**:避免使用全局变量,因为它们可能导致代码难以理解和维护。如果确实需要使用全局变量,请确保其...

    python面试题

    闭包是在另一个函数内部定义的函数,并且它可以记住并访问其外部函数的局部变量。闭包使得函数能够访问其定义环境中的变量,即使外部函数已经返回。 #### 19. lambda函数 lambda函数是一种匿名函数,通常用于编写...

    2021-2022计算机二级等级考试试题及答案No.12980.docx

    - 局部变量与全局变量的作用域区别。 - 函数参数传递的方式。 #### 知识点八:Visual Basic基础知识 **题目描述:** &gt; 下面关于VB的叙述中,不正确的是? &gt; &gt; A. 用VB编写的程序可以在任何操作系统环境中运行。 &gt; ...

    SQLServer2008查询性能优化 2/2

    11.6.5 避免在批查询中的局部变量 306 11.6.6 小心地命名存储过程 309 11.7 减少网络传输数量 311 11.7.1 同时执行多个查询 311 11.7.2 使用SET NOCOUNT 311 11.8 降低事务开销 312 11.8.1 减少日志开销 312 ...

    SQLServer2008查询性能优化 1/2

    11.6.5 避免在批查询中的局部变量 306 11.6.6 小心地命名存储过程 309 11.7 减少网络传输数量 311 11.7.1 同时执行多个查询 311 11.7.2 使用SET NOCOUNT 311 11.8 降低事务开销 312 11.8.1 减少日志开销 312 ...

    JAVA核心技术

    #### 第二部分:基础知识 ##### 2.1 配置环境 - **安装JDK**:Java Development Kit,包括编译工具、调试工具以及文档生成工具等。 - **设置环境变量**:PATH变量和CLASSPATH变量的配置,便于在命令行下运行JAVA...

Global site tag (gtag.js) - Google Analytics