Java核心技術(shù)Ⅰ——心得(1)

之前學(xué)的android噩茄,現(xiàn)在由Javase來深入java摄凡,這里只提到一些混淆的续徽,容易犯錯、忘記亲澡,不常見又很重要的一些知識點钦扭。
1.Java中定義類的規(guī)則很寬松。名字必須以字母開頭床绪,后門可以跟字母和數(shù)字的任意組合客情,長度上沒有限制,但不能使用Java保留字癞己。

標(biāo)準(zhǔn)的命名規(guī)范為:類名是以大寫字母開頭的名詞膀斋,如果名字由多個單詞組成,每個單詞的第一個字母都應(yīng)該大寫痹雅,用大寫字母的方式稱為駱駝命名法仰担。


2.源代碼的文件名必須與公共類的名字相同,并用.java作為擴展名绩社。


3.java中的main方法必須是靜態(tài)的摔蓝。


4.在java中赂苗,一共有8種基本類型,其中4種整型(byte贮尉,short,int,long)拌滋,2種浮點型(float,double),1種用于表示Unicode編碼的字符單元的字符類型char和1種表示真值的boolean。


5.在Java中绘盟,整型的范圍與運行Java的代碼的機器無關(guān)鸠真,因此移植性很好在不同的平臺上,相反龄毡,c和c++需要針對不同的處理器選擇最高效的整型吠卷,這樣就很有可能造成在32位處理器上運行很好的程序在16位系統(tǒng)上運行卻發(fā)生整數(shù)溢出。


6.十六進制數(shù)值有一個前綴0x或0X(0xCAFE),八進制有一個前綴0沦零,,010對應(yīng)八進制的8祭隔,很顯然,八進制表示容易混淆路操,建議最好不要使用八進制常熟疾渴。


7.從Java7開始,加上前綴0b或者0B就可以寫二進制數(shù)屯仗,如(0b1001就是9)同樣也是Java7之后搞坝,可以為數(shù)字字面量加下劃線,如用1_000_000表示一百萬魁袜,下劃線未來讓人易讀桩撮,Java編譯器會去除下劃線。


8.Java沒有任何無符號(unsigned)形式的整型峰弹。


9.double表示的數(shù)值精度是float類型的兩倍(有人稱為雙精度數(shù)值)店量,絕大部分程序使用double,很多情況下float滿足不了需求鞠呈。


10.用于表示溢出和出錯情況的三個特殊的浮點數(shù)值:正無窮大融师、負(fù)無窮大、NaN(不是一個數(shù)字)
一個正整數(shù)除以0的結(jié)果為正無窮大蚁吝,計算0/0或者負(fù)數(shù)的平方根結(jié)果為 NaN旱爆。


11.浮點數(shù)值不適合用于無法接受舍入誤差的金融計算中。什么個意思呢窘茁?system.out.println(2.0-1.9)打印結(jié)果并不是0.1疼鸟,而是0.8999999,(no picture you say a Jb )庙曙,原因是浮點數(shù)值采用二進制系統(tǒng)表示空镜,而在二進制系統(tǒng)中無法精確表示1/10,也就是0.1,,這就好比十進制無法表示3/10一樣吴攒,是我們習(xí)慣十進制而已张抄,2.0-1.8結(jié)果就是0.2了,如果在數(shù)值計算中不允許有任何舍入誤差就應(yīng)該使用BigDecimal類洼怔,之后會有提到署惯。


12.char類型表示單個字符。不過镣隶,現(xiàn)在情況有所變化极谊,如今有些Unicode字符一個char滿足不了,需要兩個char安岂。
(這里解釋下原因:1991年發(fā)布了Unicode1.0轻猖,當(dāng)時僅占用不到65535代碼值的一半,所以設(shè)計Java時就決定采用16位的Unicode編碼域那,然而咙边,經(jīng)過一段時間,增加了大量漢語次员、日語败许、和韓語的表意文字,Unicode超過了65535,16位的char已經(jīng)滿足不了需求淑蔚。)
‘A’是編碼值位65所對應(yīng)的字符常量市殷。它與“A”不同,“A”是包含一個字符A的字符串
13.強烈建議程序中不要使用char刹衫,最好將字符串作為抽象數(shù)據(jù)類型處理醋寝。


14.整型值和布爾類型不能相互轉(zhuǎn)化。


15.在C++中绪妹,數(shù)值甚至指針可以代替boolean具帮。值0相當(dāng)于false器钟,1為true,Java中不是這樣伏伯,下面這句話:
if(x=0)
在C++中這個測試可以編譯運行蝇摸,其結(jié)果總是false婶肩,而在java中,這個測試不能通過編譯貌夕,原因x=0不能轉(zhuǎn)化boolean律歼。


