激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java變量和對(duì)象的作用域

Java變量和對(duì)象的作用域

2020-09-02 10:18AlanLee(Java) Java教程

本文主要介紹了Java變量和對(duì)象的作用域的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來看下吧

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

對(duì)于在作用域里定義的名字,作用域同時(shí)決定了它的“可見性”以及“存在時(shí)間”。在c,c++和java里,作用域是由花括號(hào)的位置決定的。

變量的作用域

例子:

?
1
2
3
4
5
6
7
8
9
10
{
  int x = 12;
  /* only x available */
  {
    int q = 96;
    /* both x & q available */
  }
  /* only x available */
  /* q “out of scope” */
}

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

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

?
1
2
3
4
5
6
{
  int x = 12;
  {
    int x = 96; /* illegal */
  }
}

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

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

Java變量和對(duì)象的作用域

Java變量和對(duì)象的作用域

我們?cè)賮砜催@段代碼,大家思考一個(gè)問題,第11行和第12行為什么沒有語法錯(cuò)誤?代碼如下:

Java變量和對(duì)象的作用域

Java變量和對(duì)象的作用域

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

Java變量和對(duì)象的作用域

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

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

Java變量和對(duì)象的作用域

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

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

對(duì)象的作用域

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

?
1
2
3
{
  string s = new string("a string");
} /* 作用域的終點(diǎn) */

那么句柄s,也就是引用會(huì)在作用域的終點(diǎn)處消失。然而,s指向的string對(duì)象依然占據(jù)著內(nèi)存空間。在上面這段代碼里,我們沒有辦法繼續(xù)使用這個(gè)對(duì)象,因?yàn)橹赶蛩奈ㄒ灰粋€(gè)句柄已經(jīng)超出了作用域的邊界。

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

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

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持服務(wù)器之家!

原文鏈接:http://www.cnblogs.com/AlanLee/p/6627949.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩av片在线免费观看 | 双性帝王调教跪撅打屁股 | 九九热久久免费视频 | 色屁屁xxxxⅹ在线视频 | 一区二区三区在线观看av | 欧美一区二区三区不卡免费观看 | 亚欧美一区二区 | 成人三级电影网站 | 日本人乱人乱亲乱色视频观看 | 日韩黄色片免费看 | 国产91九色 | 49vv看片免费| 国产精品视频二区不卡 | 最新中文在线视频 | 日本成人在线播放 | 欧洲黄色一级视频 | 国产91九色视频 | 国产精品区在线12p 午夜视频在线免费播放 | wankz100%videos| 成年人免费高清视频 | 精品无码一区在线观看 | 欧美1—12sexvideos | 国产免费视频一区二区裸体 | 亚洲午夜天堂吃瓜在线 | 欧美激情首页 | 在线播放中文 | 亚洲91精品 | 欧美精品v国产精品v日韩精品 | 日韩中文字幕一区二区三区 | 色妞视频男女视频 | 日韩在线黄色片 | 亚洲成人高清在线观看 | 色羞羞 | 日韩电影一区二区三区 | 亚洲字幕av | 天天黄色片| 九九热视频免费 | 亚洲精品久久久久久 | 久久草在线视频国产 | 黄色免费网站在线播放 | 欧美wwwwww|