java基礎部分總結2

張超帥發表於2017-08-05

匿名內部類:
匿名類沒有類名,所以匿名類不能有構造器
匿名內部類的建立格式為: new 父類構造器(引數列表)|實現介面(){
//匿名內部類的類體實現
}
使用匿名內部類時,必須繼承一個類或實現一個介面
匿名內部類由於沒有名字,因此不能定義建構函式
匿名內部類中不能含有靜態成員變數和靜態方法
匿名內部類,匿名了,沒名字,構造器去哪找名字,即不能有建構函式


StringBuffer和StringBuilder
效率:StringString(大姐,出生於JDK1.0時代) 不可變字元序列 StringBuffer(二姐,出生於JDK1.0時代) 執行緒安全的可變字元序列 StringBuilder(小妹,出生於JDK1.5時代) 非執行緒安全的可變字元序列

Java中的String是一個類,而並非基本資料型別。string是值傳入,不是引用傳入。
String 不可變類 StringBuffer 可變類 執行緒安全


1.”is”說明後面的內容都會被強制轉換為string,所以是最後結果是拼接起來的
2.100+5先得到105,然後與is拼接
3.先算括號內的


繼承具有傳遞性,子類可以無條件向上轉型!



A.java用來執行一個.class檔案
B.javadoc用來生成api文件
C.jar用來生成jar包
D.javac用來把.java檔案編譯為.class檔案


兩個最基本的java回收演算法:複製演算法和標記清理演算法
複製演算法:兩個區域A和B,初始物件在A,繼續存活的物件被轉移到B。此為新生代最常用的演算法
標記清理:一塊區域,標記要回收的物件,然後回收,一定會出現碎片,那麼引出
標記-整理演算法:多了碎片整理,整理出更大的記憶體放更大的物件
兩個概念:新生代和年老代
新生代:初始物件,生命週期短的
永久代:長時間存在的物件
整個java的垃圾回收是新生代和年老代的協作,這種叫做分代回收。
P.S:Serial New收集器是針對新生代的收集器,採用的是複製演算法
Parallel New(並行)收集器,新生代採用複製演算法,老年代採用標記整理
Parallel Scavenge(並行)收集器,針對新生代,採用複製收集演算法
Serial Old(序列)收集器,新生代採用複製,老年代採用標記整理
Parallel Old(並行)收集器,針對老年代,標記整理
CMS收集器,基於標記清理
G1收集器:整體上是基於標記 整理 ,區域性採用複製

綜上:新生代基本採用複製演算法,老年代採用標記整理演算法。cms採用標記清理。


陣列的定義:
陣列命名時名稱與[]可以隨意排列,但宣告的二維陣列中第一個中括號中必須要有值,它代表的是在該二維陣列中有多少個一維陣列。


內部類和外部類:
對於外部類來說,只有兩種修飾,public和預設(default),因為外部類放在包中,只有兩種可能,包可見和包不可見。
對於內部類來說,可以有所有的修飾,因為內部類放在外部類中,與成員變數的地位一致,所以有四種可能。


Static
被static修飾的會預設初始化,int就是0咯
this不能在static的方法中使用~

只要明白static裡不能用this

Super和this
this 和 super 必須寫在第一行,兩者不能同時出現!


物件導向的五大基本原則

單一職責原則(SRP)
開放封閉原則(OCP)
里氏替換原則(LSP)
依賴倒置原則(DIP)
介面隔離原則(ISP)


try-catch-finally
如果try語句裡有return,那麼程式碼的行為如下:
1.如果有返回值,就把返回值儲存到區域性變數中
2.執行jsr指令跳到finally語句裡執行
3.執行完finally語句後,返回之前儲存在區域性變數表裡的值
如果try,finally語句裡均有return,忽略try的return,而使用finally的return.


public Method[] getDeclaredMethods()返回類或介面宣告的所有方法,包括public, protected, default (package) 訪問和private方法的Method物件,但不包括繼承的方法。當然也包括它所實現介面的方法。
public Method[] getMethods()返回類的所有public方法,包括其繼承類的公用方法,當然也包括它所實現介面的方法。


super和this
super()和this()均需放在構造方法內第一行。
this和super不能同時出現在一個建構函式裡面,因為this必然會呼叫其它的建構函式,其它的建構函式必然也會有super語句的存在,所以在同一個建構函式裡面有相同的語句,就失去了語句的意義,編譯器也不會通過。
this()和super()都指的是物件,所以,均不可以在static環境中使用。包括:static變數,static方法,static語句塊


過載和重寫
引數不同
方法過載的返回值的型別可以不同,因為判斷方法過載的方法主要是根據方法的引數不同來判定;

繼承下來的
方法重寫的返回值型別需要相同,重寫就是子類繼承了父類的方法,並在此方法上重寫屬於自己的特徵,既然是繼承過來的,那麼它的返回值型別就必須要相同


宣告

`
default String s
public final static native int w( )
abstract double d
abstract final double hyperbolicCosine( )

A:java的訪問許可權有public、protected、private和default的,default不能修飾變數
C:普通變數不能用abstract修飾,abstract一般修飾方法和類
D:被定義為abstract的類需要被子類繼承,但是被修飾為final的類是不能被繼承和改寫的`


