精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java初學者都必須理解的六大問題

開發 后端
這些都是初學Java經常出現的常見問題,雖然很多大家都是懂得,但是很多人通常都是概念不清。好了,下面就讓我們來深入這些基礎的問題。

問題一:我聲明了什么!

  1. String s = "Hello world!";    

許多人都做過這樣的事情,但是,我們到底聲明了什么?回答通常是:一個String,內容是“Hello world!”。這樣模糊的回答通常是概念不清的根源。如果要準確的回答,一半的人大概會回答錯誤。

這個語句聲明的是一個指向對象的引用,名為“s”,可以指向類型為String的任何對象,目前指向"Hello world!"這個String類型的對象。這就是真正發生的事情。我們并沒有聲明一個String對象,我們只是聲明了一個只能指向String對象的引用變量。所以,如果在剛才那句語句后面,如果再運行一句:

  1. String string = s;    

我們是聲明了另外一個只能指向String對象的引用,名為string,并沒有第二個對象產生,string還是指向原來那個對象,也就是,和s指向同一個對象。

問題二:"=="和equals方法究竟有什么區別?

==操作符專門用來比較變量的值是否相等。

比較好理解的一點是:

  1. int a=10;     
  2.  
  3. int b=10;     

則a==b將是true。

但不好理解的地方是:

  1. String a=new String("foo");     
  2.  
  3. String b=new String("foo");    

則a==b將返回false。

根據前一帖說過,對象變量其實是一個引用,它們的值是指向對象所在的內存地址,而不是對象本身。a和b都使用了new操作符,意味著將在內存中產生兩個內容為"foo"的字符串,既然是“兩個”,它們自然位于不同的內存地址。a和b的值其實是兩個不同的內存地址的值,所以使用"=="操作符,結果會是false。誠然,a和b所指的對象,它們的內容都是"foo",應該是“相等”,但是==操作符并不涉及到對象內容的比較。

對象內容的比較,正是equals方法做的事。

看一下Object對象的equals方法是如何實現的:

  1. boolean equals(Object o){     
  2.  
  3. return this==o;     
  4.  
  5. }     

Object對象默認使用了==操作符。所以如果你自創的類沒有覆蓋equals方法,那你的類使用equals和使用==會得到同樣的結果。同樣也可以看出,Object的equals方法沒有達到equals方法應該達到的目標:比較兩個對象內容是否相等。因為答案應該由類的創建者決定,所以Object把這個任務留給了類的創建者。

看一下一個極端的類:   

  1. Class Monster{     
  2. private String content;     
  3. ...     
  4. boolean equals(Object another){  
  5. return true;  
  6. }     
  7. }    

我覆蓋了equals方法。這個實現會導致無論Monster實例內容如何,它們之間的比較永遠返回true。

所以當你是用equals方法判斷對象的內容是否相等,請不要想當然。因為可能你認為相等,而這個類的作者不這樣認為,而類的equals方法的實現是由他掌握的。如果你需要使用equals方法,或者使用任何基于散列碼的集合(HashSet,HashMap,HashTable),請察看一下java doc以確認這個類的equals邏輯是如何實現的。

問題三:String到底變了沒有?

沒有。因為String被設計成不可變(immutable)類,所以它的所有對象都是不可變對象。請看下列代碼:

  1. String s = "Hello";  
  2. s = s + " world!";  

s所指向的對象是否改變了呢?從本系列***篇的結論很容易導出這個結論。我們來看看發生了什么事情。在這段代碼中,s原先指向一個String對象,內容是"Hello",然后我們對s進行了+操作,那么s所指向的那個對象是否發生了改變呢?答案是沒有。這時,s不指向原來那個對象了,而指向了另一個String對象,內容為"Hello world!",原來那個對象還存在于內存之中,只是s這個引用變量不再指向它了。

通過上面的說明,我們很容易導出另一個結論,如果經常對字符串進行各種各樣的修改,或者說,不可預見的修改,那么使用String來代表字符串的話會引起很大的內存開銷。因為String對象建立之后不能再改變,所以對于每一個不同的字符串,都需要一個String對象來表示。這時,應該考慮使用StringBuffer類,它允許修改,而不是每個不同的字符串都要生成一個新的對象。并且,這兩種類的對象轉換十分容易。

