• 端午新经济体验无处不在 “指尖端午”玩出新花样 2019-08-18
  • 王俊凯:如何当一名实力睫毛健将 2019-08-18
  • 国家中医药管理局加强对中医养生类节目指导 2019-08-18
  • 北京一官员借单位换楼贪污受贿31万 退赃获轻判 2019-08-17
  • 【人事】中共临汾市委组织部公示3名拟任职干部 2019-08-17
  • 江苏阜宁县地震 地震时正确的逃生方法有哪些? 2019-08-17
  • [大笑]别一边骂着高房价,一边又跟着炒,那就是典型的既想……又想……了! 2019-08-17
  • 回复@“老笑头”,为什么老夫不能提“逻辑”?不是小看你,你有本人1%的逻辑思维能力就可以沾沾自喜了,就不会象那个“真理论者”似的在论坛上天天挨批了。哈哈哈哈! 2019-08-12
  • 本人几天前就吃了几个粽子了。 2019-08-09
  • 湖南第六批短期援藏队联合中南大学湘雅医院在山南市开展“爱眼护眼”活动 2019-08-07
  • 西部网(陕西新闻网)硬科技频道 2019-08-07
  • 主持人资料库――张越 2019-08-06
  • 四年前折翼日耳曼高峰 梅西如今能扛潘帕斯雄鹰飞多远 2019-08-06
  • 卖假证当黄牛 日韩3男子倒卖AKB48演唱会门票被捕 2019-08-06
  • 俄罗斯驻华大使:未来上合的首要任务是加强区域一体化 2019-08-06
  • 全国免费热线:
    Java语言与C++语言在作用域上的差异
    作者:中国IT实验室 点击:12106次 日期:2012-01-01
    字号::T | T
    欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

      Java语言与C++语言是目前最流行的编程语言。两者的编程思想虽然有一定的共同性,但是在很多方面仍然存在着比较大的差异。如两者在作用域上仍然存在着很大的差异。下面笔者就分析一下这两门语言在作用域上的差异,以帮助大家进一步认识Java语言的优势。

      差异一:变量作用域的不同。

      如下图,这段程序代码是符合C++语言的语法要求的。其可以在C语言下正常运行。但是其在Java语言平台下编译的时候,就会被告知有错误。其格式、关键字上面都没有错误。那么错误到底是这么呢?这就关系到变量的作用域。

          {

           float y=3.15

           {

            float y=3.15

          }

          }

      作用域就决定了其定义的变量名的可见性与生命周期。在C++语言(包括其衍生出来的其他语言)与Java语言中,都是用一定花括号来代表一个作用域的。如上面的代码,就表示有两个作用域。外面一对花括号代表一级作用域;里面一对花括号代表二级作用域,依次类推。通常情况下,一级作用域中定义的变量,对其下级作用率都是有效的。也就是说,其下级作用域可以直接引用上级作用域中定义的变量。但是在二级作用域中,可以更改一级作用率中设置的变量值,不过这个更改只在二级作用域内部有效。如上面这个代码,在二级作用域中可以再定义一个y变量,重新赋值。注意,其实在二级作用域中定义的变量与一级作用域中定义的变量,虽然名字相同,但是他们不是同一个变量。如果此时在一级作用域外,有其他代码引用这个y变量的话,则其的值仍然是3.14,而不会是3.15。也就是说,在二级作用域中定义的变量,只在其内部有效。对于上级作用域是没有丝毫影响的。也就是说,在作用域中定义的变量只在其作用域内有效。出了其作用域外,其内部设置的变量就全部无效了。

      这个作用域的设置其实Java语言与C++语言是类似的。但是在细节上Java语言又多了一条限制。如上表的代码所示,虽然在上面的代码中变量y在两个不同的作用域中定义,照理来说是两者是互不干涉,可以共存。但是在Java编译器中,是不允许有这种情况存在的。把上面这个代码在Java编译器中编译的话,编译器会通知程序开发人员,说这个变量y已经定义过。然后编译会以错误告终。虽然在C++语言中在不同级别的作用域中定义名字相同的变量是允许的,而在Java语言中则不行,这并不代表在变量的作用域上有所不同。其实从本质上来说,两者变量的作用域是相同的。只是对于Java语言来说,其又多加了一条限制。在Java语言中,即使作用域不同,其定义的变量名字也不能够相同。这主要是为了提高Java代码的可读性,防止混淆才定义了这条规则。

      差异二:对象作用域的差异。

      Java语言与C++语言一样,都是面向对象的语言。不过两者在实现机制上有很大的不同。就拿对象的作用域来说,就有很大的差异。这也导致了两个面向对象的语言在实现细节上的巨大差异。

      首先Java程序员需要明白的是,Java对象作用域与变量的作用域是不同的。如上面的分析,变量的作用域只在作用域内部有效。如在二级作用域内定义的变量,超出了二级作用域,那么就无效了。但是对象则不同,其可以存在于作用域之外。如现在在某个作用域内定义了一个name_full对象。当脱离这个作用域的时候,这个对象的引用是消失了。但是刚才创建的这个对象仍然实实在在的保存在内存中。在Java程序的运行过程中,只要通过传递或者复制对象引用的手段,那么在其他作用域内仍然可以访问这个对象。也就是说,只要我们有这个需要,那么在某个作用域内创建的对象其会一直存在并可以在作用域外的其他任何一个地方进行访问。当然前提是要通过复制或者传递等手段把对象引用传递到其他的作用域中。这就是Java对象与Java变量在作用域上最大的不同。

    [1] [2] 下一页

    发表评论

    昵称 * 验证码 * 验证码
    上一篇: >EJB3的一些心得
    下一篇: >和我共同了解Java是什么

    资质证书

    CMMI Ⅲ APPRAISAL ID:30062
    ISO9001:08915Q20090ROS
    ISO27001:04817I20037R0S
    高新技术企业:GR201753000141
    网站问题免费诊断

    电子商务三位一体发展战略

    技术研发

    业务培训

    实战运营

    战略布局

  • 端午新经济体验无处不在 “指尖端午”玩出新花样 2019-08-18
  • 王俊凯:如何当一名实力睫毛健将 2019-08-18
  • 国家中医药管理局加强对中医养生类节目指导 2019-08-18
  • 北京一官员借单位换楼贪污受贿31万 退赃获轻判 2019-08-17
  • 【人事】中共临汾市委组织部公示3名拟任职干部 2019-08-17
  • 江苏阜宁县地震 地震时正确的逃生方法有哪些? 2019-08-17
  • [大笑]别一边骂着高房价,一边又跟着炒,那就是典型的既想……又想……了! 2019-08-17
  • 回复@“老笑头”,为什么老夫不能提“逻辑”?不是小看你,你有本人1%的逻辑思维能力就可以沾沾自喜了,就不会象那个“真理论者”似的在论坛上天天挨批了。哈哈哈哈! 2019-08-12
  • 本人几天前就吃了几个粽子了。 2019-08-09
  • 湖南第六批短期援藏队联合中南大学湘雅医院在山南市开展“爱眼护眼”活动 2019-08-07
  • 西部网(陕西新闻网)硬科技频道 2019-08-07
  • 主持人资料库――张越 2019-08-06
  • 四年前折翼日耳曼高峰 梅西如今能扛潘帕斯雄鹰飞多远 2019-08-06
  • 卖假证当黄牛 日韩3男子倒卖AKB48演唱会门票被捕 2019-08-06
  • 俄罗斯驻华大使:未来上合的首要任务是加强区域一体化 2019-08-06
  • 浙江快乐12图表走势图表 彩票贵州快3走势图 真人龙虎斗现金试玩 精选料一尾中特平 新疆风采25选7开奖结果 3d和值尾走势图 魔术三张牌记住一张牌 北快3每天走势图 福建体彩时时彩开奖结果 体彩北京11选五开奖结果 河南快赢481在线计划 快乐双彩2019019 体彩福建36选7第18058期 彩票走势图2机1球 甘肃11选5前三组选