Java些微知識點總結

一些基礎的東西都懂得就不說了,主要總結一些容易出錯或者遺忘的地方

1數組

ps1:數組也是 一種引用類型    int[] , int a[] 這兩種形式都可以,但提倡使用第一種 

ps2: 靜態初始化 int []a =new int[] {i,j,k,l,.....}; 

        動態初始化 int[] a =new int[length];

ps3:不要用多爲數組的思想考慮java的多維數組,應該理解爲數組的數組

        int [][] arr; 次維度可以不同, 即從左往右第二個維度開始可以獨自分配;

        例:int[][] arr=new int[length][];     arr[0]=new int [a];    arr[1]=new int [b];

增強類 Arrays 的靜態方法

1:int binarysearch(type [] a,type key); 查找不存在則返回負數

2 :  int binarysearch(type [] a,int from,int to,type key);

3 :type[] copyof(type [] a,int length )

4 :   type[] copyofrange(type[] a,int from,int to);

5 :  boolean equals(type[] a1,type []a2);

6 : void fill(type[]a,type val); 用 val賦值a;

7 : void fill(type[] a,int from,int to,type val);

8 :void sort(type[] a ); 從小到大

9 : void sort(type[] a,int from,int to);

10 String  toString(type[] a );


2 參數傳遞

java中的參數傳遞是值傳遞:基本類型的傳遞是傳遞的值的副本,改變副本不會改變原來的值;但是引用類型的傳遞傳遞的是地址所以,改變副本的值就是該變原來的值;因爲副本值是一個指向原來地址的值;

3 package ,import, import static

import static 導入類的靜態屬性和方法,在使用這些靜態屬性和方法的時候可以不用寫類名直接寫方法名和屬性名;

4 調用父類的構造器時 super關鍵字一定是出現在構造器的第一行的

5 多態

編譯時是父類 運行時是子類,從而運行時表現出子類的特性   子類到父類是向上轉型,父類到子類是向下轉型

a instanceof ClassB

6爲何出現包裝類

將基本數據類型轉換成Object; 包裝類中的-128到127之外的數自動裝箱之後的地址總是不同的(每次都會new一個Integer),而這之間的整數自動裝箱後的地址是一樣的(被裝入了緩衝中);

7== 和equals 

==和equals本沒有區別 都要求兩個引用變量指向同一個對象才返回true,都是比較地址

但String 類已經重寫了equals方法 只要值相等就返回true

new String(“hello”) 產生兩個字符串對象 一個在堆中 一個在常量池中

8抽象類

一句話 和普通類的唯一區別:抽象類中可能出現抽象方法,抽象類中可以定義普通類中的任意屬性和方法

final和abstract是衝突的關鍵字

static 和abstract也不能同時修飾同一個方法   但可以修飾內部類

abstract和private 也不能同時修飾方法

子類只能有一個抽象父類或者普通父類 extends(單繼承你懂得)


9接口

[修飾符] interface 接口名 extends 父接口1 ,父接口2...

{常量,抽象方法,背部類,接口,枚舉定義,默認方法定義,類方法定義(java8中才可以)

接口中不能有構造器,初始化塊定義

定義默認方法時要使用default關鍵字

類方法和默認類必須有實現體

不能直接使用接口來調用默認方法,需要使用接口的實現類的實例來調用默認方法    

類方法不能使用default關鍵字修飾

10 內部類

    內部類也是類

    非靜態內部類對象中會開闢一塊內存存放外部類對象的引用 所以有非靜態內部類對象存在一定有外部類存在,非靜態內部類只

    能在該外部類中使用

    外部類對象中不一定定義了內部類對象所以外部類不可以直接訪問內部類對象 但可以通過內部類對象訪問內部類屬性 對象和對

    象之間的交流

    總而言之 內有外但玩不一定有內;一個男人不一定有兒子,但一個兒子一定有父親; 沒有兒子怎麼辦 那得生一個嘍(new)

    之後才能使喚兒子是吧,兒子一定有父親所以兒子一定能和父親住一個屋子嘍!

    主要是一個先有後又的問題;



變量重名時通過下面三個來區分使用哪個變量  

  局部變量var,內部類變量 this.var ,外部類變量outerclass.this.var

  非靜態內部類裏不允許有 靜態屬性,方法,代碼塊 

  不允許在外部類的靜態成員中直接使用非靜態內部類

靜態內部類 屬於外部類的靜態成員



接口裏可以定義內部類一定是public static 可以定義接口但一定是public

在外部類以外的地方使用內部類則必須使用外部類的實力對象創建內部類 從而是內部類對象依附於該外部類對象

outinstance.new innerclass xxx;

即使在子類中寫了與父類內部類 同名的內部類他們依然不是重寫關係, 因爲這兩個同名的內部類的外部類不同名,外部類名是作爲內部類 的命名空間的。

匿名內部類 只能實現一個接口或繼承一個父類  主要用於創建一個接口類型的對象  

如果局部變量被匿名內部類訪問,則該局部變量相當於自動使用了final修飾

引用:強,軟,弱,虛

強引用 最常見的引用 StrongReference

軟引用 內存不只是會回收 SoftReference

弱引用,gc運行時就會回收 WeakReference

虛引用 主要用那個與跟蹤對象被垃圾回收的狀態,虛引用不能單獨使用,必須和引用隊列聯合使用 PhantomReference ReferenceQueue

String  不可變

StringBuffer 線程安全的

 StringBuilder 非線程安全的 性能高

PriorityQueue 元素是按照大小順序排列的,不是fifo,違反的隊列的規則

List 接口實現類  ArrayList  Vector,據說LinkedList 功能更強大,他也實現了Deque

Queue接口實現類 PriorityQueue 

Deque接口的實現類 ArrayDeque 

Map

源碼的一個小祕密,java 的set類是通過map類來實現的,雖然set 實現的是Collection接口。

HashMap,Hashtable 區別

Hashtable 線程安全,且無法放入null key 但HashMap可以放入一個null key 且非線程安全

SortedMap 

SortedMap接口的實現類是 TreeMap TreeMap是通過紅黑樹實現的。

try catch finally 中的return

finally語句一定會執行 不管try和 catch中是否有return 語句   ,當finally 中有return語句 會立即生效 不會在跳轉回去。盡力壁面在finally 中使用return 語句

異常處理中的責任鏈模式

不斷向上層拋出無法處理的異常,並不斷的封裝該異常,從而隱藏底層實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章