同時,我們還可以知道,如果要使用內容相同的字符串,不必每次都new一個String。例如我們要在構造器中對一個名叫s的String引用變量進行初始化,把它設置為初始值,應當這樣做:

  1. public class Demo {  
  2.   private String s;  
  3.   ...  
  4.   public Demo {  
  5.   s = "Initial Value";  
  6.   }  
  7.   ...  
  8.   } 

而非

  1. s = new String("Initial Value"); 

后者每次都會調用構造器,生成新對象,性能低下且內存開銷大,并且沒有意義,因為String對象不可改變,所以對于內容相同的字符串,只要一個String對象來表示就可以了。也就說,多次調用上面的構造器創建多個對象,他們的String類型屬性s都指向同一個對象。

上面的結論還基于這樣一個事實:對于字符串常量,如果內容相同,Java認為它們代表同一個String對象。而用關鍵字new調用構造器,總是會創建一個新的對象,無論內容是否相同。

至于為什么要把String類設計成不可變類,是它的用途決定的。其實不只String,很多Java標準類庫中的類都是不可變的。在開發一個系統的時候,我們有時候也需要設計不可變類,來傳遞一組相關的值,這也是面向對象思想的體現。不可變類有一些優點,比如因為它的對象是只讀的,所以多線程并發訪問也不會有任何問題。當然也有一些缺點,比如每個不同的狀態都要一個對象來代表,可能會造成性能上的問題。所以Java標準類庫還提供了一個可變版本,即StringBuffer。

問題四:final關鍵字到底修飾了什么?

final使得被修飾的變量"不變",但是由于對象型變量的本質是“引用”,使得“不變”也有了兩種含義:引用本身的不變,和引用指向的對象不變。

引用本身的不變:

  1. final StringBuffer a=new StringBuffer("immutable");  
  2. final StringBuffer b=new StringBuffer("not immutable");  
  3. a=b;//編譯期錯誤 

引用指向的對象不變:

  1. final StringBuffer a=new StringBuffer("immutable");  
  2. a.append(" broken!"); //編譯通過 

可見,final只對引用的“值”(也即它所指向的那個對象的內存地址)有效,它迫使引用只能指向初始指向的那個對象,改變它的指向會導致編譯期錯誤。至于它所指向的對象的變化,final是不負責的。這很類似==操作符:==操作符只負責引用的“值”相等,至于這個地址所指向的對象內容是否相等,==操作符是不管的。   理解final問題有很重要的含義。許多程序漏洞都基于此----final只能保證引用永遠指向固定對象,不能保證那個對象的狀態不變。在多線程的操作中,一個對象會被多個線程共享或修改,一個線程對對象無意識的修改可能會導致另一個使用此對象的線程崩潰。一個錯誤的解決方法就是在此對象新建的時候把它聲明為final,意圖使得它“永遠不變”。其實那是徒勞的。

問題五:到底要怎么樣初始化!

本問題討論變量的初始化,所以先來看一下Java中有哪些種類的變量。   

1. 類的屬性,或者叫值域

2. 方法里的局部變量

3. 方法的參數

對于***種變量,Java虛擬機會自動進行初始化。如果給出了初始值,則初始化為該初始值。如果沒有給出,則把它初始化為該類型變量的默認初始值。

int類型變量默認初始值為0

float類型變量默認初始值為0.0f

double類型變量默認初始值為0.0

boolean類型變量默認初始值為false

char類型變量默認初始值為0(ASCII碼)

long類型變量默認初始值為0

所有對象引用類型變量默認初始值為null,即不指向任何對象。注意數組本身也是對象,所以沒有初始化的數組引用在自動初始化后其值也是null。

對于兩種不同的類屬性,static屬性與instance屬性,初始化的時機是不同的。instance屬性在創建實例的時候初始化,static屬性在類加載,也就是***次用到這個類的時候初始化,對于后來的實例的創建,不再次進行初始化。這個問題會在以后的系列中進行詳細討論。

