欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java變量和對象的作用域

 更新時間:2017年03月28日 10:55:27   作者:AlanLee(Java)  
本文主要介紹了Java變量和對象的作用域的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧

大多數(shù)程序設(shè)計語言都提供了“作用域”(Scope)的概念。

對于在作用域里定義的名字,作用域同時決定了它的“可見性”以及“存在時間”。在C,C++和Java里,作用域是由花括號的位置決定的。

變量的作用域

例子:

{
  int x = 12;
  /* only x available */
  {
    int q = 96;
    /* both x & q available */
  }
  /* only x available */
  /* q “out of scope” */
}

Java用一對大括號作為語句塊的范圍,稱為作用域,作為在作用域里定義的一個變量,它只有在哪個作用域結(jié)束之前才可使用。

在Java中不能像下面這樣書寫代碼:

 {
   int x = 12;
   {
     int x = 96; /* illegal */
   }
 }

Java編譯器會認(rèn)為變量已被定義,所以作用域中的變量不能重復(fù)定義,但是在C和C++中能將一個變量“隱藏”在一個更大的作用域里,在C和C++中被允許,在Java中是不允許的,因為Java的設(shè)計者認(rèn)為這樣做使程序產(chǎn)生了混淆。

再來看兩個例子,為了讓大家看到效果這里使用截圖的方式:

我們再來看這段代碼,大家思考一個問題,第11行和第12行為什么沒有語法錯誤?代碼如下:

如果我們交換一下位置呢,代碼如下:

離開作用域,變量所分配的內(nèi)存空間將被JVM回收,所以語法不會有錯誤,而第二種寫法name并沒有離開{}作用域,所以會語法錯誤。

上述的變量都是局部變量,那么如果是在有全局變量的情況下又是怎樣一種結(jié)果呢?我們來用代碼說話,代碼如下:

大家仔細(xì)的觀察并結(jié)合代碼思考,可以得出變量的作用域結(jié)論如下:

在同一作用域范圍的包裹下全局變量名和局部變量名是可以變量名相同的,在同一個作用域范圍的包裹下局部變量和局部變量不可以變量名相同(作用域內(nèi)不能重復(fù)命名),使用變量的時候如果不指明使用全局變量還是局部變量,那么默認(rèn)的就是使用局部的那個變量,但是如果局部變量超出了它本身的作用域范圍則會失效,被JVM垃圾回收,那么則可以重復(fù)命名此變量,并使用最新定義的這個局部變量。

對象的作用域

Java對象不具備與朱類型一樣的存在時間。用new關(guān)鍵字創(chuàng)建一個Java對象的時候,它會超出作用域的范圍之外。所以假若使用下面這段代碼:

 {
   String s = new String("a string");
 } /* 作用域的終點 */

那么句柄s,也就是引用會在作用域的終點處消失。然而,s指向的String對象依然占據(jù)著內(nèi)存空間。在上面這段代碼里,我們沒有辦法繼續(xù)使用這個對象,因為指向它的唯一一個句柄已經(jīng)超出了作用域的邊界。

這樣造成的結(jié)果是:對于用new創(chuàng)建的對象,只要我們愿意,它們就會一直保留下去。這個編程問題在C和C++里特別突出。在C++里遇到的麻煩最大:由于不能從語言獲得任何幫助,所以在需要對象的時候,根本無法確定它們是否可用。而且最麻煩的是,在C++里,一旦完成工作,必須保證將對象手動清除。

這樣便帶來了一個有趣的問題。假如 Java 讓對象依然故我,怎樣才能防止它們大量充斥內(nèi)存,并最終造成程序的“凝固”呢。在 C++里,這個問題最令程序員頭痛。但 Java 以后,情況卻發(fā)生了改觀。 Java 有一個特別的“垃圾收集器”,它會查找用 new 創(chuàng)建的所有對象,并辨別其中哪些不再被引用。隨后,它會自動釋放由那些閑置對象占據(jù)的內(nèi)存,以便能由新對象使用。這意味著我們根本不必操心內(nèi)存的回收問題。只需簡單地創(chuàng)建對象,一旦不再需要它們,它們就會自動離去。這樣做可防止在 C++里很常見的一個編程問題:由于程序員忘記釋放內(nèi)存造成的“內(nèi)存溢出”。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • Java經(jīng)典面試題匯總:Java Web

    Java經(jīng)典面試題匯總:Java Web

    本篇總結(jié)的是Java Web相關(guān)的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習(xí)生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • springmvc攔截器登錄驗證示例

    springmvc攔截器登錄驗證示例

    本篇文章主要介紹了springmvc攔截器登錄驗證示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java 面向?qū)ο笾^承篇詳解原理與特點

    Java 面向?qū)ο笾^承篇詳解原理與特點

    繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因為它允許創(chuàng)建分等級層次的類。繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為
    2021-10-10
  • Java實現(xiàn)平滑加權(quán)輪詢算法之降權(quán)和提權(quán)詳解

    Java實現(xiàn)平滑加權(quán)輪詢算法之降權(quán)和提權(quán)詳解

    所有負(fù)載均衡的場景幾乎都會用到這個平滑加權(quán)輪詢算法,下面這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)平滑加權(quán)輪詢算法之降權(quán)和提權(quán)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Java中Spring的Security使用詳解

    Java中Spring的Security使用詳解

    這篇文章主要介紹了Java中Spring的Security使用詳解,在web應(yīng)用開發(fā)中,安全無疑是十分重要的,選擇Spring Security來保護(hù)web應(yīng)用是一個非常好的選擇,需要的朋友可以參考下
    2023-07-07
  • 基于SpringBoot開機(jī)啟動與@Order注解

    基于SpringBoot開機(jī)啟動與@Order注解

    這篇文章主要介紹了SpringBoot開機(jī)啟動與@Order注解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java基礎(chǔ)鞏固系列包裝類代碼實例

    Java基礎(chǔ)鞏固系列包裝類代碼實例

    這篇文章主要介紹了Java包裝類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java引用類型interface的用法總結(jié)

    Java引用類型interface的用法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Java中引用類型interface的用法的相關(guān)資料,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下
    2022-10-10
  • Java設(shè)計模式之責(zé)任鏈模式的概念、實現(xiàn)以及netty中的責(zé)任鏈模式

    Java設(shè)計模式之責(zé)任鏈模式的概念、實現(xiàn)以及netty中的責(zé)任鏈模式

    這篇文章主要給大家介紹了關(guān)于設(shè)計模式之責(zé)任鏈模式的概念、實現(xiàn)以及netty中的責(zé)任鏈模式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java拆裝箱深度剖析

    Java拆裝箱深度剖析

    這篇文章主要為大家深度剖析了Java拆箱裝箱的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論