如何正确的使用语句块

 更新时间:2013年05月23日 10:10:44   作者:  
本篇文章是对正确使用语句块进行了详细的分析介绍,需要的朋友参考下
犹记得在初看C,C++和Java的编程书籍时,上面就有介绍语句块,但当时甚是不理解什么是语句块。《代码大全》中也有讲说要把相似功能的语句组织到一起形成语句块,然后与其他语句块用空行分隔。但这只是在人的理解上的语句块,并非是真的程序语言意义上的语句块。
程序上的定义,在我的理解来看应该是有着相同的变量作用域的相关一组语句的集合,看起来就是应该用{}括起来的,比如控制结构中的逻辑。我认为最关键的一点就是变量作用域,也就是说,如果能用同一个局部变量,那么就是程序意义上的语句块。来看个例子:
复制代码 代码如下:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case MENU_GOTO_FILEANT:
            Intent i = new Intent();
            i.setClass(this, FileAntActivity.class);
            startActivity(i);
            break;
        case MENU_TEST_LINEARLAYOUT:
            i.setClass(this, LinearLayoutTest.class);
            startActivity(i);
            break;
        default:
            break;
        }
        return true;
    }

对于第二个case语句,仍可以使用前面case所定义的变量,所以整个switch() {}内都是一个语句块。
但如果给每个case语句加上语句块标志,就不一样了:
复制代码 代码如下:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case MENU_GOTO_FILEANT: {
            Intent i = new Intent();
            i.setClass(this, FileAntActivity.class);
            startActivity(i);
            break;
        }
        case MENU_TEST_LINEARLAYOUT: {
            Intent i = new Intent();
            i.setClass(this, LinearLayoutTest.class);
            startActivity(i);
            break;
        }
        default:
            break;
        }
        return true;
    }

加上了{}就把二个case语句分隔了开来,形成了二个语句块,它们有各自的变量作用域,互不影响,即使用名字相同,或再次定义也无妨。
说明这些的目的就在于,要尽可能多的使用{}以形成真正的语句块,最大的好处在于它能形成变量作用域,避免变量的作用域过大,即提高了可读性,也减少了出错的可能。

相关文章

  • C语言连续子向量的最大和及时间度量实例

    C语言连续子向量的最大和及时间度量实例

    这篇文章主要介绍了C语言连续子向量的最大和及时间度量,需要的朋友可以参考下
    2014-09-09
  • OpenCV实现图像的直线检测

    OpenCV实现图像的直线检测

    这篇文章主要为大家详细介绍了OpenCV实现图像直线检测的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Qt无边框窗口拖拽和阴影的实现方法

    Qt无边框窗口拖拽和阴影的实现方法

    这篇文章主要给大家介绍了关于Qt无边框窗口拖拽和阴影的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 谈谈C++中的单例

    谈谈C++中的单例

    这篇文章主要介绍了C++中单例的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
    2020-09-09
  • 详解C++11 变参模板

    详解C++11 变参模板

    这篇文章主要介绍了C++11 变参模板的相关资料,帮助大家更好的理解和学习c++11,感兴趣的朋友可以了解下
    2020-08-08
  • Opencv实现用于图像分割分水岭算法

    Opencv实现用于图像分割分水岭算法

    这篇文章主要为大家详细介绍了Opencv实现用于图像分割分水岭算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 如何在C++中实现按位存取

    如何在C++中实现按位存取

    实现紧凑存取,不是按一个字节一个字节地存取,而是按位存取,本文就是介绍了如何在C++中实现按位存取,需要的朋友可以参考下
    2015-07-07
  • 使用udp发送>=128K的消息会报ENOBUFS的错误的解决方法

    使用udp发送>=128K的消息会报ENOBUFS的错误的解决方法

    在项目中选择了unix域的数据报套接口。在使用过程中碰到了如下,问题:发送<128K的消息时,客户、进程可以正常收发消息;发送>=128K的消息时,发送端(sendto)返回ENOBUFS的错误。下面小编来详细说下
    2019-05-05
  • 浅谈C++11的std::function源码解析

    浅谈C++11的std::function源码解析

    类模版std::function是一种通用的多态函数包装器std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,本文详细的介绍一下,感兴趣的可以了解一下
    2021-06-06
  • C++中名称空间namespace的使用方法示例

    C++中名称空间namespace的使用方法示例

    namespace中文意思是命名空间或者叫名字空间,下面这篇文章主要给大家介绍了关于C++中名称空间namespace使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧。
    2017-12-12

最新评论