16.變量名對大小寫敏感,如hireday和hireDay是兩個不同變量名啡专,許多程序員將變量名命名為類型名如 Box box;
還有程序員喜歡在前面加a险毁,如Box aBox;


17.在Java中變量的聲明盡可能地靠近變量第一次使用的地方畔况,是一種良好的編程風(fēng)格跷跪,Java中不區(qū)分變量的聲明與定義葛菇。


18.final關(guān)鍵字表示這個變量只能被賦值一次眯停,一旦被賦值之后就不能更改了,習(xí)慣上九府,常量名使用全大寫,可以使用static final設(shè)置一個類常量被一個類的多個方法使用煌妈。


19.整數(shù)被0除會產(chǎn)生異常,浮點數(shù)被0除將會得到無窮大或者NaN族操。


20.強制類型轉(zhuǎn)化是社區(qū)小數(shù)點部分,并不是舍入枷莉,如果想對浮點型進行舍入運算冒掌,需要Math.round(),Math.round(4.5)結(jié)果為5,Math.round(4.4)結(jié)果為4,當(dāng)調(diào)用round時候,仍然需要強轉(zhuǎn)氧急,round返回的類型是long類型。


21.如果運算符得到一個值钉寝,其類型與左側(cè)操作數(shù)類型不同,就會發(fā)生強制類型轉(zhuǎn)換。如一個int x,
x+=3.5墓臭;是合法的,將把x設(shè)置為(int)(x+3.5)妙痹,結(jié)果為4
x=x+3.5琳轿;會報錯挪哄,提示你進行強轉(zhuǎn)颠毙。


22.如果n是一個整數(shù)變量刻两,而且用二進制表示的n從右邊數(shù)第4位位1霎奢,用位運算符則:
int x=(n&0b1000)/0b1000;會返回1,否則返回0。


23.枚舉類型:enum Size {SMALL创译,LARGE抵知,EXTRA_LARGE}:Size s=Size.LARGE;


24.如果需要把多個字符串放在一起,用一個定界符分割软族,可以使用靜態(tài)join方法:
String all=String.join(“/”刷喜,“S”,“M”立砸,“L”掖疮,“XL”);結(jié)果為:“S/M/L/XL”


25.要檢測兩個字符串是否相等,不區(qū)分大小寫颗祝,可以使用equalsIgnoreCase方法浊闪∧詹迹“Hello”.equalsIgnoreCase(“hello”)


26.要檢查一個字符串既不為空串也不是null,if(str搁宾!=null&&str.length()折汞!=0)


27.StringBuffer和StringBuilder,執(zhí)行速度方面:StringBuilder>Buffer
Builder是非線程安全的盖腿,Buffer是線程安全的爽待。 單線程下建議用Builder,多線程下用Buffer翩腐。一般用builder堕伪。其中
setCharAt來修改某個單元。


28.Scanner方法實現(xiàn)輸入操作栗菜,Scanner in=new Scanner(System.in);
String name=in.nextline();String firstName=in.next();int n=in.nextInt();
其中欠雌,使用nextline方法是因為輸入行中有可能包含空格,要想讀取一個單純(以空格作為分隔符),要用next()疙筹;


29.在循環(huán)中富俄,檢測兩個浮點數(shù)是否相等需要格外小心,
for(double x=0;x!=10;x+=0.1 )...可能永遠(yuǎn)不會結(jié)束而咆,由于舍入的誤差霍比,因為0.1無法精確地用二進制表示,x將從9.99999到10.09999998.


30.如果基本的整數(shù)和浮點數(shù)精度不能滿足要求暴备,可以使用BigInteger和BigDecimal兩個類處理任意長度的數(shù)字序列整數(shù)和浮點數(shù)的數(shù)值悠瞬。
使用靜態(tài)的valueOf方法可以將普通數(shù)值轉(zhuǎn)化為大數(shù)值:BigInteger a=BigInteger.valueOf(100);
遺憾的是不能使用算數(shù)運算符,只能使用類中的add和multiply方法涯捻。BigInteger c=a.add(b);//c=a+b;? ? ?


31.在java中浅妆,允許將一個數(shù)組變量拷貝給另一個數(shù)組變量,這時障癌,兩個變量引用同一個數(shù)組凌外。
int[] a=b;
a[5]=12;這時b[5]也等于12
如果希望將一個數(shù)組的所有值拷貝到另一個數(shù)組,使用copyof方法涛浙、第一個參數(shù)是要拷貝的數(shù)組康辑,第二個是新數(shù)組的大小,如果沒占滿轿亮,將多余的元素唄賦值為0疮薇;布爾則是false。


32.要想對數(shù)值型數(shù)組排序我注,可以使用arrays.sort方法按咒,使用的是快速排序。


33.要想快速打印一個二維數(shù)組的數(shù)據(jù)元素列表仓手,可以使用Arrays.deepToString()胖齐;方法


