Board logo

标题: Java与C++作用域的差异 [打印本页]

作者: qingqing3721    时间: 2011-10-18 19:33     标题: Java与C++作用域的差异

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对象作用域与变量的作用域是不同的。如下面的剖析,变量的作用域只在作用域外部有效。如在二级作用域内定义的变量,超出了二级作用域,那么就有效了。但是对象则不同,其可以存在于作用域之外。elelen胶原蛋白口服液如如今在某个作用域内定义了一个name_full对象。当脱离这个作用域的时候,这个对象的引用是消逝了。但是方才创建的这个对象仍然实实在在的保存在内存中。在Java顺序的运行过程中,只需经过传递或许复制对象引用的手段,那么在其他作用域内仍然可以访问这个对象。也就是说,只需我们有这个需求,那么在某个作用域内创建的对象其会一直存在并可以在作用域外的其他任何一个地方停止访问。当然前提是要经过复制或许传递等手段把对象引用传递到其他的作用域中。这就是Java对象与Java变量在作用域上最大的不同。




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0