国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java復習筆記

2019-11-15 00:44:40
字體:
來源:轉載
供稿:網友
java復習筆記

最近要做兩個基于JavaWeb的網絡系統,想起我那渣得可憐的Java功底。。。淚崩!于是花了三天時間大體上上復習了一下java的重要知識,mark一記。

目錄

一.基礎知識

二.string

三.類

四.管理

五.泛型

六.線程

七.反射

一.基礎知識

1.JavaSE可以分為四個主要的部分:JVM、JRE、JDK和Java語言。

2.

3.

二.string

1.java中字符串不僅僅是字符數組,還是string類的一個實例。

2.靜態分解方法parseByte(),parseShort().parseInt().parseLong(),parseFloat(),parseDouble()

=>NumberFormatException異常

3.使用索引取得字符串

4.字符串內容不可變(不是原來的字符對象了)

5.Java執行時會維護一個string池(pool)。如stringstr=”aa”;str0=”aa”;那么str==str0(引用自同一個對象)

Intern():先equals()pool中的內容,有相同則返回池中對象的引用

Eg:Stringstr1=newString(“aa”);Stringstr2=newString(“aa”);str1.equals(str2);

一共產生了三個string實例。”aa”本身一個,存在于pool中,又new兩個String對象,分別由str1和str2參考

6.StringBuilder類,默認16字符長度,會自動增加長度以榮內被附加的字符

單機非多線程:StringBuilder

StringBuffer處理同步,多線程

7.分離字符串split()

8.正則表達式

運行原理:

Matches()pattern的靜態方法,返回boolean(),表明字符串是否符合正則表達式。

將正則表達式作為一個對象重復應用,使用pattern的靜態方法compile()進行編譯,返回pattern的一個實例,然后可以重復使用實例的matcher()方法

Patternpattern=Pattern.compile();

Matchermatcher=pattern.matcher();

顯示matcher.group()

三.類

  1. class關鍵字定義類,用類定義對象。一個文件中只能有一個類被設定為public,且文件名同類名
  2. 與類同名的方法稱為構造函數,一般用來初始化(一般為public,可有多個,不同的參數arg)
  3. 方法中的變量名稱會暫時覆蓋域成員的作用范圍(內層優先于外層)
  4. This用來引用自調用方法的實際對象,也可以帶參數用來調用構造函數,而避免直接以構造函數的名稱來調用。
  5. Static所有類所有,不能有this,java的靜態方法中不允許使用非靜態成員
  6. Java在使用到類的時候才會加載類到程序中,如果希望在加載類時先進行一些類的初始化工作,可以使用使用static定義一個靜態區塊,會在加載時被先加載,且僅加載一次。
  7. 返回值的類型不能作為方法重載的區別依據。
  8. 編譯器在處理重載方法、裝箱問題和不定長度參數時,依照以下順序:

(1)沒有裝箱動作前可以符合參數個數和類型的方法

(2)裝箱動作后可以符合參數個數和類型的方法

(3)不定長度參數并可以符合的方法eg:intsum(int...nums){for(intsum:nums){}},實際為傳入參數為int[]nums

(4)找不到對應的方法,報告錯誤

9.垃圾收集

10.extendspublic成員可以直接在子類中被調用使用

11.在擴展了某個類以后,可以用supeer()基底類的構造函數。在子類的的構造函數中,如果不用super(),默認調用父類的無參構造函數。

12.PRotected派生類(子類)可以直接存取基類中的成員,而不會被外部對象獲取。

13.object的toString()默認返回類名稱和十六進制編碼:getClass().getName()+’@’+Interger.toHexString(hashCode())。可以被重寫。

Equals()本身是比較對象的內存地址是否相同。重寫equals()時需要同時重寫hashCode()。因為在以hash碼為基礎的相關環境中,需要比較兩個對象是否為相同的對象時,除了使用equals(),還會使用hashCode()方法。

14.clone()方法,復制對象本身。要支持復制自身的對象,定義類的時候必須實現Cloneable接口,不然其實例的clone()方法被調用時,會拋出CloneNotSupportedException。

15.多態:使用共同的實現接口(通常指的是在類上定義的公開方法),以實現不同的對象實例。為了降低對實現接口的依賴程度。Java在實現多態時,可以讓程序依賴于抽象類或接口。Abstractextends

接口的目的在于定義一組可實現的方法,實現某接口的類必須實現該接口的所有方法,只要對象有實現某個接口,就可以通過該接口實現對象上對應的方法。Interfaceimplement

每多實現一個接口,就多遵守一個實現協議。類一次只能繼承一個父類,但一個接口可以同時繼承多個父接口。(以I開頭定義)

四.管理

1.相關:靜態工廠,Iterator