34.面向?qū)ο笾幸J(rèn)識到,一個對象變量并沒有實際包含一個對象嗽冒,而僅僅引用一個對象呀伙。


35.如果將域定義為static,每個類中只有一個這樣的域添坊,即使沒有該類的對象剿另,靜態(tài)屬性static修飾的屬性也是存在的,它屬于類贬蛙,不屬于對象雨女。


36.如果在編寫一個類時沒有編寫構(gòu)造器,那么系統(tǒng)會默認(rèn)提供一個無參構(gòu)造器阳准,將所有的實例設(shè)置為默認(rèn)值氛堕,0,false野蝇,對象都是null讼稚。如果類中提供了至少一個構(gòu)造器,但是沒有提供無參構(gòu)造器绕沈,則在構(gòu)造對象時會視為不合法锐想。


37.如果構(gòu)造器的第一個語句如this(),這個構(gòu)造器將調(diào)用同一個類的另一個構(gòu)造器(相當(dāng)于另一個重載的構(gòu)造器)乍狐。


38.在覆蓋一個方法時候赠摇,子類方法不能低于超類方法的可見性,如果超類是public浅蚪,子類必須也是public藕帜。


39.為了提高程序的清晰度,包含一個或者多個抽象方法的類本身必須被聲明是抽象的惜傲。除了抽象方法外耘戚,抽象類還可以包含具體數(shù)據(jù)和具體方法。類即使不含抽象方法操漠,也可以聲明為抽象類收津。抽象類不可以被實例化,但可以創(chuàng)建一個具體的子類(如person是抽象類浊伙,可以創(chuàng)建具體的studengt類)


40.在Java中撞秋,只有基本類型不是對象,例如數(shù)值嚣鄙、字符和布爾類型都不是對象吻贿,不管是對象數(shù)組還是基本類型的數(shù)組都是集成object類。


41.關(guān)于字符串的散列碼(hashcode)哑子,hashCode是由對象導(dǎo)出的舅列,如果不是對象(基本類型)是不會有hashCode的肌割。
String s="Ok";
StringBuilder sb=new StringBuilder(s)帐要;
System.out.println(s.hashCode()+sb.hashCode())把敞;//s的散列碼2556,sb是20526976
String t=new Striing(“Ok”)榨惠;
StringBuilder tb=new StringBuilder(t)奋早;
System.out.println(t.hashCode()+tb.hashCode());//t的散列碼2556赠橙,sb是20527144
s和t擁有相同的散列碼耽装,是因為字符串的散列碼是由內(nèi)容導(dǎo)出的,而字符串緩沖的sb和tb卻不一樣期揪,是因為在StringBuilder類中沒有定義hashCode方法掉奄,它的散列碼是有object類的默認(rèn)hashCode導(dǎo)出的對象存儲地址。


42.數(shù)組列表的容量和數(shù)組的大小有一個非常重要的區(qū)別凤薛。
數(shù)組列表:new ArrayList<>(100)? 是有保存100個元素的能力挥萌。size=0
數(shù)組:new Employee[100] 是分配100個元素的存儲空間,有100個固定空位置可以使用枉侧,size=100引瀑。
一旦數(shù)組列表的大小不再發(fā)生變化,就可以調(diào)用trimToSize方法將存儲區(qū)域的大小調(diào)整為當(dāng)前元素所需的存儲空間數(shù)目榨馁,垃圾回收器將回收多余的存儲空間憨栽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市翼虫,隨后出現(xiàn)的幾起案子屑柔,更是在濱河造成了極大的恐慌,老刑警劉巖珍剑,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掸宛,死亡現(xiàn)場離奇詭異,居然都是意外死亡招拙,警方通過查閱死者的電腦和手機唧瘾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來别凤,“玉大人饰序,你說我怎么就攤上這事」婺模” “怎么了求豫?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我蝠嘉,道長最疆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任蚤告,我火速辦了婚禮努酸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罩缴。我一直安慰自己,他們只是感情好层扶,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布箫章。 她就那樣靜靜地躺著,像睡著了一般镜会。 火紅的嫁衣襯著肌膚如雪檬寂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天戳表,我揣著相機與錄音桶至,去河邊找鬼。 笑死匾旭,一個胖子當(dāng)著我的面吹牛镣屹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播价涝,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼女蜈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了色瘩?” 一聲冷哼從身側(cè)響起伪窖,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎居兆,沒想到半個月后覆山,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡泥栖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年簇宽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吧享。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡晦毙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耙蔑,到底是詐尸還是另有隱情见妒,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站须揣,受9級特大地震影響盐股,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耻卡,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一疯汁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卵酪,春花似錦幌蚊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘸羡,卻和暖如春漩仙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背犹赖。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工队他, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人峻村。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓麸折,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粘昨。 傳聞我的和親對象是個殘疾皇子磕谅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354