第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么沒有在Java中初始化局部變量?

為什么沒有在Java中初始化局部變量?

ibeautiful 2019-07-04 15:43:20
為什么沒有在Java中初始化局部變量?為什么Java的設(shè)計(jì)者認(rèn)為不應(yīng)該給局部變量一個默認(rèn)值?說真的,如果實(shí)例變量可以被賦予一個默認(rèn)值,那么為什么我們不能對局部變量做同樣的事情呢?它也會導(dǎo)致問題,正如在這條評論是寫在博客上的:當(dāng)試圖關(guān)閉最終塊中的資源時,這個規(guī)則是最令人沮喪的。如果我在TRY中實(shí)例化資源,但試圖在Final中關(guān)閉它,我就會得到這個錯誤。如果我將實(shí)例化移到TRY之外,則會得到另一個錯誤,說明它必須在TRY中。非常令人沮喪。
查看完整描述

3 回答

?
桃花長相依

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個贊

聲明局部變量主要是為了做一些計(jì)算。因此,程序員決定設(shè)置變量的值,而不應(yīng)該采用默認(rèn)值。如果程序員錯誤地沒有初始化局部變量并取默認(rèn)值,那么輸出可能是一些意想不到的值。因此,對于局部變量,編譯器將要求程序員在訪問變量之前使用某個值進(jìn)行初始化,以避免使用未定義的值。


查看完整回答
反對 回復(fù) 2019-07-04
?
Helenr

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個贊

你鏈接到的“問題”似乎是在描述這種情況:

SomeObject so;try {
  // Do some work here ...
  so = new SomeObject();
  so.DoUsefulThings();} finally {
  so.CleanUp(); // Compiler error here}

注釋者的抱怨是編譯器在finally一節(jié),聲稱so可能是未初始化的。然后,注釋提到了另一種編寫代碼的方法,可能如下所示:

// Do some work here ...SomeObject so = new SomeObject();try {
  so.DoUsefulThings();} finally {
  so.CleanUp();}

注釋者對該解決方案不滿意,因?yàn)榫幾g器隨后說代碼“必須在嘗試中”。我猜這意味著一些代碼可能會引發(fā)一個不再被處理的異常。我沒有把握。我的代碼的兩個版本都不處理任何異常,因此第一個版本中任何與異常相關(guān)的操作在第二個版本中都應(yīng)該是相同的。

無論如何,第二個版本的代碼是對,是這樣寫它的方法。在第一個版本中,編譯器的錯誤消息是正確的。這個so變量可能未初始化。特別是,如果SomeObject構(gòu)造器失敗,so將不會被初始化,因此嘗試調(diào)用它將是一個錯誤。so.CleanUp..始終輸入try剖面您已經(jīng)獲得了finally部分最后確定。

這個try-finally塊之后的so初始化來保護(hù)SomeObject例如,不管發(fā)生什么事情,都要把它清理干凈。如果有其他需要運(yùn)行的東西,但它們與SomeObject實(shí)例被分配了屬性,那么它們應(yīng)該進(jìn)入另一個 try-finally布洛克,可能是我展示的那個。

在使用前需要手動分配變量并不會導(dǎo)致真正的問題。這只會導(dǎo)致一些小麻煩,但是您的代碼會更好。您將擁有范圍更有限的變量,并且try-finally不試圖保護(hù)太多的障礙。

如果局部變量具有默認(rèn)值,則so在第一個例子中null..那根本解決不了任何問題。而不是在finally布洛克,你會有一個NullPointerException潛伏在那里無論在代碼的“在這里做一些工作”部分可能發(fā)生什么其他異常。(或在finally節(jié)自動鏈接到以前的異常?我不記得了。即使如此,你也會有一個額外的例外,就像真正的例外。)


查看完整回答
反對 回復(fù) 2019-07-04
?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個贊

此外,在下面的示例中,可能在SomeObject構(gòu)造中拋出了一個異常,在這種情況下,‘so’變量將為NULL,而對清理的調(diào)用將拋出NullPointerException。

SomeObject so;try {
  // Do some work here ...
  so = new SomeObject();
  so.DoUsefulThings();} finally {
  so.CleanUp(); // Compiler error here}

我傾向于這樣做:

SomeObject so = null;try {
  // Do some work here ...
  so = new SomeObject();
  so.DoUsefulThings();} finally {
  if (so != null) {
     so.CleanUp(); // safe
  }}


查看完整回答
反對 回復(fù) 2019-07-04
  • 3 回答
  • 0 關(guān)注
  • 870 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號