2.一個.java文件中只能有一個public類,沒有被聲明為public的類只能被同一個包中類的實例調用。如果申明類的時候不使用public等,則預設為包存取范圍。

3.異常:在Java中代表一個錯誤的實體對象。最好只用于錯誤處理,而不用于業務邏輯的一部分,因為異常產生消耗資源。

Try(唯一)必有catch(不一定唯一)和finally(唯一)至少取其一。

父類的某個方法聲明拋出異常,重寫該方法時:可以不處理,僅拋出父類中被拋出的某些異常,拋出父類被拋出異常的子類。不能拋出父類方法中未定義的其它異常,不能拋出父類拋出異常的父類。

4.斷言Assertion預期程序處于某種狀態。默認啟動時不檢查,除非使用-enableassertions或者-ea自變量。

Assertboolean_expression;false拋出java.lang.AssertionError

Assertboolean_expression:detail_expression;false顯示detail_expression

5.枚舉類型是一種特殊的類成員為實例,被默認修飾為finalpublicstatic.可以構造非公開的構造函數(Singleton模式的應用)

五.泛型

1.J2SE5.0之前使用Object定義類并轉換為原來的類型或者適當的接口。

有了泛型之后,使用<T>聲明一個類型持有者名稱。使用泛型所定義的類在聲明及配置對象時,可以使用尖括號一并指定泛型類持有者T的真正的類型,而不需要類型或接口轉換。

2.可以使用泛型來聲明一個數組,但是不能使用泛型來建立數組的實例。

3.限制泛型可用類型同時使用extends指定這個類型持有者實例化,實例化的對象必須是擴充自某個類型或實現某接口。

4.類型通配符(Wildcard)?代表未知類型,并用extends關鍵詞來限定(無法加入新類型,只能取或者移除)

<?ExtendssomeClass>向下限制只能是包含在內的,或者子類

<?SupersomeClass>向上限制只能是包含在內的,或者超類

5.擴充泛型類和實現泛型接口建議:父類的類型持有者都要保留

六.線程

1.進程是一個包含自身執行地址的程序。RR輪轉法。可以包括多個線程,即線程的執行流程,由于RR的時間片短,所以程序看起來像同時進行多個不同的子流程。

2.JAVA中實現線程,可以繼承java.lang.Thread類,并重新定義run(),自后范例化自定義的Thread類,再使用start()啟動線程。

或者實現java.lang.Runnable接口來定義含有線程功能的類。Runnable接口中定義有一個run()方法,在范例化一個Thread對象時,可以傳入一個Runnable接口的對象作為自變量,Thread對象會調用Runnable對象的run()方法,進而執行其中所定義的流程。

3.java中一次只能繼承一個類。

4.如果希望某個線程在產生它的線程結束后也跟著終止,則設定它為Daemon線程,在后臺執行服務。setDaemon()方法。

5.

范例化一個Thread并執行start()后,線程進入Runnable狀態(可執行準備狀態),等待調度。setPriority()方法設定線程的優先級(1~10,默認為5)。同優先級則RR。

6.對于不支持Timeslicing的系統,讓目前線程禮讓其它線程(暫停,進入Runnable狀態),用yield(js類比)。

7.join()中途插入一個高優先級(先執行)的線程。

8.ThreadGroup線程組。判斷:Thread.currentThread().getThreadGroup().getName()。

9.處理Uncheckedexception,J2SE5.0之前用uncaughtException(),之后使用Thread.UncaughtExceptionHandler接口,并實現其uncaughtException()方法。

10.同步synchronized。不同線程共享數據的時候,同時更新同一對象信息時。

11.每個對象內部都會有一個鎖定,被標識為synchronized的方法會成為同步區域,當線程執行某個對象的同步區域時,要執行同步區域的線程,都必須先獲得對象的鎖定,執行完同步區域之后再將鎖定歸還給對象。由于對象的鎖定只有一個,因此一個線程取走鎖定在執行同步區域的代碼時,其它想執行synchronized區域的線程在鎖定池等待,直到歸還為止。獲得鎖定的線程才能進如Runnable狀態等待調度。

12.wait(),必須在同步的方法或者區塊中,要求線程進入對象的等待池。

Notify()從等待池中通知一個線程加入到鎖定池的Blocked狀態,被通知的線程是隨機的,且會與其它線程共同競爭對象的鎖定。(生產者模式)

13.容器內默認沒有考慮線程安全問題,必須自行實現同步。可以使用java.util.Collection的synchronizedXXX()等方法傳回一個同步化的容器對象。以這種方式返回的對象,在使用Iterator遍訪對象時,仍必須實現同步化。J2SE5.0后再java.util.concurrent里面有一些確保線程安全的類。

14.JDK1.2之后可以給予每個線程一個特定的空間來保管該線程所獨享的資源,使用java.lang.ThreadLocal。

15.util.concurrent.Callable與util.concurrent.Future協助完成future模式,在請求發生時,先產生一個Future對象給發出請求的客戶,類似代理,同時所代理的真正目標對象的生成是由一個新的線程持續進行。

16.

17.

七.反射

1.可以通過Object的getClass()方法來取得每一個對象對應的Class對象,或者通過class常量,在取得class對象之后,就可以操作class對象上的一些公開方法來取得類的基本信息。

2.Java僅在需要使用類的時候才會加載,如在用new生成對象時,聲明參考名稱并不導致類被加載。一個類在JVM中只會有一個Class實例,且以實例的形式存在。基本類型也都有對應的Class對象。

3.在無法事先知道用戶將加載什么類,而必須讓用戶指定類名加載類的時候,可以用Class的靜態forName()方法實現動態加載類。指定類名稱,甚至指定加載類時是否運行靜態區塊,指定類加載器。

4.

5.命令模式執行javaXXX.class指令

=>java運行程序查找JRE安裝目錄

=>找jvm.dll(默認為bin/client)

=>啟動jvm并進行初始化動作

=>產生BootstrapLoader(一般由C編寫而成)

=>BootstrapLoader(一般為java編寫而成)加載ExtendedLoader,并設置其parent為BootstrapLoader

=>BootstrapLoader會加載SystemLoader,并設置SystemLoader的parent為ExtendedLoader

=>SystemLoader開始加載指定的類

每一個加載器會先將加載類的任務交給其parent,如果parent找不到,再由自己負責加載。即Bootstrap=>ExtendedLoader=>SystemLoader=>NoClassDefFoundError

Java類加載器層次架構

(1)BootstrapLoader會搜索系統參數sun.boot.class.path中指定位置的類(默認為JRE下classes中的.class文件或lib下的.jar文件),可以使用System.getProperty(“sun.boot.class.path”)查看。

(2)ExtendedLoader會搜索系統參數java.ext.dirs中指定位置的文件(默認為JRE目錄下的lib/ext/classes下的.class文件或lib/ext下的.jar文件),可以使用System.getProperty(“java.ext.dirs”)查看。

(3)SystemLoader會搜索系統參數java.class.path中指定位置的文件(默認為當前工作目錄下的.class文件),可以使用System.getProperty(“java.class.path”)查看。

(4)三個加載器各司其職,文件放錯位置會拋出異常或null。

6.使用loadClass()方法加載類的時候,不會運行靜態區塊。

7.ExtClassLoader和AppClassLoader都是java.net.URLClassLoader的子類。在程序啟動后兩者都會在虛擬機中存在一份,程序運行時無法再改變它們的路徑,需要動態加載其它路徑的類則需要產生新的加載器。

指定ExtClassLoader的搜索路徑java-Djava.ext.dirs=c:/路徑

指定AppClassLoader的搜索路徑(設置ClassPath)java-classpathc:/路徑

使用URLClassLoader來產生新的加載器。

URLurl=newURL(“file:/c:/路徑”);

ClassLoaderurlClassLoader=newURLClassLoader(newURL[]{url});

Classc=urlClassLoader.loadClass(“SomeClass”);

8.BootStrapLoader載入ClassLoader

=>新增了ClassLoader實例(自動將其parent設置為AppClassLoader)后,使用loadClass()來指定要加載的類

9.使用反射機制,可以在運行時期動態加載類并生成對象,操作對象上的方法,改變類成員的值,甚至于改變私有變量的值。

10.newInstance()=>實例化對象,返回Object類型

指定參數類型,去的Constructor對象,使用Constructor的newInstance()并指定參數的接受值=>動態加載及生成對象時指定對象的初始值

11.J2SE1.3之后加入java.lang.reflect.Proxy類,可協助實現動態代理功能。

實現動態代理功能=>

定義要代理的接口=>

使用Proxy.newProxyInstance()建立代理對象=>

調用InvocationHandler的invoke()方法傳入被代理對象的方法名稱和運行變量,將實際運行的對象交給method.invoke()

=>method.invoke()返回的對象是實際方法運行后的回傳結果

12.Ant構建工具,Junit測試工具


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西充县| 杭州市| 盐池县| 崇明县| 南投市| 灵川县| 鄱阳县| 肥西县| 双桥区| 岗巴县| 富民县| 大埔县| 遂平县| 宁波市| 安乡县| 双辽市| 吕梁市| 酒泉市| 平果县| 古田县| 平罗县| 梅河口市| 潮州市| 昌平区| 如东县| 商丘市| 攀枝花市| 静乐县| 石景山区| 专栏| 银川市| 莱州市| 和龙市| 山东| 马山县| 海兴县| 繁昌县| 朔州市| 含山县| 惠来县| 乐清市|