第一篇:java總結(jié)
調(diào)用父類(lèi)構(gòu)造方法
? 在子類(lèi)的構(gòu)造方法中可使用super(argument_list)語(yǔ)句調(diào)用父類(lèi)的構(gòu)造方法
? 如果子類(lèi)的構(gòu)造方法中沒(méi)有顯示地調(diào)用父類(lèi)構(gòu)造方法,也沒(méi)有使用this關(guān)鍵字調(diào)用重載的其它構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用父類(lèi)無(wú)參數(shù)的構(gòu)造方法
? 如果子類(lèi)構(gòu)造方法中既未顯式調(diào)用父類(lèi)構(gòu)造方法,而父類(lèi)中又沒(méi)有無(wú)參的構(gòu)造方法,則編譯出錯(cuò)
1public class Person {
3private String name;
4private int age;private Date birthDate;
7public Person(String name, int age, Date d){ 8this.name = name;
9this.age = age;
10this.birthDate = d;
11}
12public Person(String name, int age){ 13this(name, age, null);
14}
15public Person(String name, Date d){ 16this(name, 30, d);
17}
18public Person(String name){
19this(name, 30);}
21// ……
22}
1public class Student extends Person {
2private String school;
4public Student(String name, int age, String s){ 5super(name, age);
6school = s;
7}
8public Student(String name, String s){
9super(name);
10school = s;
11}
12public Student(String s){ // 編譯出錯(cuò): no super()13school = s;
14}
15}
對(duì)象構(gòu)造和初始化細(xì)節(jié)
? 分配存儲(chǔ)空間并進(jìn)行默認(rèn)的初始化
? 按下述步驟初始化實(shí)例變量
1.綁定構(gòu)造方法參數(shù)
2.如有this()調(diào)用,則調(diào)用相應(yīng)的重載構(gòu)造方法,然后跳轉(zhuǎn)到步驟5
3.顯式或隱式追溯調(diào)用父類(lèi)的構(gòu)造方法(Object類(lèi)除外)
4.進(jìn)行實(shí)例變量的顯式初始化操作
5.執(zhí)行當(dāng)前構(gòu)造方法的方法體
==操作符與equals方法
==操作符與equals方法的區(qū)別:
? 引用類(lèi)型比較引用;基本類(lèi)型比較值;
? equals()方法只能比較引用類(lèi)型,“==”可以比較引用類(lèi)型及基本類(lèi)型;
? 特例:當(dāng)用equals()方法進(jìn)行比較時(shí),對(duì)類(lèi)File、String、Date及封裝類(lèi)(Wrapper Class)來(lái)說(shuō),是比較類(lèi)型及內(nèi)容而不考慮引用的是否是同一個(gè)實(shí)例;
? 用“==”進(jìn)行比較時(shí),符號(hào)兩邊的數(shù)據(jù)類(lèi)型必須一致(可自動(dòng)轉(zhuǎn)換的基本數(shù)據(jù)類(lèi)型除外),否則編譯出錯(cuò);
由裝箱引發(fā)的——Integer比較的來(lái)龍去脈
前置知識(shí): 眾所周之,java是保留了int,char等基本數(shù)據(jù)類(lèi)型的,也就是說(shuō)int類(lèi)型的并不是對(duì)象,然而有些方法卻需要object 類(lèi)型的變量,所以java使用了裝箱機(jī)制,我們可一自豪的這樣聲明一個(gè)整型變量:Integer a = new Integer(10);那么整型的a也就是對(duì)象了,那這句是什么意思呢:Integer a= 10;java中可以這樣聲明一個(gè)對(duì)象嗎?當(dāng)然不是,從jdk1.5后,java實(shí)現(xiàn)了自動(dòng)裝箱,也就是自動(dòng)將Integer a =10 中的int類(lèi)型的10轉(zhuǎn)化為了 Integer類(lèi)型。好,有了前面的只是我們且先看一個(gè)題目:
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println(a==b);
System.out.println(c==d);
答案是什么呢? 如果您回答true,false,那么很遺憾的告訴你,哈哈,其實(shí)你答對(duì)了!!
那我們暈了就相差1的兩個(gè)數(shù)為啥走向了“反目成仇”的地步呢?憑啥127等于127,我128就不等于128呢?且聽(tīng)我慢慢道來(lái),Integer a =127,Integer a=128。
127,128應(yīng)該不會(huì)造成什么差異吧,難道是自動(dòng)裝箱的過(guò)程有貓膩?找下源碼看看:
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128)+ 127 + 1];static {
for(int i = 0;i < cache.length;i++)
cache[i] = new Integer(i128);
}
這是用一個(gè)for循環(huán)對(duì)數(shù)組cache賦值,cache[255] = new Integer(255-128),也就是newl一個(gè)Integer(127),并把引用賦值給cache[255],好了,然后是Integer b= 127,流程基本一樣,最后又到了cache[255] = new Integer(255-128),這一句,那我們迷糊了,這不是又new了一個(gè)對(duì)象127嗎,然后把引用賦值給cache[255],我們比較這兩個(gè)引用(前面聲明a的時(shí)候也有一個(gè)),由于是不同的地址,所以肯定不會(huì)相等,應(yīng)該返回false?。『呛牵@么想你就錯(cuò)了,請(qǐng)注意看for語(yǔ)句給cache[i]初始化的時(shí)候外面還一個(gè){}呢,{}前面一個(gè)大大的static關(guān)鍵字大咧咧的杵在哪呢,對(duì)靜態(tài)的,那么我們就可以回想下static有什么特性了,只能初始化一次,在對(duì)象間共享,也就是不同的對(duì)象共享同一個(gè)static數(shù)據(jù),那么當(dāng)我們Integer b = 127的時(shí)候,并沒(méi)有new出一個(gè)新對(duì)象
來(lái),而是共享了a這個(gè)對(duì)象的引用,記住,他們共享了同一個(gè)引用!!,那么我們進(jìn)行比較a==b時(shí),由于是同一個(gè)對(duì)象的引用(她們?cè)诙阎械牡刂废嗤钱?dāng)然返回true了!!
然后我們?cè)诳碔nteger c = 128;Integer d = 128;這兩句?,F(xiàn)在不用我說(shuō)就應(yīng)該能明白了吧,當(dāng)數(shù)據(jù)不再-128到127之間時(shí),是不執(zhí)行return
IntegerCache.cache[i + offset];這句的,也就是不會(huì)返回一個(gè)static的引用,而是執(zhí)行了return new Integer(i);于是當(dāng) Integer d = 128 時(shí),又會(huì)重新返回一個(gè)引用,兩個(gè)不同的引用
在做c==d 的比較時(shí)當(dāng)然返回false了!
下面附上本程序的字節(jié)碼以供喜歡底層的讀者參考:
Compiled from “CompareInteger.java”
public class CompareInteger extends java.lang.Object{
public CompareInteger();
Code:
0:aload_0
1:invokespecial#1;//Method java/lang/Object.“
public static void main(java.lang.String[]);
Code:
0:bipush 127
2:invokestatic#2;//Method
java/lang/Integer.valueOf:(I)Ljava/lang/Int
eger;
5:astore_1
6:bipush 127
8:invokestatic#2;//Method
java/lang/Integer.valueOf:(I)Ljava/lang/Int
eger;
11: astore_2
12: sipush 128
15: invokestatic#2;//Method
java/lang/Integer.valueOf:(I)Ljava/lang/Int
eger;
18: astore_3
19: sipush 128
22: invokestatic#2;//Method
java/lang/Integer.valueOf:(I)Ljava/lang/Int
eger;
25: astore 4
27: getstatic#3;//Field
java/lang/System.out:Ljava/io/PrintStream;
30: aload_1
31: aload_2
32: if_acmpne39
35: iconst_1
36: goto40
39: iconst_0
40: invokevirtual#4;//Method java/io/PrintStream.println:(Z)V43: getstatic#3;//Field
java/lang/System.out:Ljava/io/PrintStream;
46: aload_3
47: aload4
49: if_acmpne56
52: iconst_1
53: goto57
56: iconst_0
57: invokevirtual#4;//Method java/io/PrintStream.println:(Z)V60: return
}
評(píng)論:呵呵,這么想你就錯(cuò)了,請(qǐng)注意看for語(yǔ)句給cache[i]初始化的時(shí)候外面還一個(gè){}呢,{}前面一個(gè)大大的static關(guān)鍵字大咧咧的杵在哪呢,對(duì)靜態(tài)的,那么我們就可以回想下static有什么特性了,只能初始化一次,在對(duì)象間共享,也就是不同的對(duì)象共享同一個(gè)static數(shù)據(jù),那么當(dāng)我們Integer b = 127的時(shí)候,并沒(méi)有new出一個(gè)新對(duì)象來(lái),而是共享了a這個(gè)對(duì)象的引用,記住,他們共享了同一個(gè)引用??!
呵呵,博主我被你這句話(huà)小小的誤導(dǎo)了一下,其實(shí)你這里說(shuō)的原理沒(méi)錯(cuò),但是把位置說(shuō)錯(cuò)了,這段代碼只是初始化cache:
static {
for(int i = 0;i < cache.length;i++)
cache[i] = new Integer(i-128);
}
但真正讓cache[i]為static變量的是這句代碼:
static final Integer cache[] = new Integer[-(-128)+ 127 + 1];
第二篇:JAVA總結(jié)專(zhuān)題
在這忙忙碌碌的這段時(shí)間里,經(jīng)過(guò)老師的輔導(dǎo),迅速的將一點(diǎn)沒(méi)有學(xué)的JAVA基礎(chǔ)搞定了!有了基礎(chǔ)學(xué)習(xí)還是好,萬(wàn)事開(kāi)頭難這句話(huà)說(shuō)的太對(duì)了,學(xué)計(jì)算機(jī)語(yǔ)言我覺(jué)得記憶好的方法就是多打代碼,課前預(yù)習(xí),課堂上認(rèn)真聽(tīng)講,把現(xiàn)學(xué)的方法把以前所做的作業(yè)用最簡(jiǎn)便的方法再一次鞏固,創(chuàng)新最重要,在后續(xù)的學(xué)習(xí)中,得要加倍努力學(xué)習(xí)。
其實(shí)學(xué)java有不懂,要先自己思考。想清楚這句代碼是什么意思。為什么要寫(xiě)在這,等等之類(lèi)的。等你真的搞不明白的時(shí)候,就一定要向老師咨詢(xún),不要感到有什么丟人的。因?yàn)椴粫?huì)是很正常的事。并不是每個(gè)人都是天才,一學(xué)就會(huì),一學(xué)就能運(yùn)用自如的。學(xué)java有一點(diǎn)是非常重要的,就是練習(xí)。一段代碼要不停的敲,多敲幾遍,尤其是自己不熟悉或者不熟練的代碼,更要敲。不要感覺(jué)到厭煩,其實(shí)我感覺(jué)敲代碼挺好玩的,并不是一件很枯燥的事。
老師平常布置的課后上機(jī)練習(xí)題一定要做,課后的練習(xí)題能夠讓你把新學(xué)到的知識(shí)鞏固一遍,能夠加深記憶,不會(huì)讓你在以后做題的時(shí)候感到?jīng)]一點(diǎn)思路。
當(dāng)感覺(jué)到不會(huì)的時(shí)候,千萬(wàn)不要?dú)怵H,因?yàn)檫@很正常,現(xiàn)在的學(xué)習(xí)就是為了培養(yǎng)你有一個(gè)邏輯思維,為了以后開(kāi)發(fā)軟件的時(shí)候有個(gè)完整,清晰的思路。
其實(shí),總體來(lái)說(shuō)。學(xué)習(xí)java很快樂(lè)。尤其是當(dāng)你遇到一道自己不會(huì)的題,然后,又通過(guò)自己的努力解決了,那時(shí)候,那種心情不是用言語(yǔ)來(lái)表達(dá)的。就好像你遇到一個(gè)數(shù)學(xué)難題,自己解決了之后那種成就感一樣。
學(xué)java的時(shí)候一定要,放松心情,輕輕松松的來(lái)學(xué),隨時(shí)讓自己快樂(lè)著,這樣能夠讓你能夠更快的接受java,千萬(wàn)不要有什么心理負(fù)擔(dān),因?yàn)閖ava的特點(diǎn)之一就是--簡(jiǎn)單易懂。只要自己努力到了,就一定能夠?qū)W好java。
學(xué)完了JAVA今天我們用項(xiàng)目案例:迷你DVD管理器來(lái)鞏固了我們所學(xué)的所有內(nèi)容,通過(guò)這項(xiàng)目的操練,首先,1、項(xiàng)目用到了會(huì)使用順序、分支、循環(huán)、跳轉(zhuǎn)語(yǔ)句編寫(xiě)程序,2、要會(huì)使用數(shù)組、操作字符串,3、會(huì)使用帶參的方法;
4、會(huì)定義類(lèi)、創(chuàng)建和使用對(duì)象,看到這些腦袋里一片迷茫??!不知道怎樣寫(xiě),然后想到早寫(xiě)晚寫(xiě)都一樣,就照著書(shū)上寫(xiě)起來(lái)了,到現(xiàn)在還是弄不懂的就是那個(gè)對(duì)象數(shù)組,不知道怎樣去理解,抽象的把我抽暈了,有望老師來(lái)給我們補(bǔ)補(bǔ)這一章,在實(shí)現(xiàn)DVD的業(yè)務(wù)處理時(shí),計(jì)算時(shí)差還是不懂,照著書(shū)上打了一遍,可還是得不到想要的結(jié)果,經(jīng)過(guò)網(wǎng)上的搜尋與老師講解,現(xiàn)在已略懂一二了,在做完這項(xiàng)目后,真不知道當(dāng)時(shí)是怎樣敲出來(lái)的,難道這就是所說(shuō)的靈感!感覺(jué)很高興,現(xiàn)在已習(xí)慣了代碼報(bào)錯(cuò),其實(shí)代碼報(bào)錯(cuò)是一件值得鼓勵(lì)的事,因?yàn)闆](méi)有錯(cuò)就覺(jué)得自己什么都懂了,在學(xué)習(xí)中相信每一個(gè)人都遇到過(guò)挫折吧!但一定要想方法戰(zhàn)勝挫折!我的戰(zhàn)勝挫折方法就是不懂思考后還不懂就問(wèn),懂了以后就筆記本記下當(dāng)時(shí)的解決方案!學(xué)習(xí)剛開(kāi)始!后面的路很長(zhǎng),慢慢的去磨煉了!總結(jié)完畢!
第三篇:Java總結(jié)
Java實(shí)驗(yàn)
1.調(diào)試HelloWorld程序
2.this,super,get ,set,把課本90頁(yè)程序4.7中的name改成私有變量
3.繼承,重寫(xiě),父類(lèi)引用指向子類(lèi)對(duì)象
4.驗(yàn)證數(shù)組Arrays類(lèi)和Collection類(lèi)
5.編寫(xiě)一個(gè)自己的異常類(lèi)并捕獲之。
6.編寫(xiě)一個(gè)類(lèi),將該類(lèi)的幾個(gè)對(duì)象裝入TreeSet容器中,并將該容器的內(nèi)容通過(guò)輸出流寫(xiě)入文件中。
前三章重點(diǎn)
0.java的數(shù)據(jù)類(lèi)型:四類(lèi)八種-(1)布爾類(lèi)型Boolean;(2)字符類(lèi)型char;(3)整數(shù)byte,short,int,long;(4)浮點(diǎn)類(lèi)型:float,double;1.面向?qū)ο蟮?個(gè)基本特征:封裝,繼承,多態(tài)。
2.構(gòu)造方法和普通方法的區(qū)別:對(duì)構(gòu)造方法而言,它有以下特性---(1)方法名必須與要?jiǎng)?chuàng)建對(duì)象的類(lèi)名相同。(2)不允許聲明返回類(lèi)型,即使聲明為void也不被允許。
3.this關(guān)鍵字:是一個(gè)引用,this引用指向的是其本身所在方法的當(dāng)前對(duì)象。this的使用方法:(1)調(diào)用成員變量;(2)可以用this()調(diào)用其他構(gòu)造函數(shù)。
4.java中只對(duì)類(lèi)成員變量進(jìn)行自動(dòng)初始化,而方法內(nèi)部的局部變量在使用前必須手動(dòng)初始化。
5.static 關(guān)鍵字:可用來(lái)修飾類(lèi)的成員變量和成員方法,需要注意兩點(diǎn)--(1)靜態(tài)方法不能調(diào)用類(lèi)的非靜態(tài)方法,不能訪(fǎng)問(wèn)類(lèi)的非靜態(tài)變量。(2)靜態(tài)方法和靜態(tài)變量(非私有的)可以有兩種調(diào)用方式,一是實(shí)例對(duì)象調(diào)用,二是類(lèi)名直接調(diào)用。
6.類(lèi)成員訪(fǎng)問(wèn)控制修飾符public、private、default(可不寫(xiě),即缺省狀態(tài))、protected的使用:public-公用的;private-私有的,只在定義它的類(lèi)內(nèi)部使用;default-可以被同一包中的類(lèi)訪(fǎng)問(wèn);protected-既可以被同一包中的類(lèi)訪(fǎng)問(wèn),也可以被不在同一包中的子類(lèi)訪(fǎng)問(wèn)。
7.方法的重載:指方法名相同,而方法的參數(shù)列表不相同。參數(shù)列表不同有三層意思:(1)參數(shù)類(lèi)型不同。(2)參數(shù)順序不同。(3)參數(shù)個(gè)數(shù)不同。另外需注意,在同一個(gè)類(lèi)中,當(dāng)方法名和參數(shù)列表都相同時(shí),訪(fǎng)問(wèn)控制修飾符或方法返回類(lèi)型不相同并不是方法的重載,而且這種情況在java中是不被允許的。
第四五章重點(diǎn)
1.繼承:需使用關(guān)鍵字extends.在使用繼承時(shí)需注意--(1)每個(gè)子類(lèi)只能定義一個(gè)超類(lèi)(父類(lèi)),即extends后面應(yīng)且僅應(yīng)跟一個(gè)類(lèi)名作為該類(lèi)的父類(lèi)。(2)父類(lèi)中的私有屬性和私有方法不能被繼承。
2.方法的重寫(xiě):即子類(lèi)對(duì)超類(lèi)中的方法保持方法名、返回類(lèi)型和參數(shù)列表不變,重寫(xiě)了方法體,使子類(lèi)和超類(lèi)完成不同的工作。重寫(xiě)需注意下面幾個(gè)關(guān)鍵點(diǎn):(1)超類(lèi)中的私有方法不能被重寫(xiě)。(2)訪(fǎng)問(wèn)限制符強(qiáng)度由低到高依次是:public、protected、default、private,在重寫(xiě)過(guò)程中,如果子類(lèi)和父類(lèi)中方法的返回值、方法名及方法的參數(shù)列表都相同,這時(shí),要求子類(lèi)中該方法的訪(fǎng)問(wèn)限制符強(qiáng)度不能超過(guò)父類(lèi)的。即如果父類(lèi)中為public時(shí),子類(lèi)也只能為public,而不能是余下的三種。
3.重載(overload)和覆蓋(override)的區(qū)別:(1)重載—發(fā)生在一個(gè)類(lèi)的內(nèi)部或子類(lèi)與父類(lèi)之間,要求方法名相同而參數(shù)列表不一樣。(2)覆蓋—只能發(fā)生在繼承過(guò)程中,要求子類(lèi)方法的返回類(lèi)型,方法名和參數(shù)列表同父類(lèi)的都相同,而方法體不一樣。
4.構(gòu)造器的調(diào)用順序:先祖先,再客人,最后自己。
5.多態(tài):指在類(lèi)繼承中子類(lèi)和父類(lèi)中可以有同名但意義或?qū)崿F(xiàn)方式不同的屬性和方法。分為:覆蓋和重載。多態(tài)的優(yōu)點(diǎn):因?yàn)槎鄳B(tài),可以在程序中對(duì)類(lèi)進(jìn)行擴(kuò)展,而不需改變那些操作基類(lèi)接口的方法。
6.動(dòng)態(tài)綁定:指在代碼執(zhí)行期間,判斷所引用對(duì)象的實(shí)際類(lèi)型,根據(jù)其實(shí)際類(lèi)型調(diào)用相應(yīng)方法。動(dòng)態(tài)綁定存在的三個(gè)必要條件--(1)要有繼承;(2)要有重寫(xiě)(覆蓋);(3)父類(lèi)引用指向子類(lèi)對(duì)象(向上轉(zhuǎn)型)。
7.Object中常用的方法總結(jié):toString();wait();equals();notify();notifyAll();hashCode();getClass();clone();finalize();(呵呵,盡可能記幾個(gè),以防老師讓咱們列舉)注:java中Object類(lèi)是所有類(lèi)的父類(lèi),即java中所有的類(lèi)都有上述9種方法。
8.對(duì)象的比較:注意關(guān)鍵字instanceof的使用。
9.抽象類(lèi):
抽象方法—用關(guān)鍵字abstract修飾的方法,該方法只需方法的聲明,而不需方法的實(shí)現(xiàn)(即無(wú)方法體)。
抽象類(lèi)——至少包含一個(gè)抽象方法的類(lèi),也用abstract關(guān)鍵字聲明。(注:(1)抽象類(lèi)中可以有一些具體方法。(2)抽象類(lèi)不能實(shí)例化。(3)子類(lèi)繼承抽象類(lèi)必須實(shí)現(xiàn)其抽象方法。)
10.接口:
(1)可以看成是高度抽象的抽象類(lèi),但是接口不是類(lèi)。
(2)用關(guān)鍵字interface來(lái)聲明接口,用關(guān)鍵字imlpements來(lái)實(shí)現(xiàn)接口。
(3)接口不能有具體方法,不能有實(shí)例數(shù)據(jù),但可以定義常量。
(4)實(shí)現(xiàn)接口的非抽象類(lèi)必須實(shí)現(xiàn)接口的所有方法。
(5)每個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,這些接口用逗號(hào)隔開(kāi),同時(shí),一個(gè)接口可以被多個(gè)類(lèi)實(shí)現(xiàn)。
第六章:重點(diǎn)看一下實(shí)驗(yàn)四
1.容器——Collection(接口)和Map(接口).Collection——Set(接口)和List(接口)。其中,List必須保持元素的特定順序,常見(jiàn)的實(shí)現(xiàn)類(lèi)有ArrayList和LinkedList;Set不能有重復(fù)元素,常見(jiàn)的實(shí)現(xiàn)類(lèi)有HashSet和TreeSet。
Map——一組成對(duì)的“鍵值對(duì)”對(duì)象,即其元素是成對(duì)的對(duì)象,常見(jiàn)的實(shí)現(xiàn)類(lèi)有HashMap和TreeMap。
第七章 1.異常類(lèi)的根類(lèi)是Throwable類(lèi),它的兩個(gè)直接子類(lèi)是Error類(lèi)和Exception類(lèi)。
2.異常中常用的5個(gè)關(guān)鍵字為:try,catch,finally,throw,throws.其中,try和catch:用于捕獲異常;finally:無(wú)論try塊中的異常是否拋出,finally中的代碼塊總能被執(zhí)行;throw:拋出異常;throws:聲明異常。
3.“未被檢查的異常(Unchecked Exceptions)”和“受檢查的異常(Checked Exceptions)”——
Unchecked Exceptions :編譯器不檢查方法是否處理或拋出的異常,即不做處理,編譯時(shí)不報(bào)錯(cuò)。
Checked Exceptions:受編譯器檢查的異常,即不做處理編譯時(shí)通不過(guò)。
4.常見(jiàn)的幾種Checked Exceptions:ClassNotFoundExceptionIOExceptionInterruptedExceptionFileNotFoundException.(盡可能的記幾個(gè)吧,以防不測(cè))第八章
1.流--字節(jié)流和字符流;
流--節(jié)點(diǎn)流和處理流。
2.所有的輸入流都是從抽象類(lèi)InputStream和Reader繼承而來(lái)。所有輸出流都是從抽象類(lèi)OutputStream和Writer繼承而來(lái)。3.字節(jié)流:InputStream和OutputStream;字符流:Reader和Writer;
4.節(jié)點(diǎn)流:直接與文件等底層打交道,如FileInputStreamFileOutputStreamFileReaderFileWriter.處理流:相當(dāng)于包裝流,套在節(jié)點(diǎn)流上,方便數(shù)據(jù)處理。相關(guān)一些用法,具體參考最后一次實(shí)驗(yàn)。
第四篇:Java個(gè)人總結(jié)參考
1、Java中取消指針運(yùn)算防止了內(nèi)存泄露的可能性。Java中的引用其實(shí)就是指針。JAVA語(yǔ)言不支持C++友元方法或友類(lèi)。
2、編寫(xiě)完java源代碼后,首先將其編譯為一種中間狀態(tài)字的字節(jié)碼,然后Java虛擬機(jī)上的解釋器來(lái)解釋執(zhí)行,“一次編程,到處運(yùn)行”,Java是文本文件,編輯代碼。
3、Window系統(tǒng)對(duì)于DOS命令中字符大小寫(xiě)不敏感;Java編譯器和解釋器對(duì)大小寫(xiě)敏感;保存源文件時(shí),文件名一定要和源文件中公開(kāi)類(lèi)的類(lèi)名一致。
4、習(xí)慣上,變量名以小寫(xiě)字母開(kāi)頭,類(lèi)名以大寫(xiě)字母開(kāi)頭,常量名中所有的字符均大寫(xiě)。
5、final常量:初始化后不再重新賦值,在類(lèi)繼承時(shí)不允許子類(lèi)覆蓋。
6、類(lèi)實(shí)例化就成為對(duì)象。
7、類(lèi)繼承:繼承父類(lèi)的屬性和方法(關(guān)鍵字extends)
定義抽象類(lèi):關(guān)鍵字abstract
類(lèi)聲明:P62
類(lèi)成員:P63
8、Java接口中聲明了一組抽象方法,它構(gòu)成了實(shí)現(xiàn)該接口的不同類(lèi)共同遵守的約定。在類(lèi)的定義中可以用關(guān)鍵字implements來(lái)指定其實(shí)現(xiàn)的接口。
9、Java接口與類(lèi)的重要區(qū)別:Java接口中不存在構(gòu)建器。
10、包的作用(P105);Java中類(lèi)的訪(fǎng)問(wèn)控制符(P77);操作符優(yōu)先級(jí)(P38)
11、包的命名:網(wǎng)絡(luò)域名的逆序
包的使用:關(guān)鍵字import
12、異常處理(P119.120.125):FileNotFoundException:代表文件未找到;SQLException:代表有關(guān)JDBC的異常;NullPointerException:表示試圖引用null對(duì)象的方法或?qū)傩裕籌ndexOutOfBoundException:表示數(shù)組越界的異常。
13、框架的默認(rèn)關(guān)閉程序:f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
14、setIconImage用于設(shè)定框架的圖標(biāo);setLocation用于設(shè)定框架在屏幕上的位置。
15、取得框架的內(nèi)容窗格:Container contentPane=f.getContnetPane();
16、面板的默認(rèn)布局管理器是FlowLayout。setBownds(x,y,w,h)設(shè)置x,y坐標(biāo)以及寬和高
17、內(nèi)容窗格的默認(rèn)布局管理器是邊框布局(BorderLayout)
18、網(wǎng)格布局(GridLayout)將容器劃分為大小相同的網(wǎng)格。
19、網(wǎng)格袋布局(GridBagLayout)是最靈活,也是最復(fù)雜的布局管理器。20、對(duì)話(huà)框 P180
showMessageDialog:消息對(duì)話(huà)框
showInputDialog:輸入對(duì)話(huà)框
showConfirmDialog:確認(rèn)對(duì)話(huà)框
showOptionDialog:選項(xiàng)對(duì)話(huà)框
21、類(lèi)File有三種常用構(gòu)建器:
File(String fileName)
File(String directory ,String fileName)File(File directory ,String fileName)
22、位于java.io包中的類(lèi)包含兩組獨(dú)立的類(lèi)層次結(jié)構(gòu):一個(gè)用于讀取字節(jié),成為字節(jié)流;一個(gè)用于讀寫(xiě)字符,稱(chēng)為字符流。區(qū)別在于它們處理數(shù)據(jù)的方式,字節(jié)流按字節(jié)(一個(gè)8位組)來(lái)處理。字節(jié)流(P243)字符流(P245)
23、System.in 表示系統(tǒng)標(biāo)準(zhǔn)輸入流,指向鍵盤(pán)輸入;System.out 表示系統(tǒng)標(biāo)準(zhǔn)輸出流,指向屏幕輸出;System.err 表示系統(tǒng)標(biāo)準(zhǔn)錯(cuò)誤輸出流,指向屏幕輸出;
24、文件的讀寫(xiě)工作包括三個(gè)步驟:①、打開(kāi)文件輸入流或輸出流;②、文件讀或?qū)懖僮?;③、關(guān)閉文件輸入流或輸出流;
25、定制線(xiàn)程類(lèi):①、繼承線(xiàn)程類(lèi)Thread;②、實(shí)現(xiàn)Runnable接口;
#約定俗成的命名規(guī)則#
1、類(lèi)名首字母必須大寫(xiě)
2、方法和屬性必須小寫(xiě)
3、由多個(gè)單詞組成的類(lèi)名或方法必須采用駝峰標(biāo)識(shí)
如:類(lèi)名:StudentAdmin 方法或?qū)傩裕簊tudentName
*Equal 匹配
*equalIgnoreCase 匹配時(shí)忽略大小寫(xiě) *Indexof 包含
*getMetaDate 獲取元數(shù)據(jù) *精度轉(zhuǎn)換
*面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài) *界面邏輯、業(yè)務(wù)邏輯、數(shù)據(jù)邏輯 *三層架構(gòu)總結(jié):
1、開(kāi)發(fā)人員可以只關(guān)注整個(gè)結(jié)構(gòu)中的其中某一層
2、可以很容易用新的實(shí)現(xiàn)來(lái)替換原有層次的實(shí)現(xiàn)
3、可以降低層與層之間的依賴(lài)
4、有利于標(biāo)準(zhǔn)化
5、利于各層邏輯的復(fù)用
第五篇:Java筆記總結(jié)
1、Java是一種可以編譯 跨平臺(tái)、面向?qū)ο蟮母呒?jí)計(jì)算機(jī)語(yǔ)言。
2、Java語(yǔ)言的特點(diǎn):簡(jiǎn)單、安全、跨平臺(tái)、面向?qū)ο蟆⒅С侄嗑€(xiàn)程。
3、Java的三個(gè)技術(shù)平臺(tái)分別是 JavaSE、JavaEE、JavaME。
4、Java程序的運(yùn)行環(huán)境簡(jiǎn)稱(chēng)為 JDK。
5、編譯Java程序需要使用 javac 命令。
6、javac.exe和java.exe這兩個(gè)可執(zhí)行程序存放在JDK安裝目錄的bin目錄下。
7、PATH環(huán)境變量用來(lái)存儲(chǔ)Java的編譯和運(yùn)行工具所在的路徑;CLASSPATH環(huán)境變量 則用來(lái)保存Java虛擬機(jī)要運(yùn)行的“.calss”文件。
8、.class文件在 java.exe 文件啟動(dòng)的JVM中運(yùn)行。
9、JRE與JDK之間的區(qū)別:
a)JRE(Java Runtime Environment)提供java程序運(yùn)行所需要的基本條件(如JVM)和許多基礎(chǔ)類(lèi)。
b)JDK(Java Development Kit)是Java程序開(kāi)發(fā)工具包——包含編譯工具、解釋工具、打包工具等開(kāi)發(fā)工具。
10、JVM——Java虛擬機(jī),相當(dāng)于一個(gè)虛擬的操作系統(tǒng),負(fù)責(zé)運(yùn)行javac.exe生成的 字節(jié)碼(二進(jìn)制)文件。java.exe執(zhí)行”.class”,就是java.exe啟動(dòng)JVM運(yùn)行”.class”文件。
11、標(biāo)識(shí)符命名規(guī)則:
a)包名所有字母一律小寫(xiě)。
b)類(lèi)名和接口名每個(gè)單詞首字母大寫(xiě)。
c)常量名所有字母都大寫(xiě),單詞之間用下劃線(xiàn)分開(kāi)。
d)變量名和方法名的第一個(gè)單詞小寫(xiě),之后的每個(gè)單詞首字母大寫(xiě)。
12、強(qiáng)制類(lèi)型轉(zhuǎn)換:
a)格式:目標(biāo)類(lèi)型 變量名 =(目標(biāo)類(lèi)型)值
b)int類(lèi)型轉(zhuǎn)換成byte類(lèi)型 很容易造成 精度丟失。因?yàn)閕nt類(lèi)型變量是32位,byte類(lèi)型只有8位,所以在轉(zhuǎn)換過(guò)程中會(huì)丟失int類(lèi)型的高3位字節(jié)。
c)在用”雙字符“型運(yùn)算符(+=、-=之類(lèi)的)運(yùn)算時(shí),強(qiáng)制類(lèi)型會(huì)自動(dòng)完成,不用程序顯示的聲明。
13、三元運(yùn)算符:判斷條件?表達(dá)式1:表達(dá)式2;——若條件成立,執(zhí)行表達(dá)式1,否則執(zhí)行表達(dá)式2。
14、跳轉(zhuǎn)語(yǔ)句:
a)break:
i.用于switch語(yǔ)句,終止某case并跳出switch結(jié)構(gòu)。ii.用于循環(huán)語(yǔ)句,跳出循環(huán)語(yǔ)句,執(zhí)行后面的程序。
b)continue——只用于循環(huán)語(yǔ)句中:終止本次循環(huán),執(zhí)行下一次循環(huán)。
15、方法重載:
a)2個(gè)條件:方法名相同、參數(shù)個(gè)數(shù)或參數(shù)類(lèi)型不同。b)與返回值類(lèi)型無(wú)關(guān)。
16、數(shù)組:
a)定義數(shù)組:
i.類(lèi)型[ ] 數(shù)組名 = new 類(lèi)型[ 數(shù)組長(zhǎng)度 ] //這種定義方式只指定了長(zhǎng)度,元素的初值由系統(tǒng)自動(dòng)賦0。(動(dòng)態(tài)初始化)
ii.類(lèi)型[ ] 數(shù)組名 = new 類(lèi)型[ ]{元素,元素,......} iii.類(lèi)型[ ] 數(shù)組名 = {元素,元素,......} //這2種稱(chēng)為 靜態(tài)初始化。
17、冒泡排序:
a)若有n個(gè)元素,則進(jìn)行n-1輪排序(n-1次外循環(huán))
b)第1輪排序,元素之間進(jìn)行n-1次比較;第2輪排序進(jìn)行n-2次排序......最后1輪只進(jìn)行1次比較。c)外循環(huán)條件:i < arr.length d)內(nèi)循環(huán)條件:j < arr.length1
18、二維數(shù)組:
a)定義方式1:類(lèi)型[ ][ ] 變量名 = new 類(lèi)型[ 幾行 ][ 幾列 ];b)可理解為數(shù)組的 數(shù)組——例arr[0][1]-->數(shù)組名arr[0],第二個(gè)元素[1];c)二維數(shù)組的 長(zhǎng)度 由”[ 幾行 ]“確定!
d)定義方式2:類(lèi)型[ ][ ] 變量名 = new 類(lèi)型[ 幾行 ][ ];//行數(shù)確定,列數(shù)不確定——每行可以隨便 賦值。
e)定義方式3:類(lèi)型[ ][ ] 變量名 = { { ,...,...,...},{ },{ },......} //這種行數(shù)、列數(shù)都不確定。大括號(hào) 內(nèi)的每個(gè) 大括號(hào) 代表 一行 的元素,每行有多少個(gè)元素 取決于 內(nèi)大括號(hào) 中元素的個(gè)數(shù)。
19、面向?qū)ο蟮奶攸c(diǎn):封裝性、繼承性、多態(tài)性。
20、在創(chuàng)建變量后,JVM運(yùn)行程序時(shí),會(huì)自動(dòng)初始化變量。引用型變量 為 null。
21、垃圾對(duì)象——沒(méi)有變量引用的對(duì)象。
22、類(lèi)的封裝:將類(lèi)中的屬性 私有化。外界訪(fǎng)問(wèn)私有屬性時(shí) 只能通過(guò)該屬性的 getxxx()方法。
a)//擇Generate getter and setter--> 自動(dòng)生成
set和get方法。
23、構(gòu)造方法:實(shí)例化對(duì)象。
a)可以用 帶參數(shù)的構(gòu)造方法 在實(shí)例化對(duì)象時(shí)就 給私有屬性 賦值。b)好的程序員 應(yīng)該為每個(gè)類(lèi) 寫(xiě)一個(gè) 無(wú)參構(gòu)造方法。c)定義構(gòu)造方法的條件:
i.方法名與類(lèi)名相同。ii.沒(méi)有返回值的 聲明。
iii.方法中 不能有return 返回值。
24、this關(guān)鍵字
a)this指代 該類(lèi)實(shí)例化的 對(duì)象。所以可以用 this.xx的方式調(diào)用 成員。b)在成員方法中使用this關(guān)鍵字,避免參數(shù)名與屬性名相同。c)用this關(guān)鍵字調(diào)用 構(gòu)造方法
i.只能在構(gòu)造方法中 用this調(diào)用其他構(gòu)造方法; ii.此時(shí)this語(yǔ)句必須位于第1行,并且只能出現(xiàn)一次 iii.不能在一個(gè)類(lèi)的兩個(gè)構(gòu)造方法中互相調(diào)用。
25、static關(guān)鍵字
a)靜態(tài)變量:
i.用static修飾的變量 ii.靜態(tài)變量被所有實(shí)例共享
iii.可以使用“類(lèi)名.變量名”的形式來(lái)訪(fǎng)問(wèn)。iv.只能修飾 成員變量 b)靜態(tài)方法
i.希望在不創(chuàng)建對(duì)象的情況下也能條用 類(lèi)中的 某個(gè)方法,那就用static關(guān)鍵字休息這個(gè)方法 ii.靜態(tài)方法 只能訪(fǎng)問(wèn) 靜態(tài)成員!
//因?yàn)榉庆o態(tài)成員 必須先創(chuàng)建對(duì)象才能訪(fǎng)問(wèn),而靜態(tài)方法在被調(diào)用的時(shí)候可以 不創(chuàng)建對(duì)象——那么就沒(méi)有非靜態(tài)成員可供訪(fǎng)用。
c)靜態(tài)代碼塊
i.當(dāng)類(lèi)被加載時(shí),靜態(tài)代碼會(huì)執(zhí)行一次。而類(lèi)只會(huì)被加載一次,所以靜態(tài)代碼塊只會(huì)被執(zhí)行一次。
ii.通常會(huì)用靜態(tài)代碼塊對(duì)類(lèi)的成員變量進(jìn)行初始化。d)單例模式
i.private static 類(lèi)名 INSTANCE = new 類(lèi)名();量——自己創(chuàng)建一個(gè)對(duì)象。private 類(lèi)名(){};
//私有的 構(gòu)造方法,只能內(nèi)部訪(fǎng)問(wèn)
}
//私有成員變public static 類(lèi)名 getInstance(){ return INSTANCE;//定義靜態(tài)方法,返回自己的實(shí)例對(duì)象。ii.第二種單例模式創(chuàng)建方法。
1.Private 類(lèi)名(){} 調(diào)用。
2.public static fianl 類(lèi)名 INSTANCE = new 類(lèi)名();的不能被修改的 靜態(tài)成員對(duì)象。
26、內(nèi)部類(lèi)——定義在類(lèi)里面的 類(lèi)
a)成員內(nèi)部類(lèi)
i.相當(dāng)于成員方法,可以訪(fǎng)問(wèn)外部類(lèi)的所有成員;
ii.因?yàn)槌蓡T內(nèi)部類(lèi)相當(dāng)于 成員方法,所以想要?jiǎng)?chuàng)建內(nèi)部類(lèi)對(duì)象時(shí),必須得用外部類(lèi)的對(duì)象 去創(chuàng)建內(nèi)部類(lèi)對(duì)象:
1.外部類(lèi)名.內(nèi)部類(lèi)名 變量名 = new 外部類(lèi)名().new 內(nèi)部類(lèi)名();b)靜態(tài)內(nèi)部類(lèi)
i.用static修飾的成員內(nèi)部類(lèi),也相當(dāng)于靜態(tài)方法。只能訪(fǎng)問(wèn)外部類(lèi)的靜態(tài)成員。
ii.因?yàn)殪o態(tài),所以在創(chuàng)建內(nèi)部類(lèi)對(duì)象時(shí),可以不用先創(chuàng)建外部類(lèi)對(duì)象:
1.外部類(lèi)名.內(nèi)部類(lèi)名 變量名 = new 外部類(lèi)名.內(nèi)部類(lèi)名();iii.靜態(tài)內(nèi)部類(lèi)中 可以定義靜態(tài)成員,非靜態(tài)內(nèi)部類(lèi)則不可。c)方法內(nèi)部類(lèi)
i.在方法中定義的類(lèi),只能在當(dāng)前方法中被使用。
27、當(dāng)一個(gè)對(duì)象被當(dāng)成垃圾從內(nèi)存中釋放時(shí),它的 finalize()方法會(huì)被自動(dòng)調(diào)用。
//公有
//私有的 構(gòu)造方法,只能在類(lèi)的內(nèi)部被
28、繼承
a)繼承關(guān)鍵字:extends。b)格式:Class A extends B{} c)單繼承——一個(gè)類(lèi)只能有一個(gè)直接父類(lèi)。
29、重寫(xiě)父類(lèi)方法
a)條件:方法名、參數(shù)、返回值類(lèi)型 3個(gè)都相同。
b)重寫(xiě)之后,子類(lèi)調(diào)用被重寫(xiě)的方法時(shí),就是調(diào)用自己寫(xiě)的方法。c)重寫(xiě)應(yīng)用:
i.應(yīng)用對(duì)象 是父類(lèi)的 公有方法。重載 應(yīng)用的對(duì)象是 類(lèi)本身的 方法。ii.重寫(xiě)父類(lèi) 不適合子類(lèi)的 方法 iii.實(shí)現(xiàn)接口。
30、super關(guān)鍵字
a)調(diào)用父類(lèi)成員變量和成員方法:
i.super.成員變量;ii.super.成員方法(參數(shù)1,參數(shù)2,...);b)調(diào)用父類(lèi)的構(gòu)造方法
i.super(參數(shù)1,參數(shù)2,...);ii.必須位于子類(lèi)的構(gòu)造方法的第一行,且只能出現(xiàn)一次。
iii.在實(shí)例化子類(lèi)時(shí),系統(tǒng)會(huì)在 子類(lèi)的構(gòu)造方法中 調(diào)用
父類(lèi)的構(gòu)造方法——如果子類(lèi)的構(gòu)造方法中 沒(méi)有調(diào)用 父類(lèi)的構(gòu)造方法,系統(tǒng)會(huì)自動(dòng)調(diào)用父類(lèi)的無(wú)參構(gòu)造方法。所以 每個(gè)類(lèi)的 無(wú)參構(gòu)造方法 一定不要漏了!子類(lèi)也可以顯示的調(diào)用 父類(lèi)的有參或無(wú)參構(gòu)造法方法。c)解決 重寫(xiě)了父類(lèi)方法之后,不能調(diào)用父類(lèi)方法的問(wèn)題。
31、final關(guān)鍵字
a)final修飾的類(lèi) 不能被繼承 b)final修飾的方法 不能被子類(lèi)重寫(xiě)
c)final修飾的變量 是常量,不能被修改,且必須在定義時(shí) 為變量賦值。
32、抽象類(lèi)
a)關(guān)鍵字 abstract b)抽象方法:abstract void shout(){};——沒(méi)有方法體。
c)包含抽象方法的類(lèi)必須聲明為 abstract類(lèi):abstract class Animal{} d)抽象類(lèi)可以 不包含任何抽象方法,只需用abstract修飾。e)抽象方法不能直接實(shí)例化,只能讓 子類(lèi)實(shí)例化。
33、接口
a)定義關(guān)鍵字:interface——interface Animal{} b)接口中的方法 被默認(rèn)修飾為:public abstract——抽象方法。c)接口中的變量 被默認(rèn)修飾為 :public static final —— 全局常量
i.所以變量最好用
全大寫(xiě)
表示。
d)因?yàn)榉椒ǘ际浅橄蟮模员仨毝x一個(gè)類(lèi) 來(lái)實(shí)現(xiàn)(implements)接口——Class A implements B{} e)接口之間可以繼承——interface C extends B{} f)一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,接口直接間用逗號(hào)隔開(kāi)。g)一個(gè)類(lèi)可以在繼承一個(gè)類(lèi)的同時(shí),實(shí)現(xiàn)其它的接口。
h)如果一個(gè)類(lèi)去實(shí)現(xiàn)接口的話(huà),那么這個(gè)類(lèi)必須實(shí)現(xiàn)接口中所有的方法。
34、多態(tài)
a)方法上的多態(tài)
i.類(lèi)內(nèi)部方法的重載 ii.子類(lèi)對(duì)父類(lèi)方法的重寫(xiě) b)對(duì)象上的多態(tài)性
i.假設(shè)父類(lèi):A;子類(lèi)B B b = new B();ii.對(duì)象的自動(dòng)向上轉(zhuǎn)型:A a = b;//子類(lèi)對(duì)象,變成了父類(lèi)對(duì)象。
1.雖然a指向A的對(duì)象,但是如果B重寫(xiě)了A的方法,那a調(diào)用的還是B中的方法。
iii.對(duì)象的強(qiáng)制向下轉(zhuǎn)型
1.若 A a = new A();2.B b =(B)a;
//父類(lèi)對(duì)象變成了 子類(lèi)對(duì)象。3.這時(shí)對(duì)象b調(diào)用的是 子類(lèi)的重寫(xiě)的方法。
4.注意:對(duì)象發(fā)生強(qiáng)制向下轉(zhuǎn)型之前,必須保證已經(jīng)發(fā)生了向上轉(zhuǎn)型,否則會(huì)出異常。
35、異常
a)異常類(lèi)分為:編譯時(shí)異常、運(yùn)行時(shí)異常 b)異常處理機(jī)制: i.try...catch...finally 1.try代碼包含可能發(fā)生異常的Java語(yǔ)句,catch塊中包含針對(duì)一場(chǎng)進(jìn)行處理的代碼。
2.當(dāng)發(fā)生異常時(shí),系統(tǒng)將異常信息封裝成一個(gè)異常對(duì)象傳遞給catch代碼塊。所以catch需要定義1個(gè)對(duì)應(yīng)的異常類(lèi) 變量。3.finally代碼塊包含,無(wú)論發(fā)生什么異常都要執(zhí)行的代碼。常用于關(guān)閉系統(tǒng)資源。
ii.throws關(guān)鍵字聲明拋出異常,調(diào)用者對(duì)其處理。這種方法能通過(guò)編譯,但是發(fā)生異常后就會(huì)終止運(yùn)行。
c)自定義異常
i.首先定義 一個(gè)繼承Exception異常的 異常類(lèi);異常類(lèi)中 編寫(xiě)一個(gè)無(wú)參構(gòu)造方法(調(diào)用父類(lèi)無(wú)參構(gòu)造方法),再編寫(xiě)一個(gè) 帶String參數(shù)的構(gòu)造方法(也調(diào)用父類(lèi)的帶Stirng參數(shù)的構(gòu)造方法)。ii.再定義一個(gè) 測(cè)試類(lèi),定義要調(diào)用的方法,并在此方法后面用 throws關(guān)鍵字 聲明拋出自定義異常;再在 方法體 內(nèi)判斷什么時(shí)候 用throw new 自定義異常(“要打印的信息”)。//聲明自定義異常對(duì)象。
iii.最后在 測(cè)試類(lèi)的main 方法中,iv.try{...}
catch(...){ System.out.printlan(e.getMessage)}
finally{...}
36、線(xiàn)程的創(chuàng)建: a)繼承Thread類(lèi),并重寫(xiě)run()方法。然后new Thread().start;開(kāi)啟線(xiàn)程。
b)實(shí)現(xiàn)Runnable接口,重寫(xiě)run()方法。然后new Thread(new myRunnable).start開(kāi)啟線(xiàn)程。
37、兩種實(shí)現(xiàn)多線(xiàn)程的比較——實(shí)現(xiàn)Runnable接口的方法更好
a)可以讓多個(gè)線(xiàn)程共享資源。——售票系統(tǒng)需要。b)避免單繼承。38、36、