第一篇:Java學習_基礎總結
現在學習JAVA的人越來越多!但是學的好的,能用到工作中去的卻很少很少,下面就是我為大家總結歸納的一些JAVA學習基礎,希望大家少走彎路,盡快投入到工作中去!
Java 學習基礎總結歸納!
1、作用域public,private,protected,以及不寫時的區別
答:區別如下:
作用域
當前類
同一package
子孫類
其他package public
√
√
√
√
protected
√
√
√
×
friendly
√
√
×
×
private
√
×
×
×
不寫時默認為friendly
2、Anonymous Inner Class(匿名內部類)是否可以extends(繼承)其它類,是否可以implements(實現)interface(接口)
答:匿名的內部類是沒有名字的內部類。不能extends(繼承)其它類,但一個內部類可以作為一個接口,由另一個內部類實現
3、Static Nested Class 和 Inner Class的不同
答:Nested Class(一般是C++的說法),Inner Class(一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。注: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象
4、&和&&的區別
答:&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)
5、Collection 和 Collections的區別
答:Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作
6、什么時候用assert
答:assertion(斷言)在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經處于不正確的狀態下,系統將給出警告或退出。一般來說,assertion用于保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高性能,在軟件發布后,assertion檢查通常是關閉的
7、String s = new String(“xyz”);創建了幾個String Object
答:兩個,一個字符對象,一個字符對象引用對象
8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少
答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回與參數最接近的長整數,參數加1/2后求其floor
9、short s1 = 1;s1 = s1 + 1;有什么錯? short s1 = 1;s1 += 1;有什么錯
答:short s1 = 1;s1 = s1 + 1;(s1+1運算結果是int型,需要強制轉換類型)short s1= 1;s1 += 1;(可以正確編譯)
10、Java有沒有goto
答:java中的保留字,現在沒有在java中使用
11、數組有沒有length()這個方法? String有沒有length()這個方法
答:數組沒有length()這個方法,有length的屬性。String有有length()這個方法
12、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型
答:方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫(Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型
13、Set里的元素是不能重復的,那么用什么方法來區分重復與否呢? 是用==還是equals()? 它們有何區別
答:Set里的元素是不能重復的,那么用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等 equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值
14、給我一個你最常見到的runtime exception
答:常見的運行時異常有如下這些ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
15、error和exception有什么區別 答:error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況 exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況
16、List, Set, Map是否繼承自Collection接口
答: List,Set是,Map不是
17、abstract class和interface有什么區別
答:聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用于要創建一個體現某些基本行為的類,并為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變量,其類型是一個抽象類,并讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現了該接口的類的任何對象上調用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口
18、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized
答:都不能
19、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)
答:接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數
20、構造器Constructor是否可被override
答:構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading
21、是否可以繼承String類
答:String類是final類故不可以繼承
22、try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后
答:會執行,在return前執行
23、用最有效率的方法算出2乘以8等於幾 答:2 << 3
24、兩個對象值相同(x.equals(y)== true),但卻可有不同的hash code,這句話對不對
答:不對,有相同的hash code
25、當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞
答:是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的
26、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
答:witch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、short、char 或者 byte。long,string 都不能作用于swtich
27、ArrayList和Vector的區別,HashMap和Hashtable的區別
答:就ArrayList與Vector主要從二方面來說.一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的二.數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半就HashMap與HashTable主要從三方面來說。一.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value
28、char型變量中能不能存貯一個中文漢字?為什么? 答:是能夠定義成為一個中文的,因為java中以unicode編碼,一個char占16個字節,所以放一個中文是沒問題的
29、GC是什么? 為什么要有GC
答:GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。
30、float型float f=3.4是否正確?
答:不正確。精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.4
31、介紹JAVA中的Collection FrameWork(包括如何寫自己的數據結構)?
答:Collection FrameWork如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素(Elements)Map提供key到value的映射
32、抽象類與接口?
答:抽象類與接口都用于抽象,但是抽象類(JAVA中)可以有自己的部分實現,而接口則完全是一個標識(同時有多重繼承的功能)。JAVA類實現序例化的方法是實現java.io.Serializable接口 Collection框架中實現比較要實現Comparable 接口和 Comparator 接口
33、String與StringBuffer的區別。
答:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字符串中的內容經常進行操作,特別是內容要修改時,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
34、談談final, finally, finalize的區別
答:final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載 finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執行,然后控制就會進入 finally 塊(如果有的話)finalize—方法名。Java 技術允許使用 finalize()方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize()方法以整理系統資源或者執行其他清理工作。finalize()方法是在垃圾收集器刪除對象之前對這個對象調用的
35、面向對象的特征有哪些方面
答:主要有以下四方面:
1.抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
2.繼承:繼承是一種聯結類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始于這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。4.多態性:多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。
36、String是最基本的數據類型嗎
答:基本數據類型包括byte、int、char、long、float、double、boolean和short。java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類
37、int 和 Integer 有什么區別
答:Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。原始類型封裝類
booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble 引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值為 null,而原始類型實例變量的缺省值與它們的類型有關
38、運行時異常與一般異常有何異同
答:異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。
39、說出ArrayList,Vector, LinkedList的存儲性能和特性
答:ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快。
40、HashMap和Hashtable的區別
答:HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。
41、heap和stack有什么區別
答:棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照后進先出的方式進行處理。堆是棧的一個組成元素
42、Java的接口和C++的虛類的相同和不同處
答:由于Java不支持多繼承,而有可能某個類或對象要使用分別在幾個類或對象里面的方法或屬性,現有的單繼承機制就不能滿足要求。與繼承相比,接口有更高的靈活性,因為接口中沒有任何實現代碼。當一個類實現了接口以后,該類要實現接口里面所有的方法和屬性,并且接口里面的屬性在默認狀態下面都是public static,所有方法默認情況下是public.一個類可以實現多個接口。
43、Java中的異常處理機制的簡單原理和應用
答:當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException。另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,并自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。
43、垃圾回收的優點和原理。并考慮2種回收機制
答:Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由于有個垃圾回收機制,Java中的對象不再有“作用域”的概念,只有對象的引用才有“作用域”。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。
44、你所知道的集合類都有哪些?主要方法?
答:最常用的集合類是 List 和 Map。List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、存儲和操作任何類型對象的元素列表。List 適用于按數值索引訪問元素的情形。Map 提供了一個更通用的元素存儲方法。Map 集合類用于存儲元素對(稱作“鍵”和“值”),其中每個鍵映射到一個值。
45、描述一下JVM加載class文件的原理機制?
答:JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。
46、排序都有哪幾種方法?請列舉
答: 排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸并排序,分配排序(箱排序、基數排序)快速排序的偽代碼。/ /使用快速排序方法對a[ 0 :n-1 ]排序從a[ 0 :n-1 ]中選擇一個元素作為m i d d l e,該元素為支點把余下的元素分割為兩段left 和r i g h t,使得l e f t中的元素都小于等于支點,而right 中的元素都大于等于支點遞歸地使用快速排序方法對left 進行排序遞歸地使用快速排序方法對right 進行排序所得結果為l e f t + m i d d l e + r i g h t
47、JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎?
答:Java通過面向對象的方法進行異常處理,把各種不同的異常進行分類,并提供了良好的接口。在Java中,每個異常都是一個對象,它是Throwable類或其它子類的實例。當一個方法出現異常后便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常并進行處理。Java的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。一般情況下是用try來執行一段程序,如果出現異常,系統會拋出(throws)一個異常,這時候你可以通過它的類型來捕捉(catch)它,或最后(finally)由缺省處理器來處理。用try來指定一塊預防所有“異常”的程序。緊跟在try程序后面,應包含一個catch子句來指定你想要捕捉的“異常”的類型。throw語句用來明確地拋出一個“異常”。throws用來標明一個成員函數可能拋出的各種“異常”。Finally為確保一段代碼不管發生什么“異常”都被執行一段代碼。可以在一個成員函數調用的外面寫一個try語句,在這個成員函數內部寫另一個try語句保護其他代碼。每當遇到一個try語句,“異常”的框架就放到堆棧上面,直到所有的try語句都完成。如果下一級的try語句沒有對某種“異常”進行處理,堆棧就會展開,直到遇到有處理這種“異常”的try語句。
48、一個“.java”源文件中是否可以包括多個類(不是內部類)?有什么限制?
答:可以。必須只有一個類名與文件名相同。
49、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
答:字節流,字符流。字節流繼承于InputStream OutputStream,字符流繼承于InputStreamReader OutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高性能和使用方便。
50、java中會存在內存泄漏嗎,請簡單描述。
答:會。自己實現堆載的數據結構時有可能會出現內存泄露,可參看effective java.51、java中實現多態的機制是什么?
答:方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。
52、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內存嗎?有什么辦法主動通知虛擬機進行垃圾回收
答:對于GC來說,當程序員創建對象時,GC就開始監控這個對象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是“可達的”,哪些對象是“不可達的”。當GC確定一些對象為“不可達”時,GC就有責任回收這些內存空間。可以。程序員可以手動執行System.gc(),通知GC運行,但是Java語言規范并不保證GC一定會執行。
53、靜態變量和實例變量的區別? 答:static i = 10;//常量 class A a;a.i =10;//可變
54、什么是java序列化,如何實現java序列化?
答:序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化后的對象進行讀寫操作,也可將流化后的對象傳輸于網絡之間。序列化是為了解決在對對象流進行讀寫操作時所引發的問題。序列化的實現:將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable只是為了標注該對象是可被序列化的,然后使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。
55、是否可以從一個static方法內部發出對非static方法的調用?
答:不可以,如果其中包含對象的method();不能保證對象初始化.56、寫clone()方法時,通常都有一行代碼,是什么?
答:Clone 有缺省行為,super.clone();他負責產生正確大小的空間,并逐位復制。
57、在JAVA中,如何跳出當前的多重嵌套循環?
答:用break;return 方法。
58、List、Map、Set三個接口,存取元素時,各有什么特點?
答:List 以特定次序來持有元素,可有重復元素。Set 無法擁有重復元素,內部排序。Map 保存key-value值,value可多值。
59、說出一些常用的類,包,接口,請各舉5個
答:常用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer 常用的包:java.lang java.awt java.io java.util java.sql 常用的接口:Remote List Map Document NodeList
第二篇:Java基礎學習知識點總結
黑馬程序員_畢向東_Java基礎視頻教程
Java基礎學習知識點總結 2016年01月06日
day01
一、基礎知識:軟件開發
1、什么是軟件?軟件:一系列按照特定順序組織的計算機數據和指令的集合。
2、常見的軟件:系統軟件:如:DOS,Windows,Linux等。應用軟件:如:掃雷,迅雷,QQ等。
3、什么是開發?制作軟件。
二、基礎知識:人機交互方式
4、軟件的出現實現了人與計算機之間的更好的交互。
5、交互方式:圖形化界面:這種方式簡單直觀,使用者易于接受,容易上手操作。命令行方式:需要有一個控制臺,輸入特定的指令,讓計算機完成一些特定的操作。較為麻煩,需要記錄住一些命令。
三、基礎知識:常用的DOS命令
6、點擊開始在運行欄輸入“cmd”進入dos操作界面。
7、課程中常見的命令:
dir:列出當前目錄下的文件以及文件夾。md:創建目錄。rd:刪除目錄。
cd:進入指定目錄。d:進入盤符。cd..:退回到上一級目錄。cd/:退回到根目錄。del:刪除文件。
exit:退出dos命令行。
8、在dos命令行操作文件夾時,如忘記文件夾全稱,可以輸文件夾前幾個名稱后面用*代替。
四、基礎知識:計算機語言
9、通過DOS命令行的演示,發現原來操作計算機就如同和計算機說話一樣。
10、我們告訴它做什么,它就可以做什么。前提是,我們和它說的內容它必須識別才可以。這就是計算機語言。
11、什么是計算機語言?語言:是人與人之間用于溝通的一種方式。例如:中國人與中國人用中文溝通。而中國人要和韓國人交流,就要學習韓語。
12、計算機語言:人與計算機交流的方式。如果人要與計算機交流,那么就要學習計算機語。計算機語言有很多種,如:C,C++,Java等。這里,我們選擇其中一種:Java語言。
五、基礎知識:Java語言介紹
13、Java語言概述。是SUN(Stanford University Network,斯坦福大學網絡公司)1995年推出的一門高級編程語言。是一種面向Internet的編程語言。隨著Java技術在Web方面的不斷成熟,已經成為Web應用程序的首選開發語言。是簡單易學,完全面向對象,安全可靠,與平臺無關的編程語言。
14、Java語言的三種技術架構。J2EE(Java 2 Platform Enterprise Edition)企業版(現更名:JAVAEE):是為開發企業環境下的應用程序提供一套解決方案。該技術體系中包含的技術如Servlet Jsp等,主要針對于Web應用程序開發。J2SE(Java 2 Platform Standard Edition)標準版(現更名:JAVASE):是為開發普通桌面和商務應用程序提供的解決方案。該技術體系是其他兩者的基礎,可以完成一些桌面應用程序的開發。比如Java版的掃雷。J2ME(Java 2 Platform Micro Edition)小型版(現更名:JAVAME):是為開發電子消費產品和嵌入式設備提供的解決方案。該技術體系主要應用于小型電子消費類產品,如手機中的應用程序等。
15、Java語言的特點:跨平臺性。什么是跨平臺性?通過Java語言編寫的應用程序在不同的系統平臺上都可以運行。原理是什么?只要在需要運行Java應用程序的操作系統上,先安裝一個Java虛擬機(JVM Java Virtual Machine)即可。由JVM來負責Java程序在該系統中的運行。
16、Java語言的特點:跨平臺性。Java程序:Windows系統:Win版的JVM;Linux系統:lin版的JVM;MAC系統:mac版的JVM。因為有了JVM,所以同一個Java程序在三個不同的操作系統中都可以執行。這樣就實現了Java程序的跨平臺性。也稱為Java具有良好的可移植性。
六、基礎知識:Java語言的環境搭建
17、明確什么是JRE,JDK;下載JDK;安裝JDK;配置環境變量;驗證是否成功。
18、什么是JRE,JDK?JRE(Java Runtime Environment Java運行環境):包括Java虛擬機(JVM Java Virtual Machine)和Java程序所需的核心類庫等,如果想要運行一個開發好的Java程序,計算機中只需要安裝JRE即可。JDK(Java Development Kit Java開發工具包):JDK是提供給Java開發人員使用的,其中包含了Java的開發工具,也包括了JRE。所以安裝了JDK,就不用再單獨安裝JRE了。其中的開發工具:編譯工具(java.exe)打包工具(jar.exe)等。簡單而言:使用JDK開發完成的Java程序,交給JRE去運行。
19、Java6.0 Platform
20、下載JCK(Java Development Kit Java開發工具包)。官方網址:www.tmdps.cn、java.sun.com。下載完成后,安裝在電腦上。然后打開DOS命令行,效驗文件是否安裝完畢,并利用DOS進行Javac.exe運行測試。為了更方便的使用Java開發工具,需要進行環境變量配置。配置成功后就可以進行Java程序的開發了。
21、環境變量配置。方法一:圖形界面操作。我的電腦——屬性——高級——環境變量;編輯Path環境變量,在變量值開始處加上Java工具所在目錄,后面用分號和其他值分隔開即可;打開DOS命令行,任意目錄下敲入javac;如果出現javac的參數信息,配置成功。這種配置方式,一勞永逸。具體流程:右鍵點擊我的電腦打開屬性,點擊高級系統設置,點擊高級,點擊環境變量,找到系統變量,新建系統變量(變量名:JAVA_HOME,變量值:安裝JKD的地址。如:D:ProgramStudioJDK1.7)點擊確定,找到變量名為Path的變量,點擊編輯,在變量值欄的最前面(放到前面時,先尋找)加入%JAVA_HOME%bin用分號隔開。方法二:DOS界面操作(可用于臨時環境變量配置,借助別人的電腦開發Java程序)。具體流程:利用set命令:設置、查看環境變量的值。Set path:查看path的值。配置Java工具包:set path=D:ProgramStudioJDK1.7bin;%path%回車。測試javac。只對當前窗口有效。定義class路徑:Set classpath=.;c:myclass。
七、基礎知識:Java程序開發體驗
22、Hello World。將Java代碼編寫到擴展名為.java的文件中;通過javac命令對該java文件進行編譯;通過java命令對生成的class文件進行運行。Java文件——javac.exe編譯——class文件——java運行——結果。
23、對于初學者,可以用記事本編寫。按部就班,一步一步寫代碼。打開記事本。Java代碼是以類的形式來體現的。代碼如下: class TestFirstOne //Java定義類+類名(首字母大寫){ public static void main(String[] args)//主函數(保證類的獨立運行)
{
System.out.println(“hello world”);//輸出打印語句
} }
23、classpath配置。臨時配置方式:dos配置。Set Classpath=代碼路徑。回車。Classpath先在環境變量中找,然后在當前路徑(結尾沒帶分號不找)。Path先在當前路徑查找,然后去環境變量中查找。一勞永逸方法和上面JDK環境變量配置方法一樣。
24、Hello World組成部門。class是java程序中的關鍵字(關鍵字只能是小寫)。{}類的區間用大括號定義(類中的內容為了增加閱讀性,需要有階梯感,如使用tab鍵)。public static void main(String[] args)定義主函數(使用大括號確定函數的內容)。
25、注釋。三種方式://單行注釋,符號以后直到回車鍵的內容;/*多行注釋,符號開始到符號結束以內的內容*/;/**java注釋符號,可被提取出來制作軟件開發手冊*/。注釋的作用:增加程序的閱讀性;調試程序。
26、寫代碼要養成寫注釋的習慣。在寫代碼前注釋相關信息。例如: /* 需求:定義一個Hello World小程序。思路: 1,2,步驟:
1,通過class關鍵字定義一個類。將代碼都編寫到該類中。
2,為了保證該的獨立運行。在類中定義個主函數。格式public static void main(String[] args)3,保存成一個擴展名為java的文件。
4,在dos控制臺中通過javac工具對java文件進行編譯。5,在通過java命令對生成的class文件進行執行。作者:ZC 版本:v1.0 日期:2016.01.06 copyright:ZC */ 2016年01月07日
day02
一、基礎知識:Java語言基礎組成
1、組成:關鍵字、標識符、注釋、常量和變量、運算符、語句、函數、數組
二、基礎知識:關鍵字
2、關鍵字的定義和特點:定義:被Java語言賦予了特殊含義的單詞。特點:關鍵字中所有字母都為小寫。
3、用于定義數據類型的關鍵字:class、interface、byte、short、int、long、float、double、char、boolean、void。
4、用于定義數據類型值的關鍵字:true、false、null。
5、用于定義流程控制的關鍵字:if、else、switch、case、default、while、do、for、break、continue、return。
6、用于定義訪問權限修飾的關鍵字:private、protected、public。
7、用于定義類,函數,變量修飾的關鍵字:abstract、final、static、synchronized。
8、用于定義類與類之間關系的關鍵字:extends、implements。
9、用于定義建立實例以及引用實例,判斷實例的關鍵字:new、this、super、instanceof。
10、用于異常處理的關鍵字:try、catch、finally、throw、throws。
11、用于包的關鍵字:package、import。
12、其他修飾符關鍵字:native、strictfp、transient、volatile、assert。
三、基礎知識:標識符
13、標識符:在程序中自定義的一些名稱;由26個英文字母大小寫,數字:0-9,符號_$組成;定義合法標識符規則:數字不可以開頭、不可以使用關鍵字;Java中嚴格區分大小寫;注意:在起名時,為了提高閱讀性,要盡量有意義。
14、Java中的名稱規范:包名:多單詞組成時所有都小寫,如:xxxyyyzzz;類名接口名:多單詞組成時,所有單詞的首字母大寫,如:XxxYyyZzz;變量名和函數名:多單詞組成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫,如:xxxYyyZzz;常量名:所有字母都大寫,多單詞時每個單詞用下劃線連接,如:XXX_YYY_ZZZ。
四、基礎知識:注釋
15、注釋:對于單行和多行注釋,被注釋的文字,不會被JVM(Java虛擬機)解釋執行;對于文檔注釋,是Java特有的注釋,其中注釋內容可以被JDK提供的工具javadoc所解析,生成一套以網頁文件形式體現的該程序的說明文檔;注釋是一個程序員必須要具有的良好編程習慣;初學者編寫程序可以養成習慣;先寫注釋再寫代碼;將自己的思想通過注釋先整理出來,再用代碼去體現;因為代碼僅僅是思想的一種體現形式而已;用于注解說明解釋程序的文字就是注釋;提高了代碼的閱讀性。
16、Java中的注釋格式:單行注釋:格式://注釋文字;多行注釋:格式:/*注釋文字*/;文檔注釋:格式:/**注釋文字*/。
五、基礎知識:常量
17、常量表示不能改變的數值。
18、Java中常量的分類:整數常量:所有整數;小數常量:所有小數;布爾型常量:較為特有,只有兩個數值:true和false;字符常量:將一個數字字母或者符號用單引號(’’)標識;字符串常量:將一個或者多個字符用雙引號(””)標識;null常量:只有一個數值就是null。
19、對于整數:Java有三種表現形式:十進制:0-9,滿10進1;八進制:0-7,滿8進1,用0表示開頭;十六進制:0-9,A-F,滿16進1,用0x開頭表示。
六、基礎知識:進制轉換
20、進制的轉換特點:八位二進制表示一個字節(基本的數據單元)。三個二進制位表一個八進制位。四個二進制位表示一個十六進制位。ASCII碼編碼表。
21、二進制和十進制之間的轉換:十進制轉二進制:原理:對十進制數進行除2運算(除二取余法);二進制轉十進制:原理:二進制乘以2的N次的過程。
22、快捷方法:8421法則。
23、負數的二進制表現形式:對應的正數二進制取反加1。負數的最高位都是1。
七、基礎知識:變量
24、變量的概念:內存中的一個存儲區域;該區域有自己的名稱(變量名)和類型(數據類型);該區域的數據可以在同一類型范圍內不斷變化;理解:變量就如同數學中的未知數;變量:就是將不確定的數據進行存儲,也就是需要在內存中開辟一個空間。
25、為什么要定義變量:用來不斷的存放同一類型的常量,并可以重復使用。
26、使用變量注意:變量的作用范圍(一對{}之間有效);初始化值。
27、定義變量的格式:數據類型變量名=初始化值;注:格式是固定的、記住格式,以不變應萬變。
28、Java語言是強類型語言,對于每一種數據都定義了明確的具體數據類型,在內存總分配了不同打小的內存空間。數據類型:基本數據類型(數值型(整數類型(byte,short,int,long);浮點類型(float,double));字符型(char);布爾型(boolean));引用數據類型(類(class);接口(interface);數據([]))。注意:整數默認:int,小數默認:double。
29、數據類型空間:byte 8位二進制(一個8位二進制或1個字節);short 16位二進制(二個8位二進制或2個字節);int 32位二進制(四個8位二進制或4個字節);long 64位二進制(八個8位二進制或8個字節);float(單精度)32位二進制(四個8位二進制或4個字節);double(雙精度)64位二進制(八個8位二進制或8個字節);char 取值:0-65535;boolean取值:true,false。
30、類型轉換。不同類型的數據不能進行運算。需要進行數據類型提升,從小往大提升,自動數據類型提升。強制類型轉換:格式:變量=(類型名)(需轉換的數據);什么時候使用強制轉換:如:小數保留整數部分。
31、表達式的數據類型自動提升:所有的byte型、short型和char的值將被提升到int型;如果一個操作數是long型,計算結果就是long型;如果一個操作數是float型,計算結果就是float型;如果一個操作數是double型,計算結果就是double型。分析:system.out.println(‘a’)與system.out.println(‘a’+1)的區別。
八、基礎知識:運算符
32、算數運算符:+正號,-負號,+加,-減,*乘,/除,%取模,++自增(前),++自增(后),--自減(前),--自減(后),+字符串相加(字符串數據和任何數據使用+都是相連接,最終都會變成字符串)。
33、轉義字符:通過 來轉變后面字母或者符號的含義。在Linux系統中換行是一個字符來表示n,windows系統中,換行由nr實現。n:換行。b:退格。相當于backspace鍵。r:按下回車鍵。t:制表符。相當于tab鍵。
34、賦值運算符:符號:=:賦值,+=:a+=5等價于a=a+5,-=,*=,/=,%=。
35、比較運算符:==:相等于;!=:不等于;<:小于;>:大于;<=:小于等于;>=:大于等于;instanceof:檢查是否是類的對象。注意:比較運算符的結果都是boolean型,也就是要么是true,要么是false;比較運算符“==”不能誤寫成“=”。
36、邏輯運算符:&:AND(與)兩邊的boolean表達式結果,有一個為false,那么結果就是false,只要兩邊都為true,結果為true;|:OR(或)兩邊的boolean表達式結果,只要有一個為true,結果為true,只有兩邊都有false,結果為false;^:XOR(異或)兩邊的boolean表達式結果相同結果為false,兩邊不同結果為true;!:NOT(非);&&:AND(短路);||OR:(短路)。邏輯運算符用于連接boolean類型的表達式。&和&&的特點:&:無論左邊是真是假,右邊都運算;&&:當左邊為假時,右邊不運算。|和||的特點:|:兩邊都做運算;||:但左邊為真時,右邊不運算。
37、位運算符:<<:左移,如:3<<2=12等價于3*2^2=12;>>:右移,如:6>>2=1等價于6/2^2=1;>>>:無符號右移,如:3>>>1=1;&:與運算,如:6&3=2;|:或運算,如:6|3=7;^:異或運算,如:6^3=5;~:反碼,如:~6=-7;位運算是直接對二進制進行運算。<<:其實就是乘以2的移動的位數次冪;>>:就是除以2的移動的位數次冪。>>:最高位補什么由原有數據的最高位值而定;如果最高位0,右移后,用0補空位;如果最高位1,右移后,用1補空位。>>>:無論最高位是什么,右移后,都用0補。一個數異或同一個數兩次,結果還是拿個數。
38、三元運算符:格式:(條件表達式)?表達式1:表達式2;如果條件為true,運算后的結果是表達式1;如果條件為false,運算后的結果是表達式2。如:獲取兩個數中大數,int x=3,y=4,z;z=(x>y)?x:y//z變量存儲的就是兩個數的大數。
九、基礎知識:if語句
39、程序流程控制:順序結構,判斷結構,選擇結構,循環結構。
40、判斷結構:if語句三種格式:一層判斷:if(條件表達式){執行語句;};兩層判斷:if(條件表達式){執行語句;}else{執行語句;};多層判斷:if(條件表達式){執行語句;}else if(條件表達式){執行語句;}else{執行語句;}。
41、if else結構間歇格式:變量=(條件表達式)?表達式1:表達式2;三元運算符:好處:可以簡化if else代碼;弊端:因為是一個運算符,所以運算完畢需要有一個結果。
42、解決DOS命令下,編譯無法識別GDK碼方法:方法一:使用-encoding參數指明編碼方式:javac-encoding UTF-8 XX.java。方法二:保存java文件時,選擇編碼格式為ANSI。
十、基礎知識:switch語句
43、選擇結構:switch語句:格式:switch(表達式){case 取值1:執行語句;break;case 取值2:執行語句;break;??default:執行語句;//break;}
44、switch(表達式):表達式只接收四種類型:byte,short,int,char。
45、if語句與switch語句的區別:if除了能判斷數值,還能判斷具體區間,switch判斷區間很累;對于數字是布爾型時,只有if能判斷。
46、if語句與switch語句的用法:如果要對具體數字進行判斷,數值不多,而且符合byte、short、int、char這四種類型,雖然兩個語句都可以使用,建議用switch完成。因為效率稍高。其他情況一般用if。當結果為布爾型或區間時,用if完成。If的使用范圍更廣。2016年01月08日day03
一、基礎知識:while語句
1、循環結構:代表語句:while、do while、for。
2、while語句格式:while(條件表達式){執行語句;}。
3、do while語句格式:do{執行語句;}while(條件表達式)。Do while特點是條件無論是否滿足,循環體至少被執行一次。
4、while和do while的區別:while:先判斷條件,只有條件滿足才執行循環體。do while:先執行循環體,再判斷條件,條件滿足,再繼續執行循環體。簡單一句話:do while:無論條件是否滿足,循環體至少執行一次。
二、基礎知識:for語句
5、for語句格式:for(初始化表達式;循環條件表達式;循環后的操作表達式){執行語句;}。注意:a:for里面的連個表達式運行的順序,初始化表達式只讀一次,判斷循環條件,為真就執行循環體,然后再執行循環后的操作表達式,接著繼續判斷循環條件,重復找個過程,直到條件不滿足為止。b:while與for可以互換,區別在于for為了循環而定義的變量在for循環結束就是在內存中釋放。而while循環使用的變量在循環結束后還可以繼續使用。c:最簡單無限循環格式:while(true),for(;;),無限循環存在的原因是并不知道循環多少次,而是根據某些條件,來控制循環。
6、for和while的區別:a:變量有自己的作用域。對于一個變量來將,如果這個變量僅僅用于控制循環的次數,用作循環增量時用for語句。循環結束時,該變量在內存被釋放。用于優化內存。b:for和while可以進行互換,如果定義循環增量,用for更為合適。
7、什么時候使用循環結構?當要多某些語句執行很多次時,就是用循環結構。
8、循環注意:一定要明確哪些語句需要參與循環,哪些不需要。
9、兩種思想:累加思想:原理:通過變量記錄住每次變化的結果。通過循環的形式,進行累加動作。計數器思想:原理:通過一個變量記錄住數據的狀態變化。也通過循環完成。
10、循環嵌套:語句嵌套形式,其實就是語句中含有語句。
11、其他流程控制語句:break(跳出),continue(繼續)。Break語句:應用范圍:選擇結構和循環結構。Continue語句:應用于循環結構。注意:a:這兩個語句離開應用范圍,存在是沒有意義的。b:這兩個語句單獨存在下面都不可以有語句,因為執行不到。c:continue語句是結束本次循環繼續下次循環。d:標號的出現,可以讓這兩個語句作用于指定的范圍。
12、注意:標號只能用于循環語句上,給循環起名字。
13、continue:只能作用于循環結構。繼續循環。特點:結束本次循環,繼續下一次循環。
14、總結:a:break和continue語句作用的范圍。b:break和continue單獨存在時,下面可以有任何語句。因為都執行不到。
三、基礎知識:函數
15、函數的定義:什么是函數?函數就是定義在類中的具有特定功能的一段獨立小程序;函數也稱為方法。
16、函數的格式:修飾符返回值類型函數名(參數類型形式參數1,參數類型形式參數2,?){執行語句;return返回值;}。返回值類型:函數運行后的結果的數據類型。參數形式:是形式參數的數據類型。形式參數:是一個變量,用于存儲調用函數時傳遞給函數的實際參數。實際參數:傳遞給形式參數的具體數值。Return:用于結束函數。返回值:該值會返回給調用者。
17、函數的特點:定義函數可以將功能代碼進行封裝;便于對該功能進行復用;函數只有被調用才會被執行;函數的出現提高了代碼的復用性;對于函數沒有具體返回值的情況,返回值類型用關鍵字void表示,那么該函數中的return語句如果在最后一行可以省略不寫。注意:函數中只能調用函數,不可以在函數內部定義函數;定義函數時,函數的結果應該返回給調用者,交由調用者處理。
18、重點:函數的應用。如何定義一個函數呢?a:既然函數是一個獨立的功能,那么該功能的運算結果是什么先明確。因為這是在明確函數的返回值類型。b:再明確在定義該功能的過程中是否需要未知的內容參與運算。因為是在明確函數的參數列表(參數的類型和參數的個數)。
19、函數的重載(overload):重載的概念:在同一個類中,允許存在一個以上的同名函數,只要它們的參數個數或者參數類型不同即可。重載的特點:與返回值無關,只看參數列表。重載的好處:方便與閱讀,優化了程序設計。重載示例://返回兩個整數的和int add(int x,int y){return x+y;};//返回三個整數的和int add(int x,int y,int z){return x+y+z;};//返回兩個小數的和double add(double x,double y){return x+y;}。
20、什么時候用重載?當定義的功能相同,但參與運算的未知內容不同。那么,這時就定義一個函數名稱以表示其功能,方便閱讀,而通過參數列表的不同來區分多個同名函數。
四、基礎知識:數組
21、數組的定義:概念:同一種數據類型的集合。其實數組就是一個容器。數組的好處:可以自動給數組中的元素從0開始編號,方便操作這些元素。關鍵字:new:用來在內存中產生一個容器實體。格式一:元素類型[]數組名=new元素類型[元素個數或數組長度];示例:int [] arr=new int[5];格式二:元素類型[]數組名=new元素類型[]{元素,元素,?};示例:int[] arr=new int[]{3,5,1,7};int[] arr={3,5,1,7}。
22、內存結構:Java程序在運行時,需要在內存中分配空間。為了提高運行效率,又對空間進行了不同區域的劃分,因為每一片區域都有特定的處理數據方式和內存的管理方式。A:棧內存(棧區):用于存儲局部變量,當數據使用完,所占空間會自動釋放。B:堆內存(堆區):數組和對象,通過new建立的實例都存放在堆內存中。每一個實體都有內存地址。實體中的變量都有默認初始化值。實體不在被使用,會在不確定的時間內被垃圾回收器回收。C:方法區,本地方法區,寄存器。2016年01月09日
day04
一、基礎知識:數組
1、獲取數組中的元素。通常會用到遍歷。
2、數組中有一個屬性可以直接獲得到數組元素個數。length。使用方式:數組名稱.length。
3、數組排序:選擇排序:內循環結束一次,最值出現頭角標位置。冒泡排序:第一圈:最值出現在了最后位。
4、java中排序工具:import.java.util.*;Array.sort(arr)。java中已經定義好的一種排序方式。開發中,對數組排序,要使用該句代碼。
5、二維數組:數組中的數組:格式一:int[][] arr=new int[3][2];定義了名稱為arr的二維數組;二維數組中有3個一維數組;每一個一維數組中有2個元素;一維數組的名稱分別為arr[0],arr[1],arr[2];給第一個一維數組1腳標位賦值為78寫法是:arr[0][1]=78。格式二:int[][] arr=new int[3][];二維數組中有3個一維數組;每個一維數組都是默認初始值null;可以對這個三個一維數組分別進行初始化:arr[0]=new int[3];arr[1]=new int[1];arr[2]=new int[2]。
2016年01月10日
day05
一、面向對象:概述
1、理解面向對象:面向對象是相對面向過程而言;面向對象和面向過程都是一種思想;面向過程:強調的是功能行為;面向對象:將功能封裝進對象,強調了具備了功能的對象;面向對象是基于面向過程的。讓我們的角色從執行者變為指揮者。面向過程是面向對象的基礎。
2、一切皆對象,境界:萬物皆對象。
3、寫程序時:先考慮對象。有對象時,直接用。沒對象時,自己造一個對象。
4、人開門:名稱提煉法。事物:人、門。示例:人{開門(門){門。開();}};門{開(){操作門軸等。}}。
5、面向對象的三個特征:封裝,繼承,多態。
6、以后的開發:其實就是找對象使用。沒有對象,就創建一個對象。
7、找對象,建立對象,使用對象,維護對象的關系。
8、類和對象的關系:類就是:對現實生活中事物的描述。對象:就是這類事物,實實在在的個體。映射到java中,描述就是class定義的類。具體對象就是對于java在堆內存中用new建立實體。
9、類與對象示例:圖紙:汽車,汽車,汽車。可以理解為:類就是圖紙;汽車就是堆內存中的對象。
10、描述事物其實就在是描述事物的屬性和行為。
11、屬性對應是類中的變量,行為對應的類中的函數(方法)。其實定義類,就是在描述事物,就是在定義屬性和行為。屬性和行為共同成為類中的成員(成員變量和成員函數(方法))。
12、引用變量:類類型變量。記住:類類型變量指向對象。
13、就需要該對象做使用,在java指揮方式是:對象.對象成員。
14、成員變量和局部變量:作用范圍:成員變量作用于整個類中。局部變量作用于函數中,或者語句中。在內存中的位置:成員變量:在堆內存中,因為對象的存在,才在內存中存在。局部變量:存在棧內存中。
15、匿名對象:匿名對象是對象的簡化形式;匿名對象兩種使用情況:當對對象方法僅進行一次調用的時;匿名對象可以作為實際參數進行傳遞。
二、面向對象:封裝
16、封裝的定義:是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。
17、封裝的好處:將變化隔離;便于使用;提高重用性;提高安全性。
18、封裝原則:將不需要對外提供的內容隱藏起來;把屬性都隱藏,提供公共方法對其訪問。
19、函數是最小的封裝體;類是較小的封裝體;包是中級封裝體;框架是較大的封裝體。20、關鍵字private:私有,權限修飾符:用于修飾類中的成員(成員變量,成員函數)。在類中隱藏。私有只在本類中有效。
21、注意:私有僅僅是封裝的一種表現形式。
22、之所以對外提供訪問方式,就是因為可以在訪問方式中加入邏輯判斷語句。對訪問的數據進行操作。提高代碼健壯性。
23、關鍵字private:將成員變量私有化。對外提供對應的set,get方法對其進行訪問。提高對數據訪問的安全性。
三、面向對象:構造函數
24、構造函數的特點:函數名與類名相同;不用定義返回值類型;不可以寫return語句。
25、構造函數的作用:給對象進行初始化。注意:默認構造函數的特點;多個構造函數是以重載的形式存在的。
26、構造函數:對象一建立就會調用與之對應的構造函數。構造函數的作用:可以用于給對象進行初始化。
27、構造函數的小細節:當一個類中沒有定義構造函數時,那么系統會默認給該類假如一個空參數的構造函數。當在類中自定義了構造函數后,默認的構造函數就沒有了。
28、構造函數和一般方法(函數)的區別:A:構造函數和一般函數在寫法上有不同。B:在運行上也有不同。構造函數是在對象一建立就運行。就對象初始化。而一般方法是對象調用才執行,是給對象添加對象具備的功能。C:一個對象建立,構造函數只運行一次。而一般方法可以被該對象調用多次。
29、什么時候定義構造函數呢:當分析事物時,該事物存在具備一些特征或者行為,那么將這些內容定義在構造函數中。30、構造代碼塊:作用:給對象進行初始化。對象一建立就運行,而且優先于構造函數執行。
31、構造代碼塊和構造函數區別:構造代碼塊是給所有對象進行統一初始化,而構造函數是給對應的對象進行初始化。
32、構造代碼塊中定義的是不同對象共性的初始化內容。
四、面向對象:this關鍵字
33、關鍵字this:看上去,是用于區分局部變量和成員變量同名情況。
34、關鍵字this的特點:就代表本類的對象,到底代表哪一個呢?this代表它所在函數所屬對象的引用。簡單說:哪個對象在調用this所在的函數,this就代表哪個對象。
35、this的應用:當定義類中功能時,該函數內部要用到該函數的對象時,這時用this來表示這個對象。但凡本類功能內部使用到了本類對象,都用this代替。
36、this語句:用于構造函數之間函數互相調用。this語句:只能定義在構造函數的第一行。因為初始化要先執行。
37、this語句只能用于構造函數間,不能用于一般函數。
2016年01月11日
day06
一、面向對象:static關鍵字
1、static(靜態)關鍵字:用于修飾成員(成員變量和成員函數)。被修飾后的成員具備以下特點:隨著類的加載而加載;優先于對象存在;被所有對象所共享;可以直接被類名調用。使用注意:靜態方法只能訪問靜態成員;靜態方法中不可以寫this,super關鍵字;主函數是靜態的。
2、用法:是一個修飾符,用于修飾成員(成員變量,成員函數)。當成員被靜態修飾后,就多了一個調用方式,除了可以被對象調用外,還可以直接被類名用。類名.成員變量。
3、實例變量和類變量的區別:A,存放位置:類變量隨著類的加載而存在于方法區中。實例變量隨著對象的建立存在于堆內存中。B,生命周期:類變量生命周期最長,隨著類的消失而消失。實例變量隨著對象的消失而消失。
4、靜態使用注意事項:A,靜態方法只能訪問靜態成員。非靜態方法既可以訪問靜態也可以訪問非靜態。B,靜態方法中不可以定義thsi,super關鍵字。因為靜態優先于對象存在,所有靜態方法中不可以出現this。C,主函數是靜態的。
5、靜態優缺點:優:對對象的共享數據進行單獨空間的存儲,節省空間。沒有必要每個對象中都存儲一份。可以直接被類名調用。缺:生命周期過長。訪問出現局限性。(靜態雖好,只能訪問靜態。)
6、public static void main(String[] args)主函數:是一個特殊的函數,作用程序的入口,可以被jvm調用。
7、主函數的定義:public:代表著該函數訪問權限是最大的。static:代表主函數隨著類的加載就已經存在了。void:代表主函數沒有具體的返回值。main:不是關鍵字,但是是一個特殊的單詞,可以被jvm識別。(String[] args):函數的參數,參數類型是一個數組,該數組中的元素是字符串。字符串類型的數組。
8、主函數是固定格式的:jvm識別。jvm在調用主函數時,傳人的是new String[0]。
9、什么時候使用靜態?要從兩方面下手:因為靜態修飾的內容有成員變量和函數。什么時候定義靜態變量(類變量)呢?當對象中出現共享數據時,該數據靜態所修飾。對象中的特有數據要定義成非靜態存在于堆內存中。
10、什么時候定義靜態函數呢?當功能內部沒有訪問到非靜態數據(對象的特有數據),那么該功能可以定義成靜態的。
11、靜態的應用:A每一個應用程序中都有共性的功能,可以將這些功能進行抽取,獨立封裝。以便復用。B雖然可以通過建立ArrayTool的對象使用這些工具方法,對數組進行操作。但是:1,對象是用于封裝數據的,可以ArrayTool對象并未封裝特特有數據。2,操作數組的每一個方法都沒有用到ArrayTool對象中的特有數據。C這時就考慮,讓程序更嚴謹,是不需要對象的。可以將ArrayTool中的方法都定義成static的,直接通過類名調用即可。D將方法都靜態后,可以方便于使用,但是該類還是可以被其他程序建立對象的。為了更為嚴謹,強制讓該類不能建立對象。可以通過將構成函數私有化完成。
12、接下來,將ArrayTool.class文件發送給其他人,其他人只要將該文件設置到classpath路徑下,就可以使用該工具類。但是,很遺憾,該類中到底定義了多少個方法,對方不清楚。因為該類并沒有使用說明書。開始制作程序的說明書。java的說明書通過文檔注釋來完成。
13、注釋符號:/***/;@author作者;@version版本;@param參數;@return返回值。
14、靜態代碼塊。格式:static{靜態代碼塊中的執行語句。}。
15、靜態代碼塊的特點:隨著類的加載而執行,只執行一次,并優先于主函數。用于給類進行初始化的。
16、重點:對象的初始化過程:Person p=new Person(“zhangsan”,20);該句話都做了什么事情?A因為new用到了Person。Class。所有會先找到Person。Class文件并加載到內存中。B執行該類中的static代碼塊,如果有的話,給Person.class類進行初始化。C在堆內存中開辟空間,分配內存地址。D在堆內存中建立對象的特有屬性,并進行默認初始化。E對屬性進行顯示初始化。F對對象進行構造代碼塊初始化。G對對象進行對應的構造函數初始化。H將內存地址付給棧內存中的p變量。
二、面向對象:單例設計模式
17、設計模式:解決某一類問題最行之有效的方法。java中23中設計模式:單例設計模式:解決一個類在內存只存在一個對象。
18、想要保證對象唯一。1,為了避免其他程序過多建立該類對象。先禁止其他程序建立該類對象。2,還為了讓其他程序可以訪問到該類對象,只好在本類中,自定義一個對象。3,為了方便其他程序對自定義對象的訪問,可以對外提供一些訪問方式。
19、這三步怎么用代碼體現呢?1,將構造函數私有化。2,在類中創建一個本類對象。3,提供一個方法可以獲取到該對象。
20、對于事物該怎么描述,還怎么描述。當需要將該事物的對象保證在內存中唯一時,就將以上的三部加上即可。
21、單例設計方法一:這個是先初始化對象。稱為:餓漢式。Single類一進內存,就已經創建好了對象。開發一般用餓漢式:安全、簡單。
22、單例設計方法二:對象被調用時,才初始化,也叫做對象的延時加載。稱為:懶漢式。Single類進內存,對象還沒有存在,只有調用了getInstance方法時,才建立對象。
23、記住原則:定義單例,建議使用餓漢式。但面試時:考懶漢式的多。特別是如何解決懶漢式的缺點。2016年01月12日
day07
一、面向對象:繼承
1、繼承:1,提高代碼的復用性。2,讓類與類之間產生了關系。有了這個關系,才有了多態的特性。關鍵字:extends。
2、注意:千萬不要為了獲取其他類的功能,簡化代碼而繼承。必須是類與類之間有所屬關系才可以繼續。所屬關系is a。
3、java語言中:java只支持單繼承,不支持多繼承。原因:因為多繼承容易帶來安全隱患:當多個父類中定義了相同功能,當功能內容不同時,子類對象不確定要運行哪一個。但是java保留這種機制,并用另一種體現形式來完成表示,多實現。
4、java支持多層繼承。也就是一個繼承體系。如何使用一個繼承體系中的功能呢?想要使用體系,先查閱父類的描述,因為父類中定義的是該體系中共性功能。通過了解共性功能,就可以知道該體系的基本功能。那么這個體系已經可以基本使用了。
5、那么在具體調用時,要創建最子類的對象,為什么呢?一是因為有可能父類不能創建對象,二是創建子類對象可以使用更多的功能,包括基本的也包括特有的。
6、簡單一句話:查閱父類功能,創建子類對象使用功能。
7、this代表本類對象的引用,super代編父類對象的引用。
8、子父類出現后,類成員的特點:類中成員:A,變量。B,函數。C,構造函數。
9、子父類中的變量:如果子類中出現非私有的同名變量時,之類要訪問本類中的同名變量,用this子類要訪問父類中的同名變量,用super。super的使用和this的使用幾乎一致。this代表的是本類對象的引用。super代表的是父類對象的引用。
10、子父類中的函數:當子類出現和父類一模一樣的函數時,當子類對象調用該函數,會運行子類函數的內容。如同父類的函數被覆蓋一樣。這種情況是函數的另一個特性:重寫(覆蓋)。
11、修改以往的源碼絕對是災難。
12、單子類繼承父類,沿襲了父類的功能,到子類中,但是子類雖具備該功能,但是功能的內容卻和父類不一致,這時,沒有必要定義新功能,而是使用覆蓋特殊,保留父類的功能定義,并重寫功能內容。
13、注意:覆蓋:子類覆蓋父類,必須保證子類權限大于等于父類權限,才可以覆蓋,否則編譯失敗。靜態只能覆蓋靜態。
14、記住大家:重載:只看同名函數的參數列表。重寫:子父類方法要一模一樣。
15、子父類中的構造函數:發現在對子類對象進行初始化時,父類的構造函數也會運行。那是因為子類的構造函數默認第一行有一條隱式的語句super();super();會訪問父類中空參數的構造函數。而且子類中所有的構造函數默認第一行都是super()。
16、為什么子類一定要訪問父類中的構造函數:因為父類中的數據子類可以直接獲取,所有之類對象在建立時,需要先查看父類是如何對這些數據進行初始化的。所有之類在對象初始化時,要先訪問一下父類中的構造函數。如果要訪問父類中指定的構造函數,可以通過手動定義super語句的方式來指定。注意:super語句一定一定在子類構造函數第一行。
17、子類的實例化過程。結論:子類的所有的構造函數默認都會訪問父類中空參數的構造函數。因為子類每一個構造函數內的每一行都有一句隱式的super();當父類中沒有空參數的構造函數時,子類必須手動通過super語句或者this語句形式來指定要訪問父類中的構造函數。當然:子類的構造函數第一行也可以收到指定this語句來訪問本類中的構造函數。子類中至少會有一個構造函數會訪問父類中的構造函數。
18、關鍵字:final:final可以修飾類,方法(函數),變量;final修飾的類不可以被繼承;final修飾的方法(函數)不可以被覆蓋;final修飾的變量是一個常量,只能被賦值一次;內部類只能訪問被final修飾的局部變量。
二、面向對象:抽象類
19、當多個類中出現相同功能,但是功能主體不同,這時也可以進行向上抽取。這時,只抽取功能定義,而不抽取功能主體。20、抽象:看不懂。
21、抽象類的特點:A,抽象方法一定定義在抽象類中。B,抽象方法和抽象類都必須被abstract關鍵字修飾。C,抽象類不可以被new創建對象。因為調用抽象方法沒意義。D,抽象類中的抽象方法要被使用,必須由子類復寫其所有的抽象方法后,建立子類對象調用。
22、如果子類只覆蓋了部分抽象方法,那么該子類還是一個抽象類。
23、抽象類和一般類沒有太大的不同。該如何描述事物,就如何描述事物,只不過,該事物中出現了一些看不懂的東西。這些不確定的部分,也是該事物的功能,需要明確出現,但是無法定義主體。通過抽象方法來表示。
24、抽象類比一般類多了抽象方法(函數)。就是在類中可以定義抽象方法。抽象類不可以實例化(即不可以new)。特殊:抽象類中可以不定義抽象方法,這樣做僅僅是不讓該類建立對象。
25、什么是模板方法呢?在定義功能時,功能的一部分是確定的,但是有一部分是不確定,而確定的部分在使用不確定的部分。那么這時就將不確定的部分暴露出去。由該類的子類去實現。
三、面向對象:接口
26、接口:格式:interface{}。接口中的成員修飾符是固定的。成員常量:public static final;成員函數:public abstract。接口的出現將“多繼承”通過另一種形式體現出來,即“多實現”。
26、接口:初期理解:可以認為是一個特殊的抽象類。當抽象類中的方法都是抽象的,那么該類可以通過接口的形式來表示。class用于定義類。interface用于定義接口。
27、接口:是不可以創建對象的,因為有抽象方法。需要被子類實現,子類對接口中的抽象方法全部覆蓋后,子類才可以實例化。否則子類是一個抽象類。接口可以被類多實現,也是對多繼承不支持的轉換形式。java支持多實現。用關鍵字:implements。
28、接口與接口之間支持多繼承,類與類之間只支持單繼承。
29、接口的特點:接口是對外暴露的規則;接口是程序的功能擴展;接口可以用來多實現;類與接口之間是實現關系,而且類可以繼承一個類的同時實現多個接口;接口與接口之間可以有繼承關系。2016年01月13日
day08
一、面向對象:多態
1、多態的定義:某一類事物的多種存在形態,例:動物中貓,狗。貓這個對象對應的類型是貓類型:貓x=new 貓();同時貓也是動物中的一種,也可以把貓稱為動物。動物y=new 貓();動物是貓和狗具體事物中抽取出來的父類型;父類型引用指向了子類對象。
2、多態的體現:父類的引用指向了自己的子類對象。父類的引用也可以接收自己的子類對象。
3、多態的前提:必須是類與類之間有關系。要么繼承,要么實現。通常還有一個前提:存在覆蓋。
4、多態的弊端:提高了擴展性,但是只能使用父類的引用訪問父類中的成員。
5、多態的好處:多態的出現大大的提高了程序的擴展性。
6、引用數據類型轉換:類型提升。向上轉型。如果想要調用貓的特有方法時,如何操作?強制將父類的引用,轉成子類類型。向下轉型。注意:千萬不要出現這樣的操作,就是將父類對象轉成子類類型。我們能轉換的是父類引用指向了自己的子類對象時,該引用可以被提升,也可以被強制轉換。多態自始至終都是子類對象在做著變量。
7、關鍵字:instanceof。判斷引用數據類型是否一致。
8、在多態中成員函數的特點:在編譯時期:參閱引用型變量所屬的類中是否有調用的方法。如果有,編譯通過,如果沒有編譯失敗。在運行時期:參閱對象所屬的類中是否有調用的方法。簡單總結就是:成員函數在多態調用時,編譯看左邊,運行看右邊。
9、在多態中,成員變量的特點:無論編譯和運行,都參考左邊(引用型變量所屬的類)。
10、object類:是所有對象的直接或者間接父類,傳說中的上帝。該類中定義的肯定是所有對象都具備的功能。
11、Object類中已經提供了對對象是否相同的比較方法。如果自定義類中也有比較相同的功能,沒有必要重新定義。只要沿襲父類中的功能,建立自己特有的比較內容即可。這就是覆蓋。
2016年01月15日
day09
一、面向對象:內部類
1、內部類的定義:將一個類定義在另一個類的里面,對里面那個類就稱為內部類(內置類,嵌套類)。
2、內部類訪問特點:內部類可以直接訪問外部類中的成員,包括私有成員。之所以可以直接訪問外部類中的成員,是因為內部類中持有了一個外部類的引用,格式:外部類名.this。而外部類要訪問內部類中的成員必須要建立內部類的對象。
3、訪問格式:當內部類定義在外部類的成員位置上,而且非私有,可以在外部其他類中。可以直接建立內部類對象。格式:外部類名.內部類名變量名=外部類對象.內部類對象;Outer.Inner in=new Outer().new Inner()。
4、當內部類在成員位置上,就可以被成員修飾符所修飾。比如,private:將內部類在外部類中進行封裝。static:內部類就具備了static的特性。當內部類被static修飾后,只能直接訪問外部類中的static成員。出現了訪問局限。
5、在外部其他類中,如何直接訪問static內部類的非靜態成員呢?new Outer.Inner().function()。在外部其他類中,如何直接訪問static內部類的靜態成員呢?Outer.Inner().function()。
6、注意:當內部類中定義了靜態成員,該內部類必須是static的。當外部類中的靜態方法訪問內部類時,內部類也必須是static的。
7、當描述事物時,事物的內部還有事物,該事物用內部類來描述。因為內部事物在使用外部事物的內容。
8、內部類定義在局部時,1,不可以被成員修飾符修飾;2,可以直接訪問外部類中的成員,因為還持有外部類中的引用;但是不可以訪問它所在的局部中的變量。只能訪問被final修飾的局部變量。
9、匿名內部類:1,匿名內部類其實就是內部類的簡寫格式。2,定義匿名內部類的前提:內部類必須繼承一個類或者實現接口。3,匿名內部類的格式:new 父類或者接口(){定義子類的內容}。4,其實匿名內部類就是一個匿名子類對象。而且這個對象有點胖。可以理解為帶內容的對象。5,匿名內部類中定義的方法最好不要超過3個。
二、面向對象:異常
10、異常:異常的體系:Throwable:(Error:通常出現重大問題如:運行的類不存在或者內存溢出等;不編寫針對代碼對其處理。Exception:在運行時運行出現的一起情況,可以通過try catch finally)。Exception和Error的子類名稱都是以父類名作為后綴。
11、異常:就是程序在運行時出現不正常情況。
12、異常由來:問題也是現實生活中一個具體的事物,也可以通過java的類的形式進行描述,并進行封裝。其實就是java對不正常情況進行描述后的對象體現。
13、對于問題的劃分:兩種:一種是嚴重的問題。一種是非嚴重的問題。對于Error一般不編寫針對性的代碼對其進行處理。對于嚴重的,java通過Error類進行描述。對于非嚴重的,java通過Exception類進行描述。對于Exception可以使用針對性的處理方式進行處理。
14、無論Error或者Exception都具體有一些共性內容。比如:不正常情況的信息,引發原因等。
15、異常的處理:java提供了特有的語句進行處理。Try{需要被檢測的代碼;}catch{異常類變量}{處理異常的代碼:(處理方式)}finally{一定會執行的語句;}。
15、throws Exception//在功能上通過throws的關鍵字聲明了該功能有可能會出現問題。在函數上聲明異常。便于提高安全性,讓調用者進行處理。不處理編譯失敗。
16、對多異常的處理。1,聲明異常時,建議聲明更為具體的異常。這樣處理得可以更具體。2,對聲明幾個異常,就對應有幾個catch塊。不要定義多余的catch塊。如果多個catch塊中的異常出現繼承關系,父類異常catch塊放在最下面。
17、建議在進行catch處理時,catch中一定要定義具體處理方式。不要簡單定義一句 e.printStackTrace(),也不要簡單的就書寫一條輸出語句。
18、自定義異常:因為項目中會出現特有的問題,而這些問題并未被java所描述并封裝對象。所有對于這些特有的問題可以按照java的對問題封裝的思想。將特有的問題,進行自定義的異常封裝。
19、當在函數內部出現了throw拋出了異常對象,那么就必須要給對應的處理動作。要么在內部try catch處理。要么在函數上聲明讓調用者處理。20、如何定義異常信息呢?因為父類中已經把異常信息的操作都完成了。所有子類只要在構造時,將異常信息傳遞給父類通過super語句。那么就可以直接通過getMessage方法獲取自定義的異常信息。
21、自定義異常:必須是自定義類繼承Exception。繼承Exception原因:異常體系有一個特點:因為異常類和異常對象都被拋出。他們都具備可拋性。這個可拋性是Throwable這個體系中獨有特點。
22、只有這個體系中的類和對象才可以被throws和throw操作。
23、throws和throw的區別:throws使用在函數上。throw使用在函數內。throws后面跟的異常類。可以跟多個。用逗號隔開。throw后跟的是異常對象。
24、Exception中有一個特殊的子類異常RuntimeException運行時異常。如果在函數內容拋出該異常,函數上可以不用聲明,編譯一樣通過。如果在函數上聲明了該異常。調用者可以不用進行處理,編譯一樣通過。
25、之所以不用在函數聲明,是因為不需要讓調用者處理。當該異常發生,希望程序停止。因為在運行時,出現了無法繼續運算的情況,希望停止程序。對代碼進行修正。
26、自定義異常時:如果該異常的發生,無法在繼續進行運算,就讓自定義異常繼承RuntimeException。
27、對于異常分兩種:1,編譯時被檢測的異常。2,編譯時不被檢測的異常(運行時異常,RuntimeException以及其子類)。
2016年01月16日
day10
一、面向對象:異常
1、finally中存放的是一定會被執行的代碼。
2、finally代碼塊:定義一定執行的代碼。通常用于關閉資料。
3、記住一點:catch是用于處理異常。如果沒有catch就代表沒有被處理過,如果該異常時檢測時的異常,就必須聲明出去。
4、異常在子父類覆蓋中的體現:A,子類在覆蓋父類時,如果父類的方法拋出異常,那么子類的覆蓋方法,只能拋出父類的異常或者該異常的子類。B,如果父類方法拋出多個異常,那么子類在覆蓋該方法時,只能拋出父類異常的子集。C,如果父類或者接口的方法中沒有異常拋出,那么子類在覆蓋方法時,也不可以拋出異常。如果子類方法發生了異常。就必須要進行try處理。絕對不能拋。
5、異常:是什么?是對問題的描述,將問題進行對象的封裝。
6、異常體系:Throwable:|--Error;|--Exception(|--RuntimeException)。
7、異常體系的特點:異常體系中的所有類以及建立的對象都具備可拋性。也就是說可以被throw和throws關鍵字所操作。只有異常體系具備這個特點。
8、throw和throws的用法:throw定義在函數內,用于拋出異常對象。throws定義在函數上,用于拋出異常類,可以拋出多個用逗號隔開。
9、當函數內容有throw拋出異常對象,并未進行try處理。必須要在函數上聲明,都在編譯失敗。注意:RuntimeException除外。也就是說,函數內如果拋出的RuntimeException異常,函數上可以不用聲明。
10、如果函數聲明了異常,調用者需要進行處理。處理方法可以throws和try。
11、異常有兩種:編譯時被檢測異常:該異常在編譯時,如果沒有處理(沒有拋也沒有try),編譯失敗。該異常被標識,代表著可以被處理。運行時異常(編譯時不檢測):在編譯時,不需要處理,編譯器不檢查。該異常的發生,建立不處理,讓程序停止。需要對代碼進行修正。
12、異常處理語句:try(需要被檢測的代碼;)catch(處理異常的代碼;)finally(一定會執行的代碼;)。有三種結合格式:try catch;try finally;try catch finally。注意:A,finally中定義的通常是關閉資源代碼。因為資源必須釋放。B,finally只有一種情況不會執行。當執行到System.exit(0);finally不會執行。
13、自定義異常:定義類繼續Exception或者RuntimeException。A,為了讓該自定義類具備可拋性。B,讓該類具備操作異常的共性方法。當要定義自定義異常的信息時,可以使用父類已經定義好的功能。異常異常信息傳遞給父類的構成函數。class MyException extends Exception{MyException(String message){super(message);}}。
14、自定義異常:按照java的面向對象思想,將程序中出現的特有問題進行封裝。
15、異常的好處:A,將問題進行封裝。B,將正常流程代碼和問題處理代碼相分離,方便于閱讀。
16、異常的處理原則:A,處理方式有兩種:try或者throws。B,調用到拋出異常的功能時,拋出幾個,就處理幾個。一個try對應多個catch。C,多個catch,父類的catch放到最下面。D,catch內需要定義針對性的處理方式。不要簡單的定義printStackTrace,輸出語句。也不要不寫。當捕獲到的異常,本功能處理不了時,可以繼續在catch中拋出。
17、異常的注意事項:在子父類覆蓋時:A,子類拋出的異常必須是父類異常的子類或者子集。B,如果父類或者接口沒有異常拋出時,子類覆蓋出現異常,只能try不能拋。
二、面向對象:包
18、包(package):對類文件進行分類管理。給類提供多層命名空間。寫在程序文件的第一行。類名的全稱的格式是:包名.類名。包也是一種封裝形式。
19、關鍵字protected:/*保護*/權限。權限修飾符。可用于修飾包里的父類。
20、總結:包與包之間進行訪問,被訪問的包中的類以及類中的成員,需要public修飾。不同包中的子類還可以訪問直接父類中被protected權限修飾的成員。
21、包與包之間可以使用的權限只有兩種,public protected。
22、public
protected
default
private 同一個類中可以可以可以可以 同一個包中可以
可以可以 不可以 子類可以
可以不可以不可以 不同包中 可以不可以不可以不可以。
23、為了簡化類名的書寫,使用一個關鍵字import。import導入的是包中的類。建議,不要寫通配符*,需要用到包中的哪個類,就導入哪個類。
24、建議定義包名不要重復,可以使用url來完成定義,url是唯一的。
25、jar包:java的壓縮包:方便項目的攜帶。方便于使用,只要在classpath設置jar路徑即可。數據庫驅動,SSH框架等都以jar包體現的。2016年01月17日
day11
一、多線程:概述
1、進程:是一個正在執行中的程序。每一個進程執行都有一個執行順序。該順序是一個執行路徑,或者叫一個控制單元。
2、線程:就是進程中的一個獨立的控制單元。線程在控制著進程的執行。一個進程中至少有一個線程。
3、Java VM 啟動的時候會有一個進程java.exe。該進程中至少有一個線程負責java程序的執行。而且這個線程運行的代碼存在于main方法中。該線程稱之為主線程。擴展:其實更細節說明jvm,jvm啟動不止一個線程,還有負責垃圾回收機制的線程。
4、如何在自定義的代碼中,自定義一個線程呢?通過對API的查找,java已經提供了對線程這類事物的描述。就是Thread類。
5、創建線程的第一種方式:繼承Thread類。步驟:1,定義類繼承Thread。2,復寫Thread類中的run方法。目的:將自定義代碼存儲在run方法中,讓線程運行。3,調用線程的start方法,該方法有兩個作用:啟動線程;調用run方法。
6、發現運行結果每一次都不同:因為多個線程都獲取cpu的執行權。cpu執行到誰,誰就運行。明確一點,在某一時刻,只能有一個程序在運行。(多核除外)cpu在做著快速的切換,以達到看上去是同時運行的效果。我們可以形象把多線程的運行形容為在互相搶奪cpu的執行權。這就是多線程的一個特性:隨機性。誰搶到誰執行,至于執行多長,cpu說了算。
7、為什么要覆蓋run方法呢?Thread類用于描述線程。該類就定義了一個功能,用于存儲線程要運行的代碼,該存儲功能就是run方法。也就是說Thread類中的run方法,用于存儲線程要運行的代碼。
8、原來線程都有自己默認的名稱。Thread-編號。該編號從0開始。static Thread currentThread():獲取當前線程對象。getName():獲取線程名稱。設置線程名稱:setName或者構造函數。
9、創建線程的第二種方式:實現Runnable接口。
步驟:1,定義類實現Runnable接口。2,覆蓋Runnable接口中的run方法。目的:將線程要運行的代碼存放在run方法中。3,通過Thread類建立線程對象。4,將Runnable接口的子類對象作為實際參數傳遞給Thread類的構造函數。為什么要將Runnable接口的子類對象傳遞給Thread的構造函數?因為,自定義的run方法所屬的對象時Runnable接口的子類對象。所有要讓線程去指定指定對象的run方法。就必須明確該run方法所屬對象。5,調用Thread類的start方法開啟線程并調用Runnable接口子類的run方法。
10、實現方式和基礎方法有什么區別呢?實現方式好處:避免了單繼承的局限性。在定義線程時,建議使用實現方式。兩種方式區別:繼承Thread:線程代碼存放在Thread子類run方法中。實現Runnable:線程代碼存放在接口的子類的run方法中。
二、多線程:同步
11、多線程的運行出現了安全問題:問題的原因:當多條語句在操作同一個線程共享數據時,一個線程對多條語句只執行了一部分,汗沒有執行完,另一個線程參與進來執行。導致共享數據的錯誤。解決辦法:對多條操作共享數據的語句,只能讓一個線程都執行完。在執行過程過,其他線程不可以參與執行。java對于多線程的安全問題提供了專業的解決方式。就是同步代碼塊。synchronized(對象){需要被同步的代碼;}。
12、對象如同鎖。持有鎖的線程可以在同步中執行。沒有鎖的線程即使獲取了cpu的執行權,也進不去,因為沒有獲取鎖。
13、同步的前提:1,必須要有兩個或者兩個以上的線程。2,必須是多個線程使用同一個鎖。必須保證同步中只能有一個線程在運行。
14、好處:解決了多線程的安全問題。弊端:多個線程需要判斷鎖,較為消耗資源。
15、多線程安全問題:如何找到問題:1,明確哪些代碼是多線程運行代碼。2,明確共享數據。3,明確多線程運行代碼中哪些語句是操作共享數據的。
16、同步函數:將關鍵字synchronized放到函數名稱前。即把synchronized當作修飾符使用。
17、同步函數用的是哪一個鎖呢?函數需要被對象調用。那么函數都有一個所屬對象引用。就是this。所有同步函數使用的鎖是this。
18、如果同步函數被靜態修飾后,使用的鎖是什么呢?通過驗證,發現不再是this。因為靜態方法中也不可以定義this。靜態進內存時,內存中沒有本類對象,但是一定有該類對應的字節碼文件對象。類名.class 該對象的類型是Class。靜態的同步方法,使用的鎖是該方法所在類的字節碼文件對象。類名.class。
19、死鎖:同步中嵌套同步。而鎖卻不同。
2016年01月18日
day12
一、多線程:線程間通信
1、wait(),notify(),notifyALL(),用來操作線程為什么定義在了Object類中?這些方法存在于同步中。使用這些方法時必須要標識所屬的同步的鎖。鎖可以是任意對象,所以任意對象調用的方法一定定義Object類中。
2、wait()和sleep()有什么區別?wait():釋放資源,釋放鎖。sleep():釋放資源,不釋放鎖。
3、wait:notify:notifyALL:都被使用在同步中,因為要對持有監視器(鎖)的線程操作。所有要使用在同步中,因為只有同步才具有鎖。
4、為什么這些操作線程的方法要定義在Object類中呢?因為這些方法在操作同步中線程時,都必須要標識他們所操作線程只有的鎖。只有同一個鎖上的被等待線程,可以被同一個鎖上notify喚醒。不可以對不同鎖中的線程進行喚醒。也就是說,等待和喚醒必須是同一個鎖。而鎖可以是任意對象,所有可以被任意對象調用的方法定義在Object類中。
5、JDK1.5 中提供個多線程升級解決方案。將同步synchronized替換成現實Lock操作。將Object中的wait,notify,notifyAll,替換了condition對象。該對象可以Lock鎖,進行獲取。
二、多線程:其他操作
6、停止線程:A:定義循環結束標記:因為線程運行代碼一般都是循環,只要控制了循環即可。B:使用interrupt(中斷)方法:該方法時結束線程的凍結狀態,使線程回到運行狀態中來。注意:stop方法已經過時不再使用。
7、如何停止線程?只有一種,run方法結束。開啟多線程運行,運行代碼通常是循環結構。只要控制住循環,就可以讓run方法結束,也就是線程結束。特殊情況:當線程處于了凍結狀態。就不會讀取到標記。那么線程就不會結束。
8、當沒有指定的方式讓凍結的線程恢復到運行狀態時,這時需要對凍結進行清除。強制讓線程恢復到運行狀態中來。這樣就可以操作標記讓線程結束。Thread類中提供該方法:interrupt方法。
9、join方法:當A線程執行到了B線程的.join()方法時,A就會等待。等B線程都執行完,A才會執行。join可以用來臨時加入線程執行。
2016年01月19日
day13
一、String類:概述
1、String類:字符串是一個特殊的對象。字符串一旦初始化就不可以被改變。String str=”abc”;String str1=new String(“abc”)。Str和str1的區別:str在內存中有一個對象。Str1在內存中有兩個對象。
二、***重點:String類:常見操作
常見的操作有哪些? “abcd” 1,獲取。
1.1 字符串中包含的字符數,也就是字符串的長度。
int length():獲取長度。
1.2 根據位置獲取位置上某個字符。
char charAt(int index):獲取位置上某個字符。
1.3 根據字符獲取該字符在字符串中位置。
int indexOf(int ch):獲取該字符在字符串中位置。返回的是ch在字符串中第一次出現的位置。
int indexOf(int ch,int fromIndex):從fromIndex指定位置開始,獲取ch在字符串中出現的位置。
int indexOf(String str):返回的是str在字符串中第一次出現的位置。
int indexOf(String str,int fromIndex):從fromIndex指定位置開始,獲取str在字符串中出現的位置。
int lastIndexOf(int ch):反向索引。2,判斷。
2.1 字符串中是否包含某一個子串。
boolean contains(str);
特殊之處:indexOf(str):可以索引str第一次出現位置,如果返回-1,表示該str不在字符串中存在。
2.2 2.3 2.4 2.5 2.6 所以,也可以用于對指定判斷是否包含。
if(str.indexOf(“aa”)!=-1)而且該方法既可以判斷又可以獲取出現的位置。字符串是否有內容。
boolean isEmpty(str):原理就是判斷長度是否為0。字符串是否是以指定內容開頭。boolean startsWith(str);字符串是否是以指定內容結尾。boolean endsWith(str);判斷字符串的內容是否相同。復寫了Object類中的equals方法。boolean equals(str);判斷內容是否相同,并忽略大小寫。boolean equalsIgnoreCass();3,轉換。
3.1 將字符數組轉成字符串。
構造函數:String(char[])
String(char[],offset,count):將字符數組中的一部分轉成字符串。
靜態方法:static String copyValueOf(char[]);
static String copyValueOf(char[] data,int offset,int count);
static String valueOf(char[]);
3.2 將字符串轉成字符數組。//重點**。
char[] toCharArray();3.3 將字節數組轉成字符串。
String(byte[])String(byte[],offset,count):將字節數組中的一部分轉成字符串。3.4 將字符串轉成字節數組。
byte[] getBytes();3.5 將基本數據類型轉成字符串。
static String valueOf(int)
static String valueOf(double)
//3+“";//String.valueOf(3);
特殊:字符串和字節數組在轉換過程中,是可以指定編碼表的。4,替換。
String replace(oldchar,newchar);5,切割。
String[] split(regex);6,子串。獲取字符串中的一部分。
String substring(begin);String substring(begin,end);7,轉換,去除空格,比較。
7.1 將字符串轉成大寫或者小寫。
String toUpperCase();
String toLowerCase();7.2 將字符串兩端的多個空格去除。
String trim();7.3 對兩個字符串進行自然順序的比較。
int compareTo(string);
三、String類:StringBuffer
8、StringBuffer類:字符串的注組成原理就是通過該類實現的。StringBuffer可以對字符串內容進行增刪。StringBuffer是一個容器。很多方法與String相同。StringBuffer是可變長度的。
9、StringBuffer是字符串緩沖區。是一個容器。
10、緩沖區的特點:1,而且長度是可變化的。2,可以直接操作多個數據類型。3,最終會通過toString方法變成字符串。
11、StringBuffer常見操作: C create U update R read D delete 1,存儲。
StringBuffer append():將指定數據作為參數添加到已有數據的結尾處。
StringBuffer insert(index,數據):可以將數據插入到指定index位置。2,刪除。
StringBuffer delete(start,end):刪除緩沖區中的數據,包含start,不包含end。
StringBuffer deleteCharAt(index):刪除指定index位置的字符。3,獲取。
char charAt(int index);int indexOf(String str);int lastIndexOf(String str);int length();String substring(int start,int end);4,修改。
StringBuffer replace(start,end,string);void setCharAt(int index,char ch);5,反轉。
StringBuffer reverse();6,將緩沖區中指定數據存儲到指定字符數組中。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)。
12、JDK1.5版本之后出現了StringBuilder。
StringBuffer是線程同步。單線程使用StringBuffer效率較低。多線程使用StringBuffer保證了安全性。
StringBuilder是線程不同步。單線程使用StringBuilder提高了效率。多線程使用StringBuilder可能存在安全問題,但可以通過自定義鎖來解決安全問題。以后開發,建議使用StringBuilder。
13、升級三個因素:1,提高效率。2,簡化書寫。3,提高安全性。
四、基本數據類型對象包裝類
14、基本數據類型對象包裝類的最常見作用:就是用于基本數據類型和字符串類型之間做轉換。
15、數據類型轉換:
A:基本數據類型轉成字符串。
基本數據類型+”“ 基本數據類型.toString(基本數據類型值);如:Integer.toString(34);//將34整數變成”34“。B:字符串轉成基本數據類型。
靜態:基本數據類型包裝類.parseInt(字符串);如:xxx a=Xxx.parseXxx(String);
int a=Integer.parseInt(”123“);
double d=Double.parseDouble(”12.23“);
boolean b=Boolean.parseBoolean(”true“);非靜態:
Integer i=new Integer(”123");
int num=i.intValue();C:十進制轉成其他進制。
toBinaryString();toHexString();toOctalString();D:其他進制轉成十進制。
parseInt(string,radix)。
2016年01月22日
day14
一、集合框架:概述
1、集合類:為什么會出現集合類?面向對象語言對事物的體現都是以對象的形式,所有為了方便對多個對象的操作,就對對象進行存儲,集合就是存儲對象最常用的一種方式。
2、數組和集合類同是容器,有何不同?數組雖然也可以存儲對象,但長度是固定的;集合長度是可變的,數組中可以存儲基本數據類型,集合只能存儲對象。
3、集合類的特點:集合只用于存儲對象,集合長度是可變的,集合可以存儲不同類型的對象。
4、為什么會出現這么多的容器呢?因為每一個容器對數據的存儲方式有所不同。這個存儲方式稱之為:數據結構。
5、add方法的參數類型是Object。以便于接收任意類型對象。集合中存儲的都是對象的引用(地址)。
6、什么是迭代器呢?其實就是集合的取出元素的方式。
二、集合框架:List類
7、List: 特有方法。凡是可以操作角標的方法都是該體系特有的方法。增
add(index,element);addAll(index,Collection);刪
remove(index);改
set(index,element);查
get(index);subList(from,to);listIterator();
8、List集合特有的迭代器。ListIterator是Iterator的子接口。在迭代時,不可以通過集合對象的方法操作集合中的元素。因為會發生ConcurrentModificationException異常。所有,在迭代器時,只能用迭代器的方法操作元素,可以Iterator方法時優先的,只能對元素進行判斷,取出,刪除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。該接口只能通過List集合的ListIterator方法獲取。
9、Collection |--List:元素是有序的,元素可以重復。因為該集合體系有索引。
|--ArrayList:底層的數據結構使用的是數組結構。特點:查詢速度很快。但是增刪稍慢。線程不同步。
|--LinkedList:底層使用的是鏈表數據結構。特點:增刪速度很快,查詢速度稍慢。
|--Vector:底層是數據數據結構。線程同步。被ArrayList替代了。
|--Set:元素是無序的,元素不可以重復。
10、枚舉就是Vector特有的取出方式。發現枚舉和迭代器很像。其實枚舉和迭代是一樣的。因為枚舉的名稱以及方法的名稱都過長。所有被迭代器取代了。枚舉郁郁而終了。
11、LinkedList:特有方法: addFirst();addLast();
getFirst();getLast();獲取元素,但是不刪除元素。如果集合中沒有元素,會出現NoSuchElementException。
removeFirst();removeLast();獲取元素,但是元素被刪除。如果集合中沒有元素,會出現NoSuchElementException。
在JDK1.6出現了替代方法。offerFirst();offerLast();
peekFirst();peekLast();獲取元素,但是不刪除元素。如果集合中沒有元素,會返回null。
pollFirst();pollLast();獲取元素,但是元素被刪除。如果集合中沒有元素,會返回null。
三、集合框架:Set類
12、HaseSet是如何保證元素唯一性的呢?是通過元素的兩個方法,hashCode和equals來完成。如果元素的hashCode值相同,才會判斷equals是否為true。如果元素的hashCode值不同,不會調用equals。
13、注意:對于判斷元素是否存在,以及刪除操作,依賴的方法時元素的hashcode和equals方法。
2016年1月23日
day15
一、集合框架:Set類
1、Set:無序,不可以重復元素。
|--HashSet:數據結構是哈希表。線程是非同步的。
保證元素唯一性的原理:判斷元素的hashCode值是否相同。
如果相同,還會繼續判斷元素的equals方法,是否為true。
|--TreeSet:可以對Set集合中的元素進行排序。
底層數據結構是二叉樹。
保證元素唯一性的依據:
compareTo方法和return 0。
2、TreeSet排序的第一種方式:讓元素自身具備比較性。元素需要實現comparable接口,覆蓋comparaeTo方法。這種方式也稱為元素的自然順序,或者默認順序。
3、TreeSet排序的第二種方式:當元素自身不具備比較性時,或者具備的比較性不是所需要的。這時就需要讓集合自身具備比較性。在集合初始化時,就有了比較方式。
4、當元素自身不具備比較性,或者具備的比較性不是所需要的。這時需要讓容器自身具備比較性。定義了比較器,將比較器對象作為參數傳遞給TreeSet集合的構造函數。
5、當兩種排序都存在時,以比較器為主。定義一個類,實現Comparator接口,覆蓋compare方法。
二、集合框架:泛型
6、泛型:JDK1.5版本以后出現的新特性。用于解決安全問題,是一個類型安全機制。
7、泛型的好處:好處:1,將運行時期出現問題ClassCastException,轉移到了編譯時期。方便于程序員解決問題。讓運行時期問題減少。更加安全。2,避免了強制轉換麻煩。
8、泛型格式:通過<>來定義要操作的引用數據類型。在使用java提供的對象時,什么時候寫泛型呢?通常在集合框架中很常見。只要見到<>就要定義泛型。其實<>就是用來接收類型的。當使用集合時,將集合中要存儲的數據類型作為參數傳遞到<>即可。
9、什么時候定義泛型類?當類中要操作的引用數據類型不確定的時候,早期定義Object來完成擴展。現在定義泛型來完成擴展。
10、泛型類定義的泛型,在整個類中有效。如果被方法使用,那么泛型類的對象明確要操作的具體類型后,所有要操作的類型就已經固定了。為了讓不同方法可以操作不同類型,而且類型還不確定,那么可以將泛型定義在方法上。
11、特殊之處:靜態方法不可以訪問類上定義的泛型。如果靜態方法操作的引用數據類型不確定,可以將泛型定義在方法上。
12、? 通配符。也理解為占位符。泛型的限定:
? extends E:可以接收E類型或者E的子類型。上限。? super E:可以接收E類型或者E的父類型。下限。
2016年01月24日
day16
一、集合:Map概述
1、Map集合:該集合存儲鍵值對。一對一對往里存,而且要保證鍵的唯一性。
2、Map框架:
1,添加。
put(K key,V value)
putAll(Map extends K,? extends V> m)2,刪除。
clear()
remove(Object key)3,判斷。
containsValue(Object value)
containsKey(Object key)
isEmpty()4,獲取。
get(Object key)
size()
values()
entrySet()
keySet()
3、Map |--HashTable:底層是哈希表數據結構,不可以存入null鍵null值,該集合是線程同步的。JDK1.0。效率低。
|--HashMap:底層是哈希表數據結構,允許使用null鍵和null值,該集合是不同步的。JDK1.2。效率高。|--TreeMap:底層是二叉樹數據結構,線程不同步,可以用于給map集合中的鍵進行排序。
4、和Set很像。其實大家,Set底層就是使用了Map集合。
5、map集合的兩種取出方式:1,keySet:將map中所有的鍵存入到Set集合。因為Set具備迭代器。所以可以迭代方式取出所有的鍵,在根據get方法,獲取每一個鍵對應的值。Map集合的取出原理:將map集合轉成set集合。在通過迭代器取出。2,Set
6、Map.Entey 其實Entry也是一個接口,它是Map接口中的一個內部接口。
7、什么時候使用map集合呢?當數據之間存在映射關系時,就要先想到map集合。
8、map擴展知識:map集合被使用是因為具備映射關系。
2016年01月26日
day17
一、集合:Collections
1、fill方法可以將list集合中所有元素替換成指定元素。
二、集合:Arrays
2、Arrays:用于操作數組的工具類。里面都是靜態方法。
3、asList:將數組變成list集合。
4、把數組變成list集合有什么好處?可以使用集合的思想和方法來操作數組中的元素。注意:將數組變成集合,不可以使用集合的增刪方法。因為數據的長度是固定的。如果你增刪,那么會發生UnsupportedOperationException。
5、數組變集合:如果數組中的元素都是對象。那么變成集合時,數組中的元素就直接轉成集合中的元素。如果數組中的元素都是基本數據類型,那么會將該數組作為集合中的元素存在。
6、集合變數組:指定類型的數組到底要定義多長呢?當指定類型的數組長度小于了集合的size,那么該方法內部會創建一個新的數組,長度為集合的size。當指定類型的數組長度大于了集合的size,就不會新創建數組,而是使用傳遞進來的數組。所以創建一個剛剛好的數組最優。
7、為什么要講集合變數組?為了限定對元素的操作。不需要進行增刪了。
8、高級for循環:格式:for(數據類型變量名:被遍歷的集合(Collection)或者數組){}。
9、高級for循環、迭代器、ListIterator的區別:
高級for循環對集合進行遍歷。只能獲取集合元素,但是不能對集合進行操作。迭代器除了遍歷,還可以進行remove集合中元素的動作。
如果使用ListIterator,還可以在遍歷過程中對集合進行增刪改查的操作。
10、傳統for和高級for有什么區別呢?高級for有一個局限性:必須有被遍歷的目標。建議在遍歷數組的時候,還是希望使用傳統for。因為傳統for可以定義角標。
11、JDK1.5版本出現的新特性:可變參數:其實就是上一種數組參數的簡寫形式。不用每一次都手動的建立數組對象。只要將要操作的元素作為參數傳遞即可。隱式將這些參數封裝成了數組。
12、方法的可變參數。在使用時注意:可變參數一定要定義在參數列表最后面。
13、import static:靜態導入:例如:import static java.lang.System.*;//導入了System類中所有靜態成員。注意:當類名重名時,需要制定具體的包名。當方法重名時,指定具備所屬的對象或者類。
2016年01月28日
day18
一、其他對象:System
1、System:類中的方法和屬性都是靜態的。out:標準輸出,默認是控制臺。int:標準輸入,默認是鍵盤。描述系統一些信息。
2、獲取系統屬性信息:Properties getProperties()。因為Properties是Hashtable的子類,也就是Map集合的一個子類對象。那么可以通過map的方法取出該集合中的元素。該集合中存儲都是字符串。沒有泛型定義。
3、Runtime對象:該類并沒有提供構造函數。說明不可以new對象。那么會直接想到該類中的方法都是靜態的。發現該類中還有非靜態方法。說明該類肯定會提供方法獲取本類對象。而且該方法是靜態的,并返回值類型是本類類型。由這個特點可以看出該類使用了單例設計模式完成。該方式的static Runtime getRuntime()。
4、Math類:ceil方法:返回大于指定數據的最小整數。floor方法:返回小于指定數據的最大整數。round方法:四舍五入。pow方法:冪運算。random:返回0-1之間的隨機數。
二、IO流:概述
5、IO(Input Outpu)流:IO流用來處理設備之間的數據傳輸。Java對數據的操作是通過流的方式。Java用于操作流的對象都在IO包中。流按操作數據分為兩種:字節流與字符流。流按流向分為:輸入流,輸出流。
6、IO流常用基類:字節流的抽象基類:InputStream,OutputStream。字節流的抽象基類:Reader,Writer。注:由這四個類派生出來的子類名稱都是以其父類名作為子類名的后綴(如:InputStream的子類FilelnputStream,如:Reader的子類FileReader。)。
7、字符流和字節流:字節流兩個基類:InputStream
OutputStream。字符流兩個基類:Reader Writer。先學習字符流的特點:既然IO流是用于操作數據的,那么數據的最常見體現形式是:文件。2016年01月30日
day19
一、IO流:Buffered緩沖區
1、字符流的緩沖區:緩沖區的出現提高了對數據的讀寫效率。對應類:BufferedWriter;BufferedReader。緩沖區要結合流才可以使用。在流的基礎上對流的功能進行了增強。
2、緩沖區的出現是為了提高流的操作效率而出現的。所以在創建緩沖區之前,必須要先有流對象。該緩沖區中提供了一個跨平臺的換行符。newLine()。
3、字符讀取流緩沖區:該緩沖區提供了一次讀一行的方法readLine(),方便于對文本數據的獲取。當返回null時,表示讀到文件末尾。
4、readLine方法返回的時候只返回回車符之前的數據內容。并不返回回車符。
5、裝飾設計模式:當想要對已有的對象進行功能增強時,可以定義類,將已有對象傳入,基于已有的功能,并提供加強功能。那么自定義的該類稱為裝飾類。
6、裝飾類通常會通過構造方法接收被裝飾的對象。并基于被裝飾的對象的功能,提供更強的功能。
7、裝飾模式比繼承要靈活,避免了繼承體系臃腫。而且降低了類與類之間的關系。裝飾類因為是增強已有對象,具備的功能和已有的是相同的,只不過提供了更強功能。所以裝飾類和被裝飾類通常是都屬于一個體系中的。
二、IO流:字節流
8、字符流: FileReader FileWriter BufferedReader BufferedWriter 字節流:
InputStream
OutputStream BufferedInputStream
BufferedOutputStream
9、流操作的基本規律:
最痛苦的就是流對象有很多,不知道該用哪一個。通過兩個明確來完成。1,明確源和目的。
源:輸入流。InputStream Reader。
目的:輸出流。OutputStream Writer。2,明確操作的數據是否是純文本。
是:字符流。
不是:字節流。
3,當體系明確后,再明確要使用哪個具體的對象。
通過設備來進行區分:
源設備:內存,硬盤,鍵盤。目的設備:內存,硬盤,控制臺。
2016年01月31日
day20
一、IO流:File類
1、File類:用來將文件或者文件夾封裝成對象。方便對文件與文件夾進行操作。File對象可以作為參數傳遞給流的構造函數。了解File類中的常用方法。
2、File類常見方法: 1,創建。
boolean createNewFile();在指定位置創建文件,如果該文件已經存在,則不創建,返回false。
和輸出流不一樣,輸出流對象一建立創建對象。而且文件已經存在,會覆蓋。
boolean mkdir();創建一級文件夾。
boolean mkdirs();創建多級文件夾。2,刪除。
boolean delete();刪除失敗返回false。
void deleteOnExit();在程序退出時刪除指定文件。3,判斷。
boolean exists();文件是否存在。
boolean isFile();判斷是否是文件。
boolean isDirectory();判斷是否是文件夾。
boolean isHidden();判斷是否是隱藏文件。
boolean isAbsolute();判斷是否是絕對路徑。4,獲取信息。
String getName();獲取文件名稱。
String getPath();獲取文件相對路徑。
String getParent();該方法返回的是絕對路徑中的父目錄。如果獲取的是相對路徑,返回null。
如果相對路徑中有上一層目錄那么該目錄就是返回結果。
getAbsolute();獲取文件絕對路徑。
lastModified();返回文件最后一次被修改的時間。
length()。
3、因為目錄中還有目錄,只要使用同一個列出目錄功能的函數完成即可。在列出過程中出現的還是目錄的話,還可以再次調用本功能。也就是函數自身調用自身。這種表現形式,或者編程手法,稱為遞歸。
遞歸要注意:1,限定條件。2,要注意遞歸的次數。盡量避免內存溢出。
4、練習:將一個指定目錄下的java文件的絕對路徑,存儲到一個文本文件中。建立一個java文件列表文件。思路:1,對指定的目錄進行遞歸。2,獲取遞歸過程所有的java文件的路徑。3,將這些路徑存儲到集合中。4,將集合中的數據寫入到一個文件中。
二、IO流:Properties類
5、Properties是hashtable的子類。也就是說它具備map集合的特點。而且它里面存儲的鍵值對都是字符串。是集合中和IO技術相結合的集合容器,該對象的特點:可以用于鍵值對形式的配置文件。
6、那么在加載數據時,需要數據有固定格式:鍵=值。
三、IO流:其他類
7、打印流:PrintWriter與PrintStream:可以直接操作輸入流和文件。打印流:
該流提供了打印方法,可以將各種數據類型的數據都原樣打印。字節打印流:PrintStream 構造函數可以接收的參數類型: 1,file對象。File。
2,字符串路徑。String。
3,字節輸出流。OutputStream。字符打印流:PrintWriter 構造函數可以接收的參數類型: 1,file對象。File。
2,字符串路徑。String。
3,字節輸出流。OutputStream。4,字符數出來:Writer。
8、序列流:SequenceInputStream:對多個流進行合并。
9、操作對象:ObjectInputStream與ObjectOutputStream:被操作的對象需要實現Serializable(標記接口)。
2016年02月01日
day21
一、IO流:其他類
1、RandomAccessFile:隨機訪問文件,自身具備讀寫的方法。通過skipBytes(int x),seek(int x)來達到隨機訪問。
2、管道流:PipedInputStream和PipedOutputStream:輸入輸出可以直接進行連接,通過結合線程使用。
3、RandomAccessFile:該類不算是IO體系中子類。而是直接繼承自Object。但是它是IO包中成員。因為它具備讀和寫功能。內部封裝了一個數組,而且通過指針對數據的元素進行操作。可以通過getFilePointer獲取指針位置。同時可以通過seek改變指針的位置。其實完成讀寫的原理就是內部封裝了字節輸入流和輸出流。通過構造函數可以看出,該類只能操作文件。而且操作文件還有模式:只讀r,讀寫rw等。
4、如果模式為只讀r。不會創建文件。會去讀取一個已存在文件,如果該文件不存在,則會出現異常。如果模式為讀寫rw。操作的文件不存在,會自動創建。如果存在則不會覆蓋。
5、IO包中的其他類:
操作基本數據類型:DataInputStream與DataOutputStream。
操作字節數組:ByteArrayInputStream與ByteArrayOutputStream。操作字符數組:CharArrayReader與CharArrayWrite。操作字符串:StringReader與StringWriter。
6、用于操作字節數組的流對象。
ByteArrayInputStream :在構造的時候,需要接收數據源,而且數據源是一個字節數組。ByteArrayOutputStream :在構造的時候,不用定義數據目的,因為該對象中已經內部封裝了可變長度的字節數組。這就是數據目的地。因為這兩個流對象都操作的數組,并沒有使用系統資源。所以,不用進行close關閉。在流操作規律講解時: 源設備:
鍵盤 System.in,硬盤 FileStream,內存 ArrayStream。目的設備:
控制臺 System.out,硬盤 FileStream,內存 ArrayStream。用流的讀寫思想來操作數組。
二、IO流:字符編碼
7、字符編碼:字符流的出現為了方便操作字符。更重要是的加入了編碼轉換。通過子類轉換流來完成:InputStreamReader;OutputStreamWriter。在兩個對象進行構造的時候可以加入字符集。
8、編碼表的由來:計算機只能識別二進制數據,早期由來是電信號。為了方便應用計算機,讓它可以識別各個國家的文字。就將各個國家的文字用數字來表示,并一一對應,形成一張表。這就是編碼表。
9、常見的編碼表:
ASCII:美國標準信息交換碼。用一個字節的7位可以表示。ISO8859-1:拉丁碼表。歐洲碼表。用一個字節的8位表示。GBK2312:中國的中文編碼表。用兩個字節的16位來表示。GBK:中國的中文編碼表升級,融合了更多的中文文字符號。
Unicode:國際標準碼,融合了多種文字。所有文字都用兩個字節來表示,Java語言使用的就是Unicode。
UTF-8:最多用三個字節來表示一個字符。??
10、編碼:字符串變成字節數組。解碼:字節數組變成字符串。String-->byte[];str.getBytes(charsetName);byte[]-->String;new String(byte[],charsetName)。2016年02月02日
day22
一、GUI:概述
1、GUI:圖形用戶界面。
GUI:Graphical User Interface(圖形用戶接口)。用圖形的方式,來顯示計算機操作的界面,這樣更方便跟直觀。
CLI:Command line User Inteface(命令行用戶接口)。就是常見的Dos命令行操作。需要記憶一些常用的命令,操作不直觀。
舉例:比如:創建文件夾,或者刪除文件夾等。
Java為GUI提供的對象都存在java.Awt和javax.Swing兩個包中。
2、Awt與Swing:
java.Awt:Abstract Window ToolKit(抽象窗口工具包),需調用本地系統方法實現功能。屬重量級控件。
javax.Swing:在Awt的基礎上,建立的一套圖形界面系統,其中提供了更多的組件,而且完全由Java實現。增強了移植性,屬輕量級控件。
3、繼承關系圖:
4、布局管理器:
容器中的組件的排放方式,就是布局。常見的布局管理器:
FlowLayout(流式布局管理器)
從左到右的順序排列。
Panel默認的布局管理器。BorderLayout(邊界布局管理器)
東,南,西,北,中。
Frame默認的布局管理器。GridLayout(網格布局管理器)
規則的矩陣。
CardLayout(卡片布局管理器)
選項卡。
GridBagLayout(網格包布局管理器)
非規則的矩陣。
5、創建圖形化界面: 1,創建frame窗體。
2,對窗體進行基本設置。
比如:大小、位置、布局。3,定義組件。
4,將組件通過窗體的add方法添加到窗體中。5,讓窗體顯示,通過setVisible(true)來完成。
6、建立一個簡單的窗體:
Container常用子類:Window Panel(面板,不能單獨存在。)Window常用子類:Frame Dialog。簡單的窗體創建過程:
Frame f = new Frame(“my window”);f.setLayout(new FlowLayout());f.setSize(500,400);//設置窗體大小。
f.setLocation(300,200);//設置窗體出現在屏幕的位置。f.setVisible(true)。
二、GUI:事件監聽機制
7、事件監聽機制組成:事件源(組件);事件(Event);監聽器(Listener);事件處理(引發事件后處理方式)。
8、事件監聽機制流程圖:
9、事件監聽機制的特點: 1,事件源。2,事件。3,監聽器。4,事件處理。
事件源:就是awt或者swing包中的那些圖形界面組件。事件:每一個事件源都有自己特有的對應事件和共性事件。
監聽器:將可以觸發某一個事件的動作(不止一個動作)都已經封裝到了監聽器中。以上三者,在java中都已經定義好了。直接獲取其對象來用就可以了。我們要做的事情是,就是對產生的動作進行處理。
2016年02月03日
day23
一、網絡編程:概述
1、網絡編程:
網絡模型:OSI參考模型。TCP/IP參考模型。網絡通訊要素:IP地址。端口號。傳輸協議。
2、網絡參考模型:
3、網絡通訊要素: IP地址:網絡中設備的標識。不易記憶,可用主機名。本地回環地址:127.0.0.1主機名:localhost。端口號:用于標識進程的邏輯地址,不同進程的標識。有效端口:0~65535,其中0~1024系統使用或保留端口。
傳輸協議:通訊的規則。常見協議:TCP,UDP。
4、UDP和TCP: UDP:
將數據及源和目的封裝成數據包中,不需要建立連接。每個數據報的大小在限制在64k內。因無連接,是不可靠協議。不需要建立連接,速度快。
特點:面向無連接。數據會被封包。不可靠。速度快。比如:聊天,視頻會議,桌面共享。TCP:
建立連接,形成傳輸數據的通道。
在連接中進行大數據量傳輸。
通過三次握手完成連接,是可靠協議。
必須建立連接,效率會稍低。
特點:面向連接。可大數據量傳輸。比較可靠。稍微有點慢。比如:下載。
5、Socket:
Socket就是為網絡服務提供的一種機制。通信的兩端都有Socket。
網絡通信其實就是Socket間的通信。數據在兩個Socket間通過IO傳輸。
二、網絡編程:UDP
6、UDP傳輸:
DatagramSocket與DatagramPacket。建立發送端,接收端。建立數據包。
調用Socket的發送接收方法。關閉Socket。
發送端與接收端是兩個獨立的運行程序。
三、網絡編程:TCP
7、TCP傳輸:
Socket和ServerSocket。建立客戶端和服務器端。
建立連接后,通過Socket中的IO流進行數據的傳輸。關閉socket。
同樣,客戶端與服務器端是兩個獨立的應用程序。2016年02月04日
day24
一、網絡編程:瀏覽器客戶端
1、視頻演示講解。
2016年02月6日
day25
一、正則表達式
1、正則表達式:符合一定規則的表達式。作用:用于專門操作字符串。
2、正則表達式:符合一定規則的表達式。
作用:用于專門操作字符串。
特點:用一些特定的符號來表示一些代碼操作。這樣就簡化了書寫。
所以學習正則表達式,就是在學習一些特殊符號的使用。
好處:可以簡化對字符串的復雜操作。
弊端:符號定義越多,正則越長,閱讀性越差。
3、具體操作功能:
1,匹配:String matchess();方法。用規則匹配整個字符串,只要有一處不符合規則,就匹配結束,返回false。2,切割:String split();3,替換:String replaceAll();4,獲取:將字符串中符合規則的子串取出。
4、獲取:操作步驟:
1,將正則表達式封裝成對象。
2,讓正則對象和要操作的字符串相關聯。3,關聯后,獲取正則匹配引擎。
4,通過引擎對符合規則的子串進行操作,比如取出。
第三篇:JAVA基礎總結
JAVA基礎總結
轉眼間,已經來到這里學習半年了,而現在我們對于JAVA學習才算是真正的開始。一開始接觸的時候我發現這個和C語言的基本語法幾乎一模一樣的,老師說:JAVA語言本來就是C++語言發展過來的,而C++是從C語言發展來的,C C++ 還有JAVA雖然是不同的三種語言,但是其實他們的基本語法是一樣的,但是它們卻有巨大的區別,這個區別主要是體現在思想上。
都說C語言是面向過程的語言,C++ C#和JAVA是面向對象的編程,其實就是思維方式稍微改了一下子,面向過程的語言主要是著重于算法,面向對象著重于邏輯而已。
這個教我們的老師是張成峰老師,張成峰是個很負責的老師,雖然JAVA基礎其實和C語言基礎差不多,但是仔細學學還是能找出很多不同的細節的,于是大家的問題就很多,張老師幾乎就是手把手的教我們,所以整體來說JAVA基礎學得挺扎實的。
我在這本書的學習不是挺好,聯系得少了,所以對代碼也不是特別熟悉。而且JAVA是一門重概念的書,對于我來說,概念是我的要害,理論知識也是我最怕學習的,所以學習這本書對我來說很是艱難,聽了很久的課,代碼寫得出來,但是理論知識幾乎一點也不明白,結果就造成了這次筆試考的不好。
筆試考的不好,機試也因為我的粗心沒有考好,所以這次的成績不好。
學習JAVA基礎后,還要在學習的過程中對每個知識都要用心和細心,當然最該注重的地方就是應該提高我對理論知識的學習,要多看書,也要多敲敲代碼,這些就是提高學習知識全面的方法。
下一本書學習的是JAVAOO算是JAVA的一個重要的內容了,這才會真正的接觸JAVA的核心課程,在這本書里我要好好的理解理論知識,仔細的學習每個知識。
第四篇:Java基礎總結
? 基本數據類型
? 變量單元直接存放數據
? 賦值和傳參的方式:傳值,即傳遞副本
? 比較相等使用關系運算符“==”
? 引用數據類型
? 變量單元存放引用即對象地址,而數據(對象)在另一內存區域存放。
? 賦值和傳參的方式:傳引用(傳遞對象的地址),即傳遞對象本身。
? 使用關系運算符“==”比較兩個引用類型變量,比較的是地址,如果比較結果為
真,說明兩個變量引用了同一對象。
? 比較兩個對象是否相等應使用equals方法
? Java是面向對象的語言,開發Java程序就是開發Java類,Java的變量定義、方法(函
數)和語句都必須在類中書寫,“無類即無Java”。
? 類的實例成員
屬性(成員變量):直接定義在類體中的變量(注:在方法或語句塊中定義的變量不是屬性)
方法:直接定義在類體中的方法。
類成員:直接定義在類體中的內部類,即類成員。
注:對象的成員是從屬于對象的,必須通過對象訪問,在Java中不存在脫離對象和類而獨立存在的屬性和方法。
? 類、方法、語句三者的關系:
類中包含方法,方法中包含語句;方法中不能嵌套方法;語句不能直接寫在類體中。
? 變量的作用域
? 局部變量-方法的參數、方法體中定義的變量、語句塊中定義的變量,僅在所定義的方法體或語句塊中有效。
? 屬性-在整個類體中有效。
? 公有的屬性-其它類可以本類對象訪問。
? 私有的屬性-僅限本類內訪問
? 局部變量(無論基本類型還是引用類型)在棧內存中,對象在堆內存中。注:引用類型的局部變量內存放是對象的引用(即地址),而對象在堆內存中。
? 方法的重載-在同一類中多個方法同名的語法現象,方法重載應符合以下條件:
? 方法同名
? 參數有所不同(即類型、個數和順序三者至少有一個不同)
注:方法是否重載不考慮返回類型等其它方面。
? 包和訪問修飾符
? 包-類的目錄結構,主要用途是方便類的管理。
? 類的簡稱:不含包名的類名
? 類的全限定名稱(類的全稱):帶包名的類名。
? 訪問修飾符
? private-僅限本類內訪問
? public-任何類都能夠訪問
? 默認-限本包的類訪問
? protected--限本包的類訪問和子類的訪問
? 類的成員(屬性、方法和成員內部類)可以使用四種訪問修飾符,頂級外部類僅能
使用public和默認兩種修飾符。
? 數組
? 基本類型的數組的元素放的是數據
? 對象數據的元素放的是對象的引用
? 二維數組實際上是一個維數組,而其每個元素又是一個一維數組。
? 構造方法-與類名同名并且無返回類型的方法
? 構造方法的作用是創建對象,僅能通過new關鍵字調用。
? 類中未顯式定義構造方法時,類中會有默認的構造方法(即一個public、無參的構
造方法);類中一旦定義顯式定義構造方法,將不再產生默認的構造方法。
? 構造方法可以重載
? 構造方法只能可以使用四個訪問修飾符,不可以使用其它修飾符(如static、final
等)。
? this關鍵字
? this表示本對象或對象自身的引用
? 通過this可以調用本類的成員方法和屬性
? 通過this可以調用本類的構造方法,this調用構造方法的語句必須寫在構造方法的第一句。
? 實例成員和靜態成員
? 類的成員(屬性、方法和成員類)可劃分為靜態成員和實例成員。
? 實例成員是屬于對象的,隨著對象的創建而存在,隨著對象的銷毀而銷毀。? 靜態成員是屬于類的,隨著類的加載而存在,隨著類的銷毀而銷毀。
? 使用static修飾的成員是靜態成員,未使用static修飾的成員是實例成員。? 靜態成員內不能使用this關鍵字。
? this表示當前對象的引用。
? 對象的初始化
? 第一:實例屬性賦默認值
? 第二:實例屬性賦初值
? 第三:執行對象初始化塊
? 第四:執行構造方法
? 類的初始化
? 第一:靜態屬性賦默認值
? 第二:靜態屬性賦初值
? 第三:執行靜態塊
? 繼承的基本概念
? Java僅支持單繼承
?
?
?
?
? ? 如果一個類沒有顯式繼承任何類,則隱式繼承java.lang.Object類 ? 子類擁有父類的一切,子類對象由兩部分構成:父類對象部分和子類個性化的部分。? 子類并不能訪問父類的一切: ? 子類可以訪問父類的public成員和protected成員 ? 子類不可以訪問父類的private成員 ? 僅當子類與父類同在一包時,子類方可以訪問父類的默認訪問控制的成員。繼承與類和對象的初始化 ? 構造子類對象時,首先構造父類對象,其次構造子類個性化部分,兩者共同構成完整的子類對象,即首先進行父類對象的初始化,在初始化子類對象(個性化)部分。? 子類構造方法的執行首先調用父類的構造方法。? 若在子類構造方法中無顯式調用父類構造方法的語句,則系統默認調用父類中可訪問的無參的構造方法,如果這時候父類中恰好沒有這樣的構造方法,則編譯出錯。? 在子類的構造方法中可以通過super關鍵字調用父類構造方法。這樣的調用語句只能出現在子類構造方法的第一句。? 關于初始化的順序 ? 初始化父類 ? 初始化子類 ? 初始化父類對象 ? 初始化子類對象 繼承與類型轉換 ? 子類型對象可以自動轉型為父類型 ? 父類型引用某個子類型對象時,可以強制轉化為這個具體的子類型 方法重寫 ? 在繼承的情況下,子類的實例方法與父類的實例方法的方法名稱、參數、返回類型、throws聲明完全一致,并且該子類方法的訪問權限不低于父類方法的訪問權限,即方法重寫(子類方法重寫了父類方法),也稱方法覆蓋。? 方法重寫僅存在于父子類中的實例方法,靜態方法沒有重寫的概念。? 當通過子類型對象執行重寫方法時,將始終表現為子類的行為,而且無論引用對象的變量是父類型還是子類型,也無論是直接調用還是通過父類型其它方法間接調用,都將如此。? final修飾的方法不可以被重寫 ? final修飾的類不可以被繼承 隱藏成員變量 ? 如果子類和父類中定義了同名稱的成員變量,則稱子類隱藏了父類的成員變量 ? 通過父類方法訪問隱藏的成員變量時,將獲得父類成員變量 ? 通過子類方法訪問隱藏的成員變量時,將獲得子類成員變量 ? 通過父類型的引用直接訪問隱藏的成員變量時,將獲得父類成員變量 ? 通過子類型的引用直接訪問隱藏的成員變量時,將獲得子類成員變量 super關鍵字
? super僅能用于子類中表示本對象的父對象部分
? super可以調用父類型的構造方法
? Super可以調用父類的成員
? Super不可以使用在靜態上下文中
? Super不可以做為參數傳遞,不可以做為返回值返回。
? 當方法重寫時,或父類成員變量被隱藏時,子類中只能通過super訪問父類方法和
父類成員變量
? final關鍵字
? 用于變量,表示變量的值不可改變
? 用于類,表示類不可被繼承
? 用于方法,表示方法不可以被重寫
? 關于final變量的初始化時機
? 局部變量:聲明的時候初始化
? 實例成員變量:聲明、對象初始化塊和構造方法三處之一
? 靜態成員變量:聲明、靜態塊兩處之一
? 抽象類
? 抽象類可以包含抽象方法,也可以不包含抽象方法
? 含有抽象方法的類必須定義為抽象類
? 抽象類有構造方法
? 抽象類不能夠實例化
? 通過抽象類可以調用其靜態成員
? 抽象類是需要由子類繼承的,因此抽象類不允許是final類
? 抽象方法
? 抽象方法沒有方法體,包括一對空的大括號也不允許有
? 抽象方法必須是實例方法,抽象方法不允許是final的? 抽象類與繼承
? 抽象類可以被繼承
? 若抽象類的子類是非抽象類,則該子類必須實現(重寫)其父類的所有抽象方法 ? 若抽象類的子類也是抽象類,則該子類可以不實現(重寫)其父類的全部或部分抽象
方法。
? 接口
? 接口也是數據類型,可以將其理解為“純”抽象類
? 接口不是類,也沒有構造方法,不能夠實例化
? 接口中的屬性一律是public、static、final的,并可以省略這三個關鍵字
? 接口的方法一律是public、abstract的,并且可以省略這兩個關鍵字
? 接口中可以不包含任何屬性和方法
? 接口與實現
? 接口不是類,因此接口與類的關系不是“繼承”關系,而是“實現”關系,我們可
以將實現理解為繼承(盡管這并不恰當)
? 如果接口的實現類是抽象類,則該實現類可以不實現接口的全部或部分方法 ? 如果接口的實現類是非抽象類,則該實現類必須實現接口的全部方法
? 一個類可以實現多個接口
? 接口與繼承
? 接口之間可以相互繼承
? 一個接口可以繼承多個接口
? 接口與類型轉換
? 接口的的子類型對象可以自動向上轉型為接口類型
? 接口的子類型指:是接口的實現類或者接口的子接口
? 如果變量引用的對象實際是某個接口的實現類對象,而變量的類型不是這個接口的子類型,那么則可以強制轉換為這個接口類型。
? 異常的類層次結構
? Throwable錯誤類,表示不可恢復的致命錯誤
? Exception運行時異常,此類異常可以不做顯式處理
? 非運行時異常catch
? 聲明拋出 在方法頭通過throws聲明可能拋出的異常類型
? 異常機制的五個關鍵字
? try catch finally throw throws
? 如何使用
? try-catch
? try-catch-finally注:只要try執行,其對應的finally塊才必然執行
? try-finally注:只要try執行,其對應的finally塊才必然執行
? throw 主動拋出一個異常
? throws 用在方法聲明頭部,聲明方法可能拋出異常
? finally代碼塊多用于書寫資源回收代碼
? Java集合類(集合框架)
? Collection接口
? List接口 允許重復元素,元素有索引序號,并按放入元素的次序編號
? ArrayList 線性表結構,查找快,增刪慢
? LinkedList 鏈表結構,查找慢,增刪快
? Vector 同步,查找、增刪性能都不高。
? Set接口 不允許重復元素,元素無索引編號
? HashSet 元素散列存放
? TreeSet元素按自然順序排序(即從小到大排序)
? Map接口
? HashMap
? 允許null值和null鍵
? 不同步
? Hashtable <--Properties
? 不允許null值和null鍵
? 同步
? 內部類
第五篇:java 基礎要點總結 學習java必看
Java基礎
1.JAVA程序是由1個或者N個CLASS組成的程序
2.編寫---javac進行編譯------java進行執行
3.類名的命名:規范:第一個字母要大寫 第一字母必須是字母 下劃線美圓符號 人民幣符號//
4.不是第一個字母的話 可以是數字
5.文件名和類名的關系 如果class前面沒有public 是可以不一樣的 但是如果有的話 必須一樣
6.兩個BYTE SHORT類型進行加減乘除的時候 返回的結果是int類型
/*
需求:定義一個hello world小程序。
步驟:
1,通過class關鍵字定義一個類。將代碼都編寫到該類中。
2,為了保證該的獨立運行。在類中定義個主函數。格式public static void main(String[] args)3,保存成一個擴展名為java的文件。
4,在dos控制臺中通過javac工具對java文件進行編譯。
5,在通過java命令對生成的class文件進行執行。
*/
class Demo//定義一個類。
{
//主函數。
public static void main(String[] args)
{
//輸出語句。
System.out.println(“hello haha”);
}
}
6.字符串數據和任何數據使用+都是相連接,最終都會變成字符串。
System.out.println(“5+5”+(5+5));//“5+5=55”
轉義字符:通過 來轉變后面字母或者符號的含義。
n:換行。
b:退格。相當于backspace。
r:按下回車鍵。window系統,回車符是由兩個字符來表示rn.t:制表符。相當于tab鍵。
7.if else 結構 簡寫格式: 變量 =(條件表達式)?表達式1:表達式2;
三元運算符:
好處:可以簡化if else代碼。
弊端:因為是一個運算符,所以運算完必須要有一個結果。
class OperateDemo
{
public static void main(String[] args)
{
int x= 7;
//邏輯運算符用于連接boolean類型的表達式。
//x>3 & x<6 = true & true = true;
/*
true & true = true;
true & false = false;
false & true = false;
false & false = false;
& : 只要兩邊的boolean表達式結果,有一個為false。那么結果就是false。只有兩邊都為true,結果為true。
true | true = true;
true | false = true;
false | true = true;
false | false = false;
| : 兩邊只要有一個為true,結果為true。
只有兩邊都有false,結果為false。
^ : 異或;就是和|有點不一樣。當true ^ true = false;
true ^ true = false;
true ^ false = true;
false ^ true = true;
false ^ false = false;
^ : 兩邊相同結果是false。
兩邊不同結果是true。
&和&&的特點:
&:無論左邊是true是false。右邊都運算。
&&:當左邊為false時,右邊不運算。
|:兩邊都參與運算。
||:當左邊為true。右邊不運算。
int n = 3,m = 8;
System.out.println(“n=”+n+“,m=”+m);
1,通過第三方變量。
/*int temp;temp = n;n = m;m = temp;
2不用第三方變量。= 3 +8;3 = 113;n = n + m;//如果n和m的值非常大,容易超出int范圍。m = nm;n = n ^ m;m = n ^ m;//(n^m)^m;n = n ^ m;//n ^(n ^ m)System.out.println(“n=”+n+“,m=”+m);
if和switch語句很像。
具體什么場景下,應用哪個語句呢?
如果判斷的具體數值不多,而是符合byte short int char這四種類型。雖然兩個語句都可以使用,建議使用swtich語句。因為效率稍高。
其他情況:對區間判斷,對結果為boolean類型判斷,使用if,if的使用
范圍更廣。