學習java的雜亂筆記
1.局部變量:定義在方法中的變量,定義在方法中的參數的變量,定義在for循環中變量,都是局部變量,
在棧內存中開辟一個空間,數據使用完畢,自動釋放。
2.何定義一個函數?(不需要死記,只需了解)
1.既然函數是一個獨立的功能,那麽該功能的運算結果是什麽要先明確。
是在明確函數的返回值類型
2.在明確定義該功能的過程中是否需要未知的內容參與運算。
明確函數的參數列表(參數的類型和參數的個數)
3.break:只可作用於選擇結構與循環結構。
continue:只可作用於循環(loop)結構,結束本次循環,繼續下次循環。
continue與break如果沒有該有的作用域而單獨存在,則沒有意義,語句編譯失敗
4.可以以字母為標號,給for循環標號,也只能給for循環標號!!便於區分
5.累加思想:
通過變量記錄住每次變化的結果,通過循環的形式,進行累加操作。
計數器思想
通過一個變量記錄住數據的狀態變化,也需要通過循環來實現
6.什麽時候動用重載?重載與返回值類型無關
當定義的功能相同時,但其中參與運算的未知內容不同時,
那麽就定義一個函數名稱以表示其功能,方便閱讀,而通過參數列表的不同來區分多個同名函數
註意:參數列表中參數是有順序的!!!!!!!!
7.函數定義思想:每個函數只需要完成他所需要的功能就可以,不需要多余的動作,列如求和語句
只需要完成求和並返回就可以,而不要進行多余的打印輸出語句,每個函數都是獨立的
只需完成應完成的定義,不需要多余的的定義,如果需要,那也是調用者所幹的事,每個函數
則只要返回就可。
8.一:變量都有自己的作用域,對於for循環來講,如果將控制循環的增量定義在for語句中,變量只在該循環內有效,
當for語句執行完畢,該變量就會在內存中被釋放
二:for循環可以與while語句互換,如果需要定義循環變量,則for循環更為合理
9.轉義字符:通過\來轉變-後面-字母或符號的含義。
\n:換行;
\b:退格,相當於BackSpace;
\r:按下回車鍵,在windows系統,回車鍵是由兩個字符來表示\r,\n
在Linux系統,回車鍵只由一個字符表示
\t:制表符,相當於tab鍵
10. 堆內存中每一個實體都有一個內存地址值,或有或無的被棧內存中的定義變量所含的地址值所引用,而不是直接代表
11.數組角標從零開始,而且數組一被定義就都有值且默認值為0.
12.堆內存中的實體都是封裝數據的,且都有默認初始化值
13.面向對象的三個特征:1,封裝;2,繼承;3,多態;
14.對象與類的區別:
類是對現實生活中事物的描述。
對象是這類事物實實在在存在的個體。
15,其實定義類就是在描述事物,就是在定義屬性與行為;屬性與行為共同稱為類中的成員(成員變量和成員方法);
16,類類型變量指向對象
17,成員變量與局部變量的區別:
作用範圍:
成員變量作用於整個類中,
局部變量作用於函數中或語句中;
在內存中的位置:
成員變量在堆內存中,因為對象的存在,才在內存中存在;
局部變量存在在棧內存中。
18,private:私有,權限修飾符,用於修飾類中的成員(成員變量,成員函數)。私有只在本類中有效
將成員變量私有化,對外提供set get方法對其進行訪問,提高對數據訪問的安全性
註意:私有僅僅只是封裝的一種形式,私有是封裝,但封裝不是私有
19,構造函數的定義:
1.函數名要與類名一致
2.不用定義返回值類型
3.不用寫return語句
對象一建立就會調用與之對應的構造函數
構造函數可以用於對象進行初始化
細節:當一個類中沒有定義構造函數時,那麽系統會默認會給該類加入一個空參數的構造函數
方便於該類進行初始化,當在類中自定義了構造函數後,默認的構造函數就沒了
構造函數與一般函數的區別:
1.在寫法上不同
2.在運行上不同
構造函數就是在對象一建立就運行,給對象初始化
一般函數是在對象調用才執行,給對象添加對象具備的功能
一個對象建立,構造函數只運行一次
一般函數可以被對象調用很多次
什麽時候定義構造函數:
當分析事物時,該事物存在即具備一些特性或者行為,那麽將那些內容定義在構造函數中
一個類中默認會有一個空參數的構造函數,這個默認的構造函數的權限與所屬類一致
如果類被public修飾,那麽默認的構造函數也帶public修飾符
如果類沒被public修飾,那麽默認的構造函數也沒有public修飾
默認的構造函數的權限是隨著類的變化而變化的
20.構造代碼塊:作用:給對象進行初始化
對象一建立就運行,而且優先於構造函數執行
與構造函數的區別:
構造代碼塊是給所有對象進行統一初始化
而構造函數時給對應的對象初始化。
構造代碼塊中定義的是不同對象共性的初始化內容
new xxx(); 其中先默認初始化,null或者0等,顯示初始化,再構造代碼塊初始化,再構造函數初始化,有先後順序
21.this關鍵字:
代表它所在函數所屬對象的引用
簡單說:那個對象在調用this所在函數,this就代表那個對象
this的應用:當定義類中功能時,該函數內部都要用到調用該函數的對象時,這時用this來表示這個對象
但凡本類功能內部使用了本類對象,都要用this表示
this的功能:1.用以區分局部變量和成員變量的同名情況。
2.用於構造函數之間進行互相調用。
註意:this語句只能定義在構造函數的第一行,因為初始化要先執行,否則會報錯
對this的調用必須是構造器中的第一個語句。
22.java中有堆內存,棧內存,以及方法區(共享區,數據區);
23.static關鍵字:
用法:是一個修飾符,用於修飾成員(成員變量,成員函數);
當成員被靜態修飾後,就多了一種調用方式,除了可以被對象調用外,
還可以直接被類名調用,方式:類名.靜態成員
定義的靜態的成員變量又稱類變量,類被調用就執行
成員變量又稱實例變量
static特點:
1.隨著類的加載而加載。
也就是說,靜態會隨著類的消失而消失,說明它的生命周期最長。
2.優先於對象存在
明確一點,靜態是先存在,對象是後存在
3.被所有對象所共享
4.可以直接被類名調用
實例對象和類變量的區別:
1.存放位置:
類變量隨著類的加載而存在於方法區中
實例對象隨著對象的建立而存在於對堆內存中
2.生命周期:
類變量生命周期最長,隨著類的消失而消失
實例變量聲明周期隨著對象的消失而消失
靜態的使用註意事項:
1.靜態方法只能訪問靜態成員。
非靜態方法既可以訪問靜態,也可以訪問非靜態
2.靜態方法中不可以定義this,super關鍵字
因為靜態優先於對象存在,所以靜態方法中不可以出項this
3.主函數是靜態的
靜態有利有弊:
利處:對對象的共享數據進行單獨空間的存儲,節省空間,沒有必要每一個對象都存儲一份,
可以直接被類名調用
弊處:生命周期過長。
訪問出現局限性(靜態只能訪問靜態、。;
24.什麽時候使用靜態?
要從兩方面下手:
因為靜態修飾的內容有成員變量和成員函數。
什麽時候定義靜態變量(類變量)?
當對象中出現共享數據時,該數據被靜態所修飾
對象中的特有數據要定義成非靜態存在於堆內存中。
什麽時候定義靜態函數?
當功能內部沒有訪問到非靜態數據(對象的特有數據)
那麽該功能可以定義成靜態的。
25.文檔註釋的特殊字符:
@auther 作者
@version 版本號
@param 參數
@return 返回值
26.Person p =new Person("張三",20);
該句話都做了什麽事?
1.因為new用到了Person.class.所以會先找到Person.class文件並加載到內存中。
2.執行該類中的static代碼塊,如果有的話,給Person.class類進行初始化。
3.在堆內存中開辟空間,分配內存地址。
4.在堆內存中建立對象的特有屬性,並進行默認初始化。
5.對屬性進行顯示初始化。
6.對對象進行構造代碼塊初始化
7.對對象進行對應的構造函數初始化。
8將內存地址賦給棧內存中的p變量。
27.事物不僅僅只有繼承關系,還有聚集:聚合和組合。
28.子類的實例化過程:(逐級向上找)
子類中的所有構造函數默認都會訪問父類中的空參數構造函數,因為子類構造函數
中的第一行都有一句隱式的super語句。
當父類中沒有空參數的構造函數時,子類必須手動通過super語句形式來指定要訪問的父類中的構造函數,
當然,子類中的構造函數第一行也可以手動指定this語句來訪問本類中的構造函數,子類中至少會有一個構造函數會訪問
父類中的構造函數。
註意:this和super語句不能在一個函數中,因為兩個函數都必須在第一行,
而為什麽this和super語句為什麽在第一行,因為兩個語句要進行初始化,如果不在第一行,
初始化沒有意義。
29.什麽是模板方法
在定義功能時,有一部分功能是確定的,而有另一部分功能是不確定的,而且確定的功能在使用不確定的功能時,
可以將不確定的功能暴露出去,由子類進行覆寫。
30.public,protected,private是Java裏用來定義成員的訪問權限的,另外還有一種是“default”,也就是在成員前不加任何權限修飾符。如:
public class A{
void method(){};
}
method就屬於default權限。
這四個修飾符的訪問權限如下表:
-----------------------------------------------
類內部 package內 子類 其他
public 允許 允許 允許 允許
protected 允許 允許 允許 不允許
default 允許 允許 不允許 不允許
private 允許 不允許 不允許 不允許
-----------------------------------------------
比如:用protected修飾的成員(變量或方法),在類內部可以調用,同一個package下的其他類也可以調用,子類裏也可以調用,其他地方則不可以調用,
也就是說在其他
Java語言定義了public、protected、private、abstract、static和final這6常用修飾
詞外還定義了5個不太常用的修飾詞,下面是對這11個Java修飾詞的介紹:
1.public
使用對象:類、接口、成員
介紹:無論它所處在的包定義在哪,該類(接口、成員)都是可訪問的
2.private
使用對象:成員
介紹:成員只可以在定義它的類中被訪問
3.static
使用對象:類、方法、字段、初始化函數
介紹:成名為static的內部類是一個頂級類,它和包含類的成員是不相關的。靜態方法
是類方法,
是被指向到所屬的類而不是類的實例。靜態字段是類字段,無論該字段所在的類創建了
多少實例,該字
段只存在一個實例被指向到所屬的類而不是類的實例。初始化函數是在裝載類時執行
的,而不是在創建
實例時執行的。
4.final
使用對象:類、方法、字段、變量
介紹:被定義成final的類不允許出現子類,不能被覆蓋(不應用於動態查詢),字段值
不允許被
修改。
5.abstract
使用對象:類、接口、方法
介紹:類中包括沒有實現的方法,不能被實例化。如果是一個abstract方法,則方法體
為空,該方
法的實現在子類中被定義,並且包含一個abstract方法的類必須是一個abstract類
6.protected
使用對象:成員
介紹:成員只能在定義它的包中被訪問,如果在其他包中被訪問,則實現這個方法的類
必須是該成
員所屬類的子類。
7.native
使用對象:成員
介紹:與操作平臺相關,定義時並不定義其方法,方法的實現被一個外部的庫實現。
8.strictfp
使用對象:類、方法
介紹:strictfp修飾的類中所有的方法都隱藏了strictfp修飾詞,方法執行的所有浮點
計算遵守
IEEE 754標準,所有取值包括中間的結果都必須表示為float或double類型,而不能利用
由本地平臺浮
點格式或硬件提供的額外精度或表示範圍。
9.synchronized
使用對象:方法
介紹:對於一個靜態的方法,在執行之前jvm把它所在的類鎖定;對於一個非靜態類的方
法,執行
前把某個特定對象實例鎖定。
10.volatile
使用對象:字段
介紹:因為異步線程可以訪問字段,所以有些優化操作是一定不能作用在字段上的。
volatile有時
可以代替synchronized。
11.transient
使用對象:字段
介紹:字段不是對象持久狀態的一部分,不應該把字段和對象一起串起。
31.接口與繼承的區別:
接口是對象和事物的拓展屬性,屬於單獨的,屬於每個實現接口的類。
而繼承則是子類對父類的全部傳遞,並增加一些子類所特有的屬性,
列如高三學生是學生的一種,高三學生繼承了學生的一切屬性和方法,如學習和思考。
而有部分高三學生還會抽煙,喝酒等,如果用繼承,則代表所有學生都會抽煙,喝酒。然而只是
部分高三學生會。所以用接口來表示拓展屬性。
32.多態:事物存在的多種體現形態。
多態的體現:父類的引用指向了子類的對象,
父類的引用也可以接受子類的對象。
Person m = new Man();
多態的前提:必須類與類有關系,要麽繼承,要麽實現,且子類對父類存在覆蓋。
多態的好處:多態的出現大大提高了程序的拓展性。
多態的弊端:雖然提高了代碼的拓展性,但只能使用父類的引用來訪問父類中的成員。
多態自始自終都是子類對象在做著變化,可以轉換的是父類應用指向了自己的子類對象時,可以向上轉換,也可以強制轉換。
在多態中成員函數的特點:
在編譯時期,參閱引用型變量所屬的類中是否有調用的方法,如果有,編譯通過,否則失敗。
在運行時期,參閱對象所屬的類中是否有調用的方法
即,成員函數在多態調用時,編譯看左邊,運行看右邊。
在多態中,成員變量的特點;
無論編譯還是運行,都參考左邊(引用型變量所屬的類)
在多態中,靜態成員函數的特點:
無論編譯還是運行,都參考左邊。
33.異常:程序在!運行!時產生的不正常情況。
異常的由來:異常在現實生活中也是具體的問題,Java在將這些問題描述成類,並封裝成對象。
就是Java對不正常情況進行描述後的對象表現。
對於問題的劃分:一種是嚴重的問題-Error ,一種則是嚴重的----Exception
對於Error問題不進行代碼處理,而Exception問題進行處理
但Error與Exception都具備一些共性
列如不正常情況的信息,引發原因等
Throwable
--Error
--Exception
34.在Exception類中有一個特殊的類RuntimeExceptiom
如果在函數內容拋出異常,函數上可以不聲明,編譯一樣通過
如果在函數聲明了異常,調用者可以不處理,編譯一樣通過,之所以不需要調用者處理,是因為不需要
當該代碼異常發生時,RuntimeException希望這段代碼停止,因為在運行中,如果出現了停止,則應該停止操作,修改代碼
自定義異常時,如果該異常的發生,程序無法繼續,則讓自定義類繼承RuntimeException
對於異常分為兩類
1.編譯時被檢測的異常
2.編譯時不被檢驗的異常,而運行時被檢驗的異常(RuntimeException及其子類)
35.異常在子父類中的覆蓋體現:
1.子類在覆蓋父類時,如果父類的方法拋出異常,那麽子類的覆蓋的方法只能拋出父類的異常或者該異常的子類。
2.如果父類中拋出了多個異常,那麽子類在覆蓋該方法時,那麽子類只能拋出的是父類的子集
3.如果父類或者接口的方法中沒有異常拋出,則子類在覆蓋的方法中也不許拋出異常
如果子類方法中出現了異常,只能進行try處理,不可以拋出。
36.多線程:
進程:是一個正在執行的程序。
每一個進程執行都有一個執行順序。該順序是一個執行路徑,或者叫一個控制單元。即在cpu中開辟運行的空間
線程:是進程中一個獨立的控制單元。線程控制著進程的執行
一個進程中至少有一個線程。
jvm在啟動時會有一個進程 Java。exe
該進程中至少有一個線程在負責Java程序的執行
而且這個線程運行的代碼存在於main方法中
該線程稱之為主線程。
拓展:
jvm其實啟動的不止一個線程,還有負責垃圾回收機制的線程。
創建線程的第一種方法,繼承Thread類
1.定義類繼承Thread。
2.覆寫Tread中的run方法
將自定義代碼寫入run方法中,使線程運行。
3.調用線程的start方法
start方法:1.啟動線程。2.調用run方法
發現在每次運行時,運行結果都不一樣。
因為多個線程都在獲取cpu的執行權,cpu執行到誰,誰就運行
明確一點,在某一時刻,cpu只能執行一個線程,cpu在高速地在做著切換,以達到效果上的同時運行(多核除外)
我們可以把多線程的運行獲取在搶奪cpu的執行使用權。
這也是多線程的一個特性:隨機性。誰搶到誰執行。至於執行多長時間,cpu說了算。
創建線程的第二種方法,實現Runnable接口
1.將定義的類實現Runnable接口
2.覆蓋Runnable接口中的run方法
將線程要運行的代碼塊定義在run方法中
3.通過Thread來創建線程對象
4.將Runnable的子類對象作為實際參數傳入Thread類的構造函數
因為自定義的run方法的所屬對象是Runnable接口的子類對象
所以要讓線程去執行指定對象的run方法。必須明確run方法的所屬對象
5.調用Thread中的start方法開始線程並調用Runnable接口中的run方法。
實現與繼承有什麽區別?
實現是為了避免單繼承的局限性
在定義線程時,建議使用實現Runnable接口方法
區別:
兩種方法最大的區別就是run方法的存在的位置不同
繼承Thread類,線程代碼存在於Thread子類中的run方法中
實現Runnable接口,線程代碼存在於Runnable接口中的run方法中
37.泛型類定義:
class 類名<泛型名>
泛型通配符 ?
當需要定義未知引用數據類型的對象時,使用泛型,可以更好減少代碼
38.Arrays中的asList方法
把數組變成集合,就可以使用集合中的方法,更加簡單
但變成集合後不可以使用增刪操作,因為數組長度是固定的。會導出.UnsupportedOperationException錯誤
如果數組中的元素都是對象,那麽變成集合時,數組中的元素直接轉換成集合中的元素
如果數組中的元素都是基本數據類型,那麽會講這個數組作為對象傳入集合。
39.
其實Java自身不具備創建存入數據到文件的功能,只是在調用了windows底層的創建存入方法
Java在其他操作系統上,就調用操作系統內部底層的方法進行操作
40. IOExcption標準處理方法
FileWriter fw =null;
try
{
fw =new FileWriter("a:\\demo.txt");//如果目的值出錯,fw初始化失敗,fw為null,不能調用close語句,所以要先判斷
fw.write("sdfasfas");
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally{
try
{
if(fw!=null)
fw.close();//一定要關閉流資源,將其放入finally語句中
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
41.裝飾設計模式:
當想要對已有對象進行功能增強時,可以定義類,將已有對象傳入,
基於已有的功能,並提供增強的方法,那麽該自定義的類稱為裝飾類
裝飾類通常會通過構造函數的方法來接受要被裝飾的對象,並基於被裝飾類的
方法來提供更加強大的方法
例子:bufferedReader中的readLine方法就是基於FileReader中的read方法
裝飾設計模式與繼承的區別:
裝飾模式比繼承要靈活,避免了過多繼承而產生的臃腫性,而且降低了類與類之間的聯系
裝飾類因為是增強已有對象,具備的功能和已有的是相似的,只不過提供了更強的修飾方法
所以裝飾類與被裝飾類通常都是屬於同一體系中的,是組合關系。
42. 流操作的基本規律
三個明確
1.明確源和目的
源:輸入流 :字節流:InputStream 字符流:Reader
目的:輸出流 :字節流:OutputStream 字符流:writer
2.明確操作的數據是否為純文本文件
是:字符流
否:字節流
3.當體系明確後,就要明確具體使用哪個對象
通過設備來區分
源設備:內存,硬盤,鍵盤錄入
目的設備:內存,硬盤,控制臺
1.將一個文本文件數據復制到另一個文本文件中
源:因為是源,所以使用輸入流,InputStream Reader
因為操作的文本為純文本,所以使用字符流 Reader
明確具體使用設備,硬盤中的文本文件,
所以使用Reader類中的具體操作文件的方法 FileReader
文本文件是否過大,是否需要提高效率,使用緩沖區方法
FileReader fr =new FileReader("yuan.xxx");
BufferedReader br =new BufferedReader(fr);
目的:
因為是目的,所以使用輸出流 ,OutputStream Writer
因為操作的文本為純文本,所以使用字符流 Writer
明確具體使用設備,硬盤中的新文本文件
所以使用Writer類中的具體操作文件的方法 FileWriter
文本文件是否過大,是否需要提高效率,使用緩沖區方法
FileWriter fw =new FileWriter("newmudi.xxx");
BufferedWriter bw =new BufferedWriter(fw);
43.拓展:將鍵盤錄入的數據按照指定編碼表(UTF-8)傳到一個的文件中
源:因為是輸入流,所以為InputStream,Reader
因為為純文本,所以使用字符流 Reader
設備:鍵盤,所以使用System.in
但因為要操作方便,所以要轉成字符流來操作要快
所以使用Reader類中的InputStreamReader方法將字節轉成字符
InputStreamReader isr =new InputStreamReader(System.in);
所輸文本是否過大。,是否需要高效,加緩沖區
BufferedRead br =new BufferedRead(isr);
目的:因為是輸出流,所以為OutputStream,Writer
因為為純文本,所以使用Writer
設備:硬盤中的一個新文件,所以使用FileWriter
但是FileWriter使用的默認編碼表為GBK
而存儲一個指定編碼格式為UTF-8的文本文件,只能用轉換流中的OutputStreamWriter,
而該轉換流要接受一個字節輸出流,而且可以操作的字節輸出流為FileOutputStream
OutputStreamWriter osw =new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");
是否需要高效,加緩沖
BufferedWriter buw =new BufferedWriter(osw);
涉及到轉碼中的編碼表問題,都需要使用轉換流。
44.jar抓包
先將java文件進行包裝,
再dos中運行javac -d 包需要放的位置 需編譯的java文件
例子:javac -d g:\javab\mypackage AwtDemo5.java 將AwtDemo5進行裝包到g:\javab\mypackage中
運行直接在在mypackage中運行java 包名.類名
在進行抓包中,首先進行聲明主類,即創建一個文件,將Main-Class: 包名.主類名 然後回車表該行結束。註意冒號後必須有空格
例如 :Main-Class: mymenu.AwtDemo5
抓包格式:jar -cvfn jar名 聲明主類文件 包名
例子:jar -cvfm menu.jar Main.txt mymenu
45.TCP與UDP
UDP:1.將數據,目的及源封裝到數據包中,不需要建立連接。
2.每次傳輸的數據包的大小限定在64k內
3.因無連接,所以為不可靠連接
4.因為不需要建立連接,所以速度相對較快
例子:對講機,郵局寄物,視頻會議,因為傳輸很快,數據丟失無所謂
TCP:1.建立數據連接,形成傳輸數據的通道
2.在傳輸通道中可以進行大數據的傳輸。
3.通過三次握手連接完成,是可靠連接
三次握手連接,即客戶端向服務器發出請求,服務器回應客戶端的請求,客戶端接受到回應發回服務器的回饋。
4.因為需要建立連接,所以速度相對較慢
例子;兩人打電話,
46.在函數中判斷條件,在循環中只求結果,可以在循環外定義一個標記,如果循環中標記改變,則記住結果,否則不記住。列如 boolean flag= true
47.*.split(#) *對象以#分割
48. http請求消息頭
/*
http://169.254.84.190:12000/myweb/demo.html
GET /myweb/demo.html HTTP/1.1 發送get請求,將
Accept: text/html, application/xhtml+xml, */* 支持格式 */*表除以上格式還支持
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Tride
nt/5.0)
UA-CPU: AMD64
Accept-Encoding: gzip, deflate 支持封裝格式
Host: 169.254.84.190:12000 客戶端
Connection: Keep-Alive //可為closed
//空行,必須存在,用來分隔頭與體
//這部分為請求消息體。
*/
49.InnetAddress 封裝的是ip地址
InnerSocketAddress 封裝的是ip地址加端口號
50.域名解析,如果輸入的是IP地址,直接按照IP地址來打開網頁
如果輸入的是域名,一般先從本地C盤下的host文件來尋找域名與IP地址的映射。如果有,按照本地文件中的映射打開網頁。
如果沒有,再從DNS中尋找映射關系。
51.在對象調用指定方法時,必須指定調用對象,以及傳入參數。
52.正則表達式:符合一定規則的表達式。
作用:用於專門操作字符串。
特點:用於一些特定的符號來表示一些代碼操作。這樣就簡化書寫。
所以學習正則表達式,就是在學習一些特殊符號的使用。
好處:可以簡化對字符串的復雜操作。
弊端:符號定義越多,正則越長,閱讀性越差。
具體操作功能:
1,匹配:String matches方法。用規則匹配整個字符串,只要有一處不符合規則,就匹配結束,返回false。
2,切割:String split();
3,替換:String replaceAll(regex,str);如果regex中有定義組,可以在第二參數中通過$符號獲取正則表達式中的已有的組。
正則表達式的第四個功能。
4,獲取:將字符串中的符合規則的子串取出。
操作步驟:
1,將正則表達式封裝成對象。
2,讓正則對象和要操作的字符串相關聯。
3,關聯後,獲取正則匹配引擎。
4,通過引擎對符合規則的子串進行操作,比如取出。
53.\\1 後向引用,表示表達式中,從左往右數,第一個左括號對應的括號內的內容。
以此類推,\2表示第二個,\0表示整個表達式
$1,$2...是表示的小括號裏的內容
$1是第一個小括號裏的 ,$2是第2個小括號裏的
比如 /gai([\w]+?)over([\d]+)/
匹配 gainover123
$1= 括號裏的 n
$2= 第2個括號裏的 123
匹配雙字節字符(包括漢字在內):[^\x00-\xff]
匹配中文字符的正則表達式: [\u4e00-\u9fa5]
54.static void setErr(PrintStream err)
重新分配“標準”錯誤輸出流。
static void setIn(InputStream in)
重新分配“標準”輸入流。
static void setOut(PrintStream out)
重新分配“標準”輸出流。
即將System.out.println() System.in轉換流
55.隨機訪問流,RandomAccessFile 可讀可寫。
56.html中將數據都使用標簽進行封裝,可以通過標簽中的屬性來操作被封裝的數據。
數據細節化。
57.
學習java的雜亂筆記