当前位置:七道奇文章资讯编程技术Java编程
日期:2012-02-22 10:33:00  来源:本站整理

Java、C++两大语言在作用域上的差别[Java编程]

赞助商链接



  本文“Java、C++两大语言在作用域上的差别[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

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++语言一样,都是面向对象的语言.不过二者在实现机制上有很大的差别.就拿对象的作用域来说,就有很大的差别.这也招致了两个面向对象的语言在实现细节上的宏大差别.

1. 首先Java程序员需求懂得的是,Java对象作用域与变量的作用域是差别的.如上面的解析,变量的作用域只在作用域内部有效.如在二级作用域内定义的变 量,超越了二级作用域,那么就无效了.但是对象则差别,其可以存在于作用域之外.如目前在某个作用域内定义了一个name_full对象.当脱离这个作用 域的时刻,这个对象的引用是消逝了.但是方才成立的这个对象仍旧实实在在的保存在内存中.在Java程序的运行历程中,只要通过传送大概复制对象引用的手 段,那么在其他作用域内仍旧可以拜候这个对象.也就是说,只要我们有这个需求,那么在某个作用域内成立的对象其会一向存在并可以在作用域外的其他任何一个 地方举行拜候.当然前提是要通过复制大概传送等手段把对象引用传送到其他的作用域中.这就是Java对象与Java变量在作用域上最大的差别.

2. 其次,Java对象与C++语言的作用域有很大的差别.其实C++语言中的对象跟变量的作用域到是很近似的.在C++语言中一旦利用完对象之后,就必须把 这个对象销毁掉.说的切当一点,就是要在作用域内把利用完的对象所占的内存空间释放掉.不然的话,假如在作用于外部,由于已经失去了对这个对象的引用,为 此这个对象就仿佛成为了太空中的一个人,无法再对其举行任何的操作,只要任其自生自灭.为此关于C++语言来说,程序员很难在脱离作用域外后,确保在需求 调用对象时,仍旧可以拜候这个对象.这也恰是C++语言开辟历程中最让人头疼的问题.因为需求手工来销毁对象.万一对象所占用的内存空间没有别及时释放的 话,那么关于利用程序的安全与性能城市产生很大的影响.

java作用域外对象的去处

在 Java程序中,这个作用域外的对象终究有两个去处.首先,可以通过复制大概传送,在作用域外部仍旧可以拜候这个对象.其次,就是销毁对象.不过我们不用 通过代码来销毁这个从前成立的对象.因为在Java语言中有一种叫做垃圾回收器的处理机制,其可以用来动态监督New关键字成立的全部对象,并按照一定的 法则来判断哪些对象不会再被引用.假如其判断某个对象不再被引用话,则会自动释放这些对象所占用的内存空间,以供其他新的对象所利用.我们程序开辟人员只 管成立对象便可,而不用去耽忧什么时刻去销毁对象.为此,这便可以消除C++语言面对的内存溢出问题.这个内存溢出问题就是因为程序开辟人员用完对象后忘 记销毁所造成的.

由于在Java程序开辟中,我们开辟人员不用关心对象的销毁问题,为此可以更多的精神放在代码的优化上.而不像C++语言 那样,要把这个对象销毁问题当作头件大事来对待.固然如此,不过Java程序员也不可以漫不尽心.分外是当我们在脱离某个作用域后还需求拜候这个对象的时 候,一定要记得通过复制大概传送等手段把对象引用传送给其他作用域.不然的话,即便这个对象没有灭亡,还实际存储在内存中,但是也会因为贫乏了引用而无法 拜候他们.为此在跨作用域引用对象的时刻,这个引用的复制与传送千万不可以忘了.

假如不幸忘了的话,那么在作用域外的代码就无法再拜候这个对象.不过这个对象在一按时刻会被垃圾回收器回收了.被释放了的内存空间便可以被反复利用,从而避免内存溢出的问题发生.

总结

当 Java程序员在开辟利用程序的时刻,这个Java对象与Java变量作用域的差别,以及Java对象与其他语言对象作用域的差别,一定要了然于胸.这有 助于Java程序员可以更好的操纵这个Java对象.别的笔者不厌其烦的再夸大一遍,默许情形下脱离了某个作用域之后,对象就失去了引用无法拜候.假如要 在作用域再拜候这个对象的时刻,则需求及时把这个引用复制大概传送出来.不然的话,作用域外的代码是无法再操作这个对象.


  以上是“Java、C++两大语言在作用域上的差别[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .