Sitemap" content="www.duozhankeji.com">
全國免費熱線:
Java語言與C++語言在作用域上的差異
作者:中国IT实验室 点击:17466次 日期: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
網站问题免费诊断

电子商务三位一体發展戰略

技術研發

業務培训

實戰運營

戰略布局