1. Java 內部類html
內部類有四種常見的類型:成員內部類、局部內部類、匿名內部類和靜態內部類。安全
1.成員內部類:定義爲另外一個類的裏面以下:數據結構
class Circle { double radius = 0; public Circle(double radius) { this.radius = radius; } class Point{ //內部類 public void DrawPoint() { System.out.println("DrawPoint"); } } }
成員內部類能夠無條件訪問外部類的全部成員屬性和成員方法(包括private成員和靜態成員)。外部類中若是要訪問成員內部類的成員,必須先建立一個成員內部類的對象,再經過指向這個對象的引用來訪問。ide
同時須要注意當成員內部類擁有和外部類同名的成員變量或者方法時,會發生隱藏現象,即默認狀況下訪問的是成員內部類的成員,若是要訪問外部類的同名成員,須要如下面的形式進行訪問:函數
外部類.this.成員變量 外部類.this.成員方法
2.局部內部類this
局部內部類是定義在一個方法或者一個做用域裏面的類,它和成員內部類的區別在於局部內部類的訪問僅限於方法內或者該做用域內。spa
class People{ public People() { } } class Man{ public Man(){ } public People getWoman(){ class Woman extends People{ //局部內部類 int age =0; } return new Woman(); } }
局部內部類就像是方法裏面的一個局部變量同樣,是不能有public、protected、private以及static修飾符的。.net
3.匿名內部類線程
大部分匿名內部類用於接口回調。常見於各類監聽響應這些的代碼當中。以下:設計
scan_bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } });
4.靜態內部類
靜態內部類也是定義在另外一個類裏面的類,可是在類的前面多了一個關鍵字static。它是不須要不須要依賴於外部類的,它能夠由於在沒有外部類的對象的狀況下,能夠建立靜態內部類的對象,也所以它不能使用外部類的非static成員變量或者方法。
public class Test { public static void main(String[] args) { Outter.Inner inner = new Outter.Inner(); } } class Outter { public Outter() { } static class Inner { public Inner() { } } }
5.爲何局部內部類和匿名內部類只能訪問局部final變量?
若是局部變量的值在編譯期間就能夠肯定,則直接在匿名內部裏面建立一個拷貝。若是局部變量的值沒法在編譯期間肯定,則經過構造器傳參的方式來對拷貝進行初始化賦值,這樣就會出現數據不一致的狀況的發生。具體的詳解能夠看:http://www.javashuo.com/article/p-hdzvhjxq-ed.html
2. Java的八種基本數據類型
3. Java訪問控制符
1.private(當前類訪問權限):若是類裏的一個成員(包括成員變量、方法和構造器等)使用private訪問控制符來修飾,則這個成員只能在當前類的內部被訪問。很顯然,這個訪問控制符用於修飾成員變量最合適,使用它來修飾成員變量就能夠把成員變量隱藏在該類的內部。
2.protected(子類訪問權限):若是一個成員(包括成員變量、方法和構造器等)使用protected訪問控制符修飾,那麼這個成員既能夠被同一個包中的其餘類訪問,也能夠被不一樣包中的子類訪問。在一般狀況下,若是使用protected來修飾一個方法,一般是但願其子類來重寫這個方法。
3.public(公共訪問權限):這是一個最寬鬆的訪問控制級別,若是一個成員(包括成員變量、方法和構造器等)或者一個外部類使用public訪問控制符修飾,那麼這個成員或外部類就能夠被全部類訪問,無論訪問類和被訪問類是否處於同一個包中,是否具備父子繼承關係。
4. Java 泛型:
參考:http://www.javashuo.com/article/p-bqkktmnn-g.html
什麼是Java泛型:通俗的講,泛型就是操做類型的 佔位符,即:假設佔位符爲T,那麼這次聲明的數據結構操做的數據類型爲T類型。
爲何要使用泛型?其實就是爲了 類型安全,List<String> 就是用來操做String類型的,你插入Person對象就不行。可是在編譯以後會去掉泛型類型。
5. Java 中,直接使用==操做符,比較的是兩個字符串的引用地址,並非比較內容,比較內容請用String.equals()。
6. Java的常量池放在方法區。
7. join方法 wait方法 notify方法:參考https://blog.csdn.net/jisuanji_qiyongjie/article/details/82052970
現假設有一塊鐘錶對象,鐘錶有兩個線程,一個是查詢當前時間,另外一個是將時間顯示出來。須要顯示出正確的時間。
因爲線程之間的競爭關係,致使不少次顯示時間的線程先執行,而獲取時間的線程後執行,不能顯示正確的時間。這個時候就能夠用join,wait,notify 方法。
1.join方法的特色:執行該方法的線程進入阻塞狀態,直到調用該方法的線程結束後再繼續向下執行
顯示時間的線程執行join方法,而獲取時間的線程調用join方法,所以顯示時間的線程會等待獲取時間的線程執行完再執行,從而能夠保證每次均可以得到正確的時間。
2.對象鎖調用了wait()方法會使當前持有該對象鎖的線程處於線程等待狀態同時該線程釋放對對象鎖的控制權,直到在其餘線程中該對象鎖調用notify()方法或notifyAll()方法時等待此對象鎖的線程纔會被喚醒。須要注意wait方法是一個本地方法,其底層是經過一個叫作監視器鎖的對象來完成的。因此在調用wait方式時要獲取到monitor對象的全部權,那如何獲取monitor對象全部權?Java中只能經過Synchronized關鍵字來完成。
8. Java類初始化的順序:
1.非繼承關係中的初始化順序:static靜態代碼塊和靜態成員 -> 普通成員 -> 構造函數執行
2.繼承的子類:父類靜態代碼塊和靜態成員 -> 子類靜態代碼塊和靜態成員 ->父類普通成員和非static塊 -> 父類構造函數 -> 子類普通成員和非static塊 -> 子類構造函數 。
9. 抽象類和接口:
抽象類是用來捕捉子類的通用特性的 。它不能被實例化。抽象方法能夠繼承一個類和實現多個接口。子類使用extends關鍵字來繼承抽象類。
接口是抽象方法的集合。若是一個類實現了某個接口,那麼它就繼承了這個接口的抽象方法,若是實現了這個接口,那麼就必須確保使用這些方法。接口只是一種形式,接口自身不能作任何事情。且接口方法默認修飾符是public。你不可使用其它修飾符。接口只能夠繼承一個或多個其它接口。子類使用關鍵字implements來實現接口。
10. Java的final 關鍵字:
1.修飾類當用final去修飾一個類的時候,表示這個類不能被繼承。注意:a. 被final修飾的類,final類中的成員變量能夠根據本身的實際須要設計爲fianl。b. final類中的成員方法都會被隱式的指定爲final方法。
2.被final修飾的方法不能被重寫:a. 一個類的private方法會隱式的被指定爲final方法。b. 若是父類中有final修飾的方法,那麼子類不能去重寫。
3.修飾成員變量,必需要賦初始值,並且是隻能初始化一次。