對于第二種變量,必須明確地進行初始化。如果再沒有初始化之前就試圖使用它,編譯器會抗議。如果初始化的語句在try塊中或if塊中,也必須要讓它在***次使用前一定能夠得到賦值。也就是說,把初始化語句放在只有if塊的條件判斷語句中編譯器也會抗議,因為執行的時候可能不符合if后面的判斷條件,如此一來初始化語句就不會被執行了,這就違反了局部變量使用前必須初始化的規定。但如果在else塊中也有初始化語句,就可以通過編譯,因為無論如何,總有至少一條初始化語句會被執行,不會發生使用前未被初始化的事情。對于try-catch也是一樣,如果只有在try塊里才有初始化語句,編譯部通過。如果在catch或finally里也有,則可以通過編譯。總之,要保證局部變量在使用之前一定被初始化了。所以,一個好的做法是在聲明他們的時候就初始化他們,如果不知道要出事化成什么值好,就用上面的默認值吧!

其實第三種變量和第二種本質上是一樣的,都是方法中的局部變量。只不過作為參數,肯定是被初始化過的,傳入的值就是初始值,所以不需要初始化。

問題六:instanceof是什么東東?

instanceof是Java的一個二元操作符,和==,> , <是同一類東東。由于它是由字母組成的,所以也是Java的保留關鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,返回boolean類型的數據。舉個例子:

  1. String s = "I AM an Object!";     
  2. boolean isObject = s instanceof Object; 

我們聲明了一個String對象引用,指向一個String對象,然后用instancof來測試它所指向的對象是否是Object類的一個實例,顯然,這是真的,所以返回true,也就是isObject的值為True。