路徑是c:\my\1.txt,但是’\’需要轉意,故前面加\,故最終是”c:\my\1.txt”


中介軟體是一種獨立的系統軟體或服務程式,分散式應用軟體藉助這種軟體在不同的技術之間共享資源。中介軟體位於客戶機/ 伺服器的作業系統之上,管理計算機資源和網路通訊。是連線兩個獨立應用程式或獨立系統的軟體。相連線的系統,即使它們具有不同的介面,但通過中介軟體相互之間仍能交換資訊。執行中介軟體的一個關鍵途徑是資訊傳遞。通過中介軟體,應用程式可以工作於多平臺或OS環境。
(簡單來說,中介軟體並不能提高核心的效率,一般只是負責網路資訊的分發處理)


封裝:
封裝就是將屬性私有化,提供公有的方法訪問私有屬性。
為什麼需要封裝?
通過封裝,可以實現對屬性的資料訪問限制,同時增加了程式的可維護性。
由於取值方法和賦值方法隱藏了實現的變更,因此並不會影響讀取或修改該屬性的類,避免了大規模的修改,程式的可維護性增強


Socket
客戶端通過new Socket()方法建立通訊的Socket物件
伺服器端通過new ServerSocket()建立TCP連線物件 accept接納客戶端請求

由Socket s=ss.accept();伺服器端通過TCP連線物件呼叫accept()方法建立通訊的Socket物件


基本資料型別和引用資料型別:
基本型別只能儲存一些常量資料,引用型別除了可以儲存資料,還能提供操作這些資料的功能;
為了操作基本型別的資料,java也對它們進行了封裝, 得到八個類,就是java中的基本型別的封裝類;他們分別是:
八種基本型別: byte short int long float double char boolean
對應的包裝類 : Byte Short Integer Long Float Double Character Boolean


識別符號:
識別符號是以字母開頭的字母數字序列,不能以數字開頭。
數字是指0~9,字母指大小寫英文字母、下劃線(_)和美元符號($),也可以是Unicode字符集中的字元,如漢字;
字母、數字等字元的任意組合,不能包含+、- *等字元;
不能使用關鍵字;
大小寫敏感


Servlet
基本功能:service方法是在servlet生命週期中的服務期,根據HTTP請求方法(GET、POST等),將請求分發到doGet、doPost等方法
實現:預設在HttpServlet類中實現。

servlet在多執行緒下其本身並不是執行緒安全的。
如果在類中定義成員變數,而在service中根據不同的執行緒對該成員變數進行更改,那麼在併發的時候就會引起錯誤。最好是在方法中,定義區域性變數,而不是類變數或者物件的成員變數。由於方法中的區域性變數是在棧中,彼此各自都擁有獨立的執行空間而不會互相干擾,因此才做到執行緒安全。


Math.cos為計算弧度的餘弦值,Math.toRadians函式講角度轉換為弧度


異常:
異常分為執行時異常,非執行時異常和error,其中error是系統異常,只能重啟系統解決。非執行時異常需要我們自己補獲,而執行異常是程式執行時由虛擬機器幫助我們補獲,執行時異常包括陣列的溢位,記憶體的溢位空指標,分母為0等!


JSP中include指令和include動作
include指令<%@ include file=”test.jsp”%>
include動作
include指令與include動作之間的根本性差異在於二者被呼叫的時間。include指令是在編譯階段的指令,即在編譯時,編譯器會把指令所指向目標檔案的內容複製到指令所在的位置。適合於靜態頁面
include動作是執行時的語法,在主介面被請求時,才將用到的頁面包含進來,更適合用於包含動態頁面的情況。

靜態include的結果是把其他jsp引入當前jsp,兩者合為一體;動態include的結構是兩者獨立,直到輸出時才合併


forward和redirect
forward是伺服器內部的重定向,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而客戶端並不知道,因此在客戶端瀏覽器的位址列中不會顯示轉向後的地址,還是原來的地址。

redirect是客戶端的重定向,是完全的跳轉,即客戶端瀏覽器會獲取到跳轉後的地址,然後重新傳送請求,因此瀏覽器中會顯示跳轉後的地址。由於這種這種方式比forward方式多了一次網路請求,因此其效率要低於forward方式。 客戶端的重定向可以通過設定特定的http頭或寫javascript指令碼實現。


volatile
所謂 volatile的措施,就是
1. 每次從記憶體中取值,不從快取中什麼的拿值。這就保證了用 volatile修飾的共享變數,每次的更新對於其他執行緒都是可見的。可以理解成:對volatile變數所有的寫操作都能立刻被其他執行緒得知。
2. volatile保證了其他執行緒的立即可見性,就沒有保證原子性。
3.由於有些時候對 volatile的操作,不會被儲存,說明不會造成阻塞。不可用與多執行緒環境下的計數器。

由於及時更新,很可能導致另一執行緒訪問最新變數值,無法跳出迴圈的情況
多執行緒下計數器必須使用鎖保護。

相關文章