instanceof有一些用處。比如我們寫了一個處理賬單的系統,其中有這樣三個類:

  1.   public class Bill {//省略細節}  
  2.  
  3.   public class PhoneBill extends Bill {//省略細節}  
  4.  
  5.   public class GasBill extends Bill {//省略細節}  

在處理程序里有一個方法,接受一個Bill類型的對象,計算金額。假設兩種賬單計算方法不同,而傳入的Bill對象可能是兩種中的任何一種,所以要用instanceof來判斷:

  1.   public double calculate(Bill bill) {  
  2.   if (bill instanceof PhoneBill) {  
  3.   //計算電話賬單  
  4.   }  
  5.   if (bill instanceof GasBill) {  
  6.   //計算燃氣賬單  
  7.   }  
  8.   ...  
  9.   } 

這樣就可以用一個方法處理兩種子類。 然而,這種做法通常被認為是沒有好好利用面向對象中的多態性。其實上面的功能要求用方法重載完全可以實現,這是面向對象變成應有的做法,避免回到結構化編程模式。只要提供兩個名字和返回值都相同,接受參數類型不同的方法就可以了:

  1.   public double calculate(PhoneBill bill) {  
  2.   //計算電話賬單  
  3.   }  
  4.   public double calculate(GasBill bill) {  
  5.   //計算燃氣賬單  
  6.   } 

原文鏈接:http://www.cnblogs.com/mingzi/archive/2009/01/03/1367498.html

【編輯推薦】

  1. 深入Java關鍵字null
  2. Java 5線程池使用
  3. 淺析Java抽象類和接口的比較
  4. Java代碼格式規范個人推薦(帶范例)
  5. Java類和對象的初始化順序
責任編輯:林師授 來源: 兩顆番茄的博客
相關推薦

2011-04-06 14:42:25

Delphi

2011-07-11 17:45:13

java

2012-05-21 23:59:58

Java

2022-04-12 11:20:11

C 語言Linux編程

2022-04-13 09:27:39

C 語言編程

2009-08-25 09:29:18

維護代碼

2010-09-03 10:26:54

IT人

2018-06-29 14:42:54

編程Python開發

2023-08-05 16:12:47

systemdLinux

2010-09-01 09:23:53

DIV CSS

2012-02-20 10:11:53

PhoneGap

2013-02-20 10:13:38

JavaJava初學者

2011-07-04 14:14:54

java

2020-09-08 19:03:41

Java代碼初學者

2011-05-20 08:55:15

J2EE

2019-07-31 07:08:59

物聯網企業IOT

2010-07-02 11:17:47

繪制UML圖

2010-04-13 11:36:01

2011-06-01 09:27:08

JavaScript

2017-06-05 13:56:34

前端開發JavaScriptthis
點贊
收藏

51CTO技術棧公眾號

韩国一区二区三区| 日韩欧美ww| 亚洲欧美色图小说| 国产精品免费观看高清| 欧美成人一区二区三区四区| 日韩欧美一区二区三区免费看| 91麻豆精品国产综合久久久久久| 国产二区视频在线| 成a人片在线观看www视频| 国产精品自拍三区| 国产97在线|亚洲| 欧美黑人性猛交xxx| 色哟哟精品丝袜一区二区| 欧美精品自拍偷拍动漫精品| 国产毛片视频网站| 麻豆网站在线观看| 久久网站热最新地址| 亚洲精品日韩激情在线电影| 无码人妻av免费一区二区三区| 女主播福利一区| 在线精品高清中文字幕| 波多野结衣加勒比| 日韩中文字幕视频网| 欧美视频一区二区三区四区 | 特大黑人巨人吊xxxx| 95精品视频| 91福利在线观看| 久久精品国产sm调教网站演员| 九义人在线观看完整免费版电视剧| 91啦中文在线观看| 99在线观看视频| 91午夜交换视频| 日韩黄色片在线观看| 97在线免费视频| 欧美黑人性猛交xxx| 日韩精品看片| 国产亚洲精品久久久久动| 这里只有精品在线观看视频| 视频在线观看免费影院欧美meiju| 欧美性xxxxxxxx| 国产精品无码专区av在线播放| 黄色在线免费观看网站| 亚洲精品国产一区二区三区四区在线| 婷婷精品国产一区二区三区日韩| 色鬼7777久久| 久久亚洲精精品中文字幕早川悠里| av免费观看久久| 亚洲国产精品久久人人爱潘金莲 | 高跟丝袜一区二区三区| 欧美激情亚洲天堂| 羞羞污视频在线观看| 成人免费一区二区三区视频| 一区二区精品在线| 在线看的av网站| 国产精品国产三级国产有无不卡 | freexxx性亚洲精品| 亚洲影视在线观看| 日本黄大片在线观看| 国内小视频在线看| 午夜久久久影院| 青草青草久热精品视频在线网站| 久久丫精品国产亚洲av不卡| 天堂俺去俺来也www久久婷婷| 精品国产青草久久久久福利| 日本一区二区高清视频| 国产aⅴ一区二区三区| 国产精品一区二区久久精品爱涩 | 成人av番号网| 久久人妻少妇嫩草av无码专区| 色综合久久久久久中文网| 国产一区二区丝袜| 色综合色综合色综合色综合| 少妇一级淫片日本| 91精品国产一区二区在线观看| 欧美日韩精品免费| 成人亚洲免费视频| 97一区二区国产好的精华液| 精品国产乱码久久久久久1区2区 | 一区二区三区四区精品视频| 日韩av网址在线| 欧美xxxx精品| 亚洲成人三区| 欧美综合在线观看| 中文字幕一区2区3区| 国产精品99久久久久久久vr| 韩国成人一区| 婷婷激情在线| 亚洲地区一二三色| 成人在线免费视频| 国产xxx精品视频大全| 国产精品一区而去| 男女污污视频在线观看| 国产精品久久午夜| 免费在线观看视频a| 成人爱爱网址| 日韩视频一区二区三区在线播放| 亚洲字幕一区二区| 丰满少妇一级片| 国产日产亚洲精品系列| 成人在线视频一区二区三区| 欧美xxx性| 欧美一级欧美三级| 国产成人福利在线| 伊人精品成人久久综合软件| 国产精品极品在线| 神马久久久久久久久久| 国产精品久久久久影院亚瑟| 香港三级韩国三级日本三级| 国产免费区一区二区三视频免费| 日韩黄色av网站| 久久高清内射无套| 日韩精品一卡二卡三卡四卡无卡| 99r国产精品视频| a天堂在线资源| 精品国产户外野外| 欧美一区二区三区影院| 日韩中文在线电影| 清纯唯美日韩制服另类| 亚洲精品久久久久avwww潮水| 中文在线免费一区三区高中清不卡| www..com日韩| 国产一区二区高清在线| 中文字幕日韩专区| 国产小视频在线免费观看| 国产成人一区在线| 免费久久久久久| julia一区二区三区中文字幕| 亚洲精品久久久久久久久| 欧美成欧美va| 国产一区二区在线看| 亚洲色图自拍| 日韩精品免费观看视频| 亚洲精品视频在线播放| 日本熟妇一区二区| 粉嫩在线一区二区三区视频| 国产精品12p| 色婷婷成人网| 日韩中文字幕在线精品| 亚洲熟妇无码久久精品| 国产色综合一区| 欧美丰满熟妇xxxxx| 免费久久久久久久久| 欧美在线性视频| 性xxxxbbbb| 五月天丁香久久| 国产精品嫩草av| 中文在线一区| 久久精品日韩精品| 性国裸体高清亚洲| 日韩精品在线免费| 麻豆精品久久久久久久99蜜桃| 久久综合色8888| 国产三区在线视频| 国产探花一区二区| 国产美女91呻吟求| mm1313亚洲国产精品美女| 欧美喷水一区二区| 亚洲欧美一区二区三区四区五区| 国产精品香蕉一区二区三区| www成人免费| 蜜桃久久久久| 国产成人精品免费视频| 1pondo在线播放免费| 欧美一区二区国产| 日韩免费黄色片| 久久久不卡网国产精品二区| 麻豆三级在线观看| 亚洲综合五月| 精品不卡在线| 日韩不卡免费高清视频| 久久精品福利视频| 成人毛片视频免费看| 欧美日韩另类字幕中文| 精品一区二区6| 国产福利一区在线观看| 男女视频网站在线观看| 欧美裸体在线版观看完整版| 国产在线观看精品| 超碰97免费在线| 亚洲视频在线观看| 国产裸体无遮挡| 五月天精品一区二区三区| 成人在线手机视频| 国产伦精一区二区三区| 久久久久久久中文| 忘忧草精品久久久久久久高清| 91久久极品少妇xxxxⅹ软件| 日韩理论视频| 爱福利视频一区| 亚洲 美腿 欧美 偷拍| 欧美婷婷六月丁香综合色| 国产一级做a爱免费视频| 国产日韩v精品一区二区| 最新国产精品自拍| 日本sm残虐另类| 亚洲国产精品无码观看久久| 日韩av免费大片| 国产视频99| 国产一区二区三区免费观看在线 | 欧美三级网站| 色婷婷av一区二区三区久久| 免费观看毛片网站| 欧美日韩精品系列| 免费在线观看黄网站| 亚洲三级视频在线观看| aa片在线观看视频在线播放| 精品一区二区三区在线观看| 欧美丰满熟妇bbbbbb百度| 亚洲在线久久| 亚洲国产精品123| 亚洲另类春色校园小说| 99影视tv| 日韩一区二区三区色| 国产精品久久中文| 亚洲欧洲自拍| 97婷婷涩涩精品一区| 午夜av在线免费观看| 最近中文字幕2019免费| 久久精品a一级国产免视看成人| 日韩精品中文字幕在线一区| 一级黄色短视频| 色av一区二区| 你懂的国产在线| 亚瑟在线精品视频| 久久久久久久久久一区二区三区 | 自拍偷拍欧美亚洲| 伊人婷婷欧美激情| 二区三区在线| 国产高清久久久久| mm131国产精品| 欧美综合二区| 天天夜碰日日摸日日澡性色av| 亚洲色图网站| 超碰免费在线公开| 欧美www视频在线观看| 欧美日韩一区在线视频| 久久这里只有精品一区二区| 97超碰在线播放| 免费一级欧美在线大片| 成人免费网站在线看| 久久日本片精品aaaaa国产| 国产精品高潮呻吟久久av野狼| 美女露胸视频在线观看| 91精品国产91久久久久| 97人人在线视频| 国模吧一区二区| 超碰在线网站| 4438全国成人免费| 亚洲精品永久免费视频| 欧美综合激情网| 欧美福利在线播放| 国产精品免费福利| www.一区| 成人亚洲欧美一区二区三区| 色999久久久精品人人澡69| 91色琪琪电影亚洲精品久久| 一区二区免费| 精品91免费| 精品国产乱码久久久久久蜜坠欲下| 日韩电影大全在线观看| 日韩av在线播放网址| 最近看过的日韩成人| 中国精品18videos性欧美| 美女扒开大腿让男人桶| 中文在线一区| 男女污污的视频| 精品亚洲成a人| 国产在线不卡av| 久久尤物电影视频在线观看| 女人十八毛片嫩草av| 亚洲欧美乱综合| 日本一级片免费看| 日本精品在线播放| 国产精品入口尤物| 国产精品一区二区精品| 国产伦视频一区二区三区| 亚洲第一福利专区| 亚洲综合久久久久| theav精尽人亡av| 国产欧美一区二区精品性色| 神马午夜精品91| 亚洲va天堂va国产va久| 欧美一级做a爰片免费视频| 91精品视频网| 水莓100在线视频| 日韩在线不卡视频| av在线中出| 国产免费一区二区三区在线能观看| 国产精久久久| 欧美自拍资源在线| 一本精品一区二区三区| 777精品久无码人妻蜜桃| 看片网站欧美日韩| 日本黄色动态图| 国产精品女上位| 你懂的国产视频| 9191国产精品| 欧美日韩激情视频一区二区三区| 久久视频免费观看| 自拍偷拍欧美视频| www.成人av| 日韩av二区| 国产成人久久777777| 国产盗摄视频一区二区三区| 亚洲女同二女同志奶水| 精品久久香蕉国产线看观看gif| 国产精品美女一区| 国产亚洲精品久久久| 成人三级高清视频在线看| 成人免费在线视频网站| 国产一区二区区别| 国产欧美日韩网站| 国产乱国产乱300精品| 黄色三级生活片| 精品久久香蕉国产线看观看亚洲| 国产a级免费视频| 在线日韩日本国产亚洲| 亚洲天堂手机| 国产伦精品一区二区三区视频免费 | 中文字幕av网址| 亚洲一区二区三区国产| 一级黄色片在线| 色哟哟网站入口亚洲精品| 亚洲免费福利| 久久青青草原| 亚洲三级色网| 人妻 日韩 欧美 综合 制服| 亚洲欧洲综合另类| 国产尤物视频在线观看| 这里只有精品在线播放| 手机看片久久| 欧美在线视频一区二区三区| 国产欧美一区二区三区国产幕精品| 真实乱偷全部视频| 亚洲另类在线一区| 99久久精品免费看国产交换| 精品国产自在精品国产浪潮| 韩日精品一区| 亚洲国产欧洲综合997久久| 久久一区欧美| 中文字幕 自拍| 日本道色综合久久| 国产三级在线观看| 国产精品激情av在线播放| 精品国产123区| 五月婷婷狠狠操| 国产精品电影一区二区三区| 亚洲天堂手机在线| zzijzzij亚洲日本成熟少妇| 国产成人久久精品一区二区三区| 丰满女人性猛交| 国产高清久久久| 日韩成人免费在线观看| 亚洲国产天堂久久国产91| 僵尸再翻生在线观看| 久久久久一区二区| 日韩精品成人一区二区在线| 亚洲综合欧美综合| 欧美日本国产视频| 午夜dj在线观看高清视频完整版 | 人人做人人澡人人爽欧美| 最新亚洲精品| 成年网站在线播放| 亚洲天堂中文字幕| 不卡视频免费在线观看| 久久久视频精品| 精品一区欧美| 最新国产黄色网址| 亚洲一区在线播放| 人成在线免费视频| 国产日韩换脸av一区在线观看| 正在播放日韩欧美一页| 一级特黄a大片免费| 在线视频国产一区| 污污在线观看| 久久五月天婷婷| 精品一区二区三区免费播放 | 在线一区二区三区四区| 欧美成人hd| 精品国产一区二区三区麻豆免费观看完整版 | 国产免费久久久| 97久久国产精品| 日韩欧美网站| av无码一区二区三区| 欧美网站一区二区| 毛片网站在线看| 五月天亚洲综合| 成人激情小说网站| 伊人成年综合网| 色综合男人天堂| 精品国产精品| 毛茸茸free性熟hd| 欧美日本精品一区二区三区| 超碰在线视屏| 这里只有精品66| 久久免费偷拍视频| 精品毛片在线观看| 国产精品久久久av| 亚洲人人精品| 欧美第一页在线观看|