1. 程式人生 > >當年我們一起追過的Java,Java SE 個人筆記

當年我們一起追過的Java,Java SE 個人筆記

目錄

JDK的安裝和配置執行Java程式

java基本語法

面向物件

異常

多執行緒

API(Application Programming Interface)各種功能的類說明

集合類

 IO輸入輸出

GUI圖形使用者介面

網路程式設計


Java SE基礎筆記

java是一門面向物件的高階程式設計語言,拋棄指標,運算子過載等C++特性而使用引用來開發的一門語言。本文從個人學習角度需求進行記錄,不涉及具體實現程式碼,只做基本內容使用的說明。同時部分以C語言作為參考與對比

 

JDK的安裝和配置執行Java程式

JDK目錄:

bin目錄:放置一些可執行的程式如javac.exe,java.exe,jar.exe,javadoc.exe等

db目錄:小型的資料庫,純java實現

jre目錄:Java Runtime Enviroment(Java執行環境)

include目錄:C/C++庫

src.zip放置JDK核心類的原始碼

java執行操作

javac.exe是java編譯器工具,可以將java檔案編寫成java位元組碼檔案,原始檔副檔名為.java,編譯後為.class

java.exe是java執行工具,它會啟動一個JVM程序,一個虛擬的執行系統

編譯java檔案    javac xx.java     執行java檔案       java  xx

不使用任何IDE編譯,通過安裝的JDK進行編譯:

開啟CMD命令視窗,然後通過cd命令進入安裝路徑,使用javac命令編譯,使用java命令執行

JDK配置

我的電腦-->屬性-->系統屬性-->編輯-->編輯系統變數進行編輯

path直接新增安裝路徑\bin,classpath需要建立然後使用安裝路徑\bin  path呼叫的是java工具,classpath是查詢類


 

 

java基本語法

java分為結構定義語句和功能執行語句,必須使用分號

java區分大小寫,且是行內執行,不能跨行

註釋為          // 單行註釋                 /*        */多行註釋             以及文件註釋/**           */

文件註釋可以新增一些文件說明,如個人或者公司等

javadoc -d . -version -author Person.java

幫助文件可以在網上下一個CHM格式的文件,或者使用eclipse,在裡面配置一個jdk.zip文件。

 

java書寫規範

1.包名所有字母一律小寫

2.類名和介面名每個單詞的首字母都要大寫

3.常量名所有字母都大寫,單詞之間用下劃線連線

4.變數名和方法名的第一個單詞首字母小寫,從第二個單詞開始每個單詞首字母大寫

Java關鍵字
abstract boolean break byte case catch char const class continue
default do double else extends final finally float for goto
if implements import instanceof int interface long native new package
private protected public return short static strictfp super switch this
throw throws transient try void volatile while synchronized  

 

Java中的常量1.整型常量        2.浮點數常量       3.字元常量       4.字串常量        5.布林常量        6.null常量       

變數的型別

 
資料型別
基本資料型別 引用資料型別
數值型 字元型(char) 布林型(boolean) 類(class) 介面(interface) 陣列 列舉(enum) 註解(annotation)

數值型可分為1.整數型別                 byte(1b)        short(2b)        int(4b)        long(8b)  一般為int,特定需要時新增字尾

                      2.浮點型別                float(4b)        double(8b)       一般為double,需要特定指出float時新增f  

邏輯運算子
& 兩值皆為真則真,兩值運算皆執行
| 一值為真則真,兩值皆運算
^ 異或 一真一假為真,兩真或兩假為假
取反
&& 短路與 和與一樣,但前一值為假即不執行後一值判斷
|| 短路或 前值為真則不運算
位運算子
& 按位與 兩值為1則1,否則為0
| 按位或 一值為1則1,否則為0
^ 按位異或 只有一值為真時才真,否則為假
~ 取反 一位取反
<< 左移 數值加上左移位數
>> 右移 根據符號位補0或1

算術運算子++/--在變數前為這先執行自增後執行其它運算,在變數之後為先以當前值進行運算,行內程式碼執行完成後進行自增

賦值運算子+=/-=等二元簡寫運算子形式如:a+=b--->a=a+b    

語句:

if(        ){       }        else if(        ){        }        else{        }

switch(        ) {case:        }

while(    true    ){        }                                               do{        }while(  true      )

for(  ;  ;){     }

break        continue

方法過載為方法名相同,引數個數或者型別不同

陣列int[] arr=new int[];


 

面向物件

面向物件的特性1.封裝性        2.繼承性        3.多型性

 

類是物件的抽象,可以定義成員變數即屬性,成員行為即方法

類名 物件名稱 =new 類名() new開啟引用地址 ,類名後的括號用於構造方法的建立,每一個類均有一個或多個構造方法

物件.物件成員                             訪問物件的屬性或者方法

類的封裝——使用private私有屬性,除所在類外不能訪問,但可通過公有的方法訪問私有屬性的值,起到對私有屬性的保護

構造方法:1.方法名和類名相同       2.在方法名前面沒有返回值型別的宣告        3.方法不帶有返回值       例項化物件時自動呼叫構造方法

this關鍵字用於訪問該物件的成員

this()呼叫構造方法,只能在構造方法裡面呼叫其他構造方法,必須位於構造方法的第一行,並且不能兩個構造方法互相呼叫。構造方法相當於一個static靜態方法,在建立物件時自動建立,並且與super呼叫父類相沖突,只能選擇其中一個

 

java自動垃圾回收,但也可以通過System.gc()通知虛擬機器進行垃圾回收    當物件在記憶體中被釋放時,其finalize()方法會被自動執行

static靜態

靜態變數:static建立的資料為各個類的例項所共享,通過類名.變數名訪問    即屬於類的範圍,類引用時建立(按需要呼叫)

靜態方法:static方法,通過類名.方法名呼叫,靜態的成員均不需要建立物件就能直接呼叫(按需要呼叫)

靜態程式碼塊:當類被載入時,靜態程式碼塊會執行,由於類只加載一次,因此程式碼塊就執行一次

 

單例模式

class Single{
    private static Single INSTANCE=new Single();    //私有靜態例項,由於是靜態,類載入時建立且唯一
    private Single();                                 //私有構造方法,不能通過new建立新物件
    public static Single getInstance(){               //公有靜態方法,引用類。方法呼叫方法體  
        return INSTANCE;
    }
}

 

內部類——成員內部類,靜態內部類,方法內部類

成員內部類:成員內部類可以訪問外部類的所有成員,同樣,外部類成員通過建立內部類物件訪問內部類資料,在其他類中,需要建立外部類物件才能訪問內部類。內部類就是一個類裡面還包含一個新建立的類。

class Outclass{                  //外部類
    class Inner{                 //內部類
    }
}

由於編譯時內部類需要建立外部類然後生成關聯檔案到內部類上,因此要訪問內部類的形式如下:

外部類名.內部類名      變數名=new 外部類名().內部類名()        

靜態內部類

class Outclass{                  //外部類
    static class Inner{          //靜態內部類
    }
}

外部類名.內部類名       變數名=new  外部類名.內部類名();

內部類與靜態內部類的差別,首先需要說明類和物件的差別:類是物件的抽象,因此建立物件需要呼叫關於該類的構造方法,但註冊在該類的靜態成員會隨著類的引用而生成,不需要建立物件。靜態成員只能訪問靜態成員。靜態內部類只能定義靜態成員,非靜態內部類不能定義靜態成員。這涉及到一個類的生成、物件生成、靜態成員建立的順序。

方法內部類:在成員方法中定義的類,只能在方法中被呼叫

class outer{
    public void test(){
        class Inner{
        }
    }
}

方法內部類可以呼叫外部類的成員變數,呼叫方法內部類需要通過外部類建立物件呼叫該方法,然後在方法中呼叫內部類。       

 

繼承

子類會自動擁有父類所有可繼承的屬性和方法,使用extends關鍵字繼承父類

子類重寫父類方法時,不能使用比父類中被重寫的方法更嚴格的訪問許可權

當子類重寫父類的方法時,子類不能直接訪問父類的方法,需要通過super.方法名()訪問父類中的方法

子類例項化時會預設呼叫父類的無參構造方法,也可以通過super(實參)指定呼叫父類中的其餘構造方法。當父類不存在無參構造方法時,當心子類自動呼叫父類構造方法。因此建立類時定義一個無參的構造方法會減少被繼承時的錯誤。

所有類都繼承Object。

final關鍵字——可用於修飾類、變數、和方法

  • final修飾的類不能被繼承
  • final修飾的方法不能被子類重寫
  • final修飾的變數是常量(成員變數和區域性變數),只能賦值一次
  • final修飾的成員變數不會對其初始化,因此在定義時需要初始化變數

 

抽象類和介面

abstract void 方法名();                                //定義抽象方法

當定義抽象方法時該類必須是抽象類,但定義抽象類可以不是抽象方法,抽象類不可以被例項化,因為抽線類可能含有抽線方法,抽線方法沒有實體,不可以被呼叫

介面是所有方法都是抽象的,定義介面使用的關鍵字是interface,需要區分方法和變數的定義,方法是抽象的,變數是實體的,介面預設為public abstract 而介面變數為 public static final全域性常量

一個普通類(非抽象或者介面型別)實現或者繼承抽象類或者介面時需要實現所有抽象方法

普通類,所有方法皆實體         抽象類,方法可以是實體或者抽象           介面,所有方法皆抽象

class普通類所有方法都有實體 abstract  class抽象類可以有抽象方法 interface介面沒有實體方法

因此 某類extends繼承無論是類還是interface介面,會繼承所有可使用方法,並且可通過super呼叫繼承的類或介面成員(不包括未實現的方法),但implement實現介面需要實現所有的方法,但抽象類因為可以擁有抽象方法,可以不實現介面的所有方法。抽象類和普通類的區別是抽象類可以有抽象方法,並且不能被例項化,即不能使用new一個物件,同樣,抽象類一樣可以繼承類或者介面

多型

允許使用一個父類型別的變數來引用子類型別的物件

interface Interface{
    void method();                       //介面抽象方法
}
class First implements Interface{
    public void method(){                //實體方法1
    ……
    }
}
class Second implements Interface{
    public void method(){                //實體方法2
    …………
    }
}
class Test{
    public static void main(String[] args){
    Interface fir=new First();           //例項化方法1物件,使用Interface型別變數fir引用
    Interface sed=new Second();          //例項化方法2物件,使用Interface型別變數sed引用
    methods(fir);                        //輸出方法1實體
    method(sec);                         //輸出方法2實體
    }

    public static void methods(Interface an){            
    an.method()                          //呼叫方法
    }

}

例項化不同型別的物件雖然都是同一個型別引用,但不能互相訪問

判斷一個物件是否為某個類的例項或者子類例項 物件 instanceof 類或介面

 

匿名內部類

方法呼叫時,引數為新建立的例項,並將該類寫入

Otherclass.method(new Innerclass( ){   類的程式碼塊 });因此不需要建立物件名,但重複呼叫時困難。

 


 

 

異常

圖表不全,只能表示大概的異常類,可參考API

主要以RuntimeException

Throwable常用方法
方法宣告 功能描述
String getMessage() 返回此throwable的詳細資訊字串
void printStackTrace() 將次throwable及其追蹤輸出到標準錯誤流
void printStackTrace(PrintStream s) 將此throwable及其追蹤輸出到指定的輸出流

try{ 需要執行的程式碼塊 }catch{ 異常捕獲,Exception類及其子類  }finally{   是否異常都要執行  }           

throws——方法中扔出的Exception類    throw——具體步驟扔出異常物件   

要麼在執行時try catch解決異常,要麼使用throws將異常丟擲給操作                                       

 

是專門用來存放類的,關鍵字package,匯入包為import

private——只能被該類的成員訪問,其他類無法直接訪問

defoult——預設,該類或者類的成員只能被本包訪問

protected——同一個包可以訪問,不同包中該類的子類訪問

public——不受限制


 

多執行緒

執行緒與程序的區別;程序,一個程式開始執行到結束執行叫程序為其分配記憶體等資源,執行緒是對於CPU而言,每次執行一個程序然後切換到另一個程序,由於太快所以感覺是同步進行。

執行緒的建立一個是繼承Thread類,然後覆寫run()方法。另一種是實現Runnable介面,重寫run()方法,然後建立一個Thread類並在構造方法Thread(Runnable Target)傳入一個Runnable介面引用。

Runnable介面,只有一個run()方法。可建立一個實現物件,然後開啟多個執行緒呼叫同一個例項物件實現多執行緒操作。

Thread.currentThread()方法得到當前的執行緒的例項物件,getName()可以過得執行緒的名稱,構造方法Thread(物件,名稱)為執行緒命名。

新建立的執行緒預設都是前臺執行緒,某個執行緒啟動之前(.start)呼叫了setDaemon(true)方法開啟後臺執行緒。

 

執行緒分為5個週期,除新建狀態和死亡狀態是單向外,其餘3個就緒狀態,阻塞狀態,執行狀態都可以互相轉換

1.新建狀態(New):建立一個執行緒物件後,該執行緒物件就處於新建狀態,此時它不能執行,和其他Java物件一樣,僅僅由Java虛擬機器為其分配了記憶體,沒有表現出任何執行緒的動態特性

2.就緒狀態(Runnable):當執行緒物件呼叫了start()方法後,該執行緒就進入就緒狀態(也稱可執行狀態)。處於就緒狀態的執行緒位於可執行池中,此時它只是具備了執行的條件,能否獲得CPU的使用權開始執行,還需要等待系統的排程。

3.執行狀態(Running):如果處於就緒狀態的執行緒獲得了CPU的使用權,開始執行run()方法中的執行緒執行體,則該執行緒處於執行狀態。當一個執行緒啟動後,它不可能一直處於執行狀態(除非它的執行緒執行體足夠短,瞬間就結束了),當使用系統分配的時間後,系統就會剝奪執行緒佔用的CPU資源,讓其他執行緒獲得執行的機會。需要注意的是,只有處於就緒狀態的執行緒才能轉換到執行狀態。

4.阻塞狀態(Blocked):一個正在執行的執行緒在某些特殊情況下,如執行耗時的輸入/輸出操作時,會放棄CPU的使用權,進入阻塞狀態。執行緒進入阻塞狀態後,就不能進入排隊佇列。只有當引起阻塞的原因被清除後,執行緒才可以轉入就緒狀態。

  • 當執行緒試圖獲得某個物件的同步鎖時,如果該鎖被其他執行緒所持有,則當前執行緒會進入阻塞狀態,如果想從阻塞狀態進入就緒狀態必須得獲得其他執行緒所持有的鎖
  • 當執行緒呼叫一個阻塞的IO方法時,該執行緒就會進入阻塞狀態,如果想進入就緒狀態就必須等這個阻塞的IO方法返回
  • 當執行緒呼叫了某個物件的wait()方法時,會使執行緒進入阻塞狀態,如果想進入就緒狀態就需要使用notify()方法喚醒該執行緒
  • 當執行緒呼叫了Thread的sleep(long millis)方法時,也會使執行緒進入阻塞狀態,在這種情況下,只需等到執行緒睡眠的時間到了以後,執行緒就會自動進入就緒狀態
  • 當在一個執行緒中呼叫了另一個執行緒的join()方法時,會使當前執行緒進入阻塞狀態,在這種情況下,需要等到新加入的執行緒執行結束後才會結束阻塞狀態,進入就緒狀態

5.死亡狀態(Terminated):執行緒的run()方法正常執行完畢或者賢臣丟擲一個未捕獲的異常/錯誤,執行緒就進入死亡狀態。一旦進入死亡狀態,執行緒就不再擁有執行的資格,也不能再轉換到其他狀態。

CPU排程分為分時模式,搶佔模式,Java預設使用的是搶佔模式。

static int MAX_PRIORITY 表示執行緒的最高優先順序

static int MIN_PRIORITY  表示執行緒的最低優先順序

static int NORM_PRIORITY biaoshi 表示執行緒的普通優先順序

執行緒有限級 物件. setPriority(int newPriority)方法設定  

執行緒休眠 物件.sleep(time),進入阻塞狀態,會丟擲異常,需要捕獲異常 休眠需要注意同步問題。

執行緒讓步,回到就緒狀態,只有與當前執行緒優先順序相同或者更高才能獲得執行yield()物件.yield()

執行緒插隊 join()物件.join()

synchronized(lock)鎖物件,當鎖為1時執行,執行期間將為0,其他執行緒遇到鎖為0時進入阻塞

可使用同步程式碼塊或者同步方法 synchronized(lock){程式碼塊} ;需要注意同步物件建立不能放在run()方法中   

synchronized 返回值型別 方法名 (){        }     注意死鎖

同步程式碼塊鎖為自己建立的物件,同步方法為當前呼叫的物件,靜態方法為該物件的類名.class獲得

void notify()——喚醒此同步鎖上等待的第一個呼叫wait()方法的執行緒

void notifyAll()——喚醒此同步鎖上呼叫wait()方法的所有執行緒

void wait()——使當前執行緒放棄同步鎖並進入等待,直到其他執行緒進入此同步鎖,並呼叫notify()方法,或notifyAll()方法喚醒該執行緒為止


 

API(Application Programming Interface)各種功能的類說明

String

構造方法String()建立一個空的字串       String(char[] value) 根據字元陣列建立物件       String(String value)根據字串內容建立物件

String類常用方法
int index(int ch) 返回指定字元在此字串中第一次出現處的索引
int lastIndexOf(int ch) 返回指定字串在此字串中最後一次出現處的索引
char charAt(int index) 返回字串中index位置上的字元,其中index的取值範圍是:0~(字串長度-1)
boolean endsWith(String suffix) 判斷此字串是否以指定的字串結尾
int length() 返回此字串的長度
boolean equals(Object anObject) 將此字串與指定的字串比較
boolean isEmpty() 當且僅當字串長度為0時返回true
boolean startsWith(String prefix) 判斷此字串是否以指定的字串開始
boolean contains(CharSequence cs) 判斷此字串是否包含指定的字元序列
String toLowerCase() 使用預設語言環境的規則將String中的所有字元都轉換為小寫
String toUpperCase() 使用預設語言環境的規則將String中的所有字元都轉換為大寫
String valueOf() 返回int引數的字串形式
char[] toCharArray() 將此字串轉換為一個字元陣列
String replace(CharSequence oldstr,CharSequemce newstr) 返回一個新的字串,它是通過用newstr替換此字串中出現的所有oldstr得到的
String[] split(String regex) 根據引數regex將原來的字串分割為若干個子字串
String substring(int beginIndex) 返回一個新字串,它包含字串中索引beginIndex後的所有字元
String substring(int beginIndex,int endIndex) 返回一個新字串,它包含字串從中索引beginIndex到索引endIndex之間的所有字元
String trim() 返回一個新字串,它去除了原字串首尾的空格

StringBuffer(長度可變的String)

StringBuffer類常用方法
方法說明 功能描述
StringBuffer append(char c) 新增引數到StringBuffer物件中
StringBuffer insert(int offset,String str) 將字串中的offset位置插入字串str
StringBuffer deleteCharAt(int index) 移除此序列指定位置的字元
StringBuffer delete(int start,int end) 刪除StringBuffer物件中指定範圍的字串序列
StringBuffer replace(int start,int end,String s) 在StringBuffer物件中替換指定的字元或字串序列
void setCharAt(int index,char ch) 修改指定位置index處的字元序列
String toString() 返回StringBuffer緩衝區中的字串
StringBuffer reverse() 將此字元序列用其反轉形式取代

System

System類的常用方法
方法說明 功能說明
static  void exit(int status) 該方法用於終止當前正在執行的Java虛擬機器,其中引數status表示狀態碼,若狀態碼非0,則表示異常終止
static long gc() 執行垃圾回收器,並對垃圾進行回收
static long currentTimeMillis() 返回以毫秒為單位的當前時間
static void arraycopy(object src,int srcPos,Object dest, int destPos,int length) 從src引用的指定源陣列複製到dest引用的陣列,複製從指定的位置開始,到目標陣列的指定位置結束
static Properties getProperties() 取得當前的系統屬性
static String getProperty(String key) 獲得指定鍵描述的系統屬性

Runtime類

Runtime run=Runtime.getRuntime()    物件方法提供availableProcessors freeMemory maxMemory exec等方法,以呼叫計算機資訊

Math類和Random類

Math的靜態方法

  • Math.abs()        //絕對值
  • Math.ceil()        //大於引數的最小整數
  • Math.floor()       //小於引數的最大整數
  • Math.round()    //四捨五入
  • Math.max()      //最大值
  • Math.min()      //最小值
  • Math.random()   // 隨機數,大於等於0小於1

Random

Random random=new Random()

物件方法用於返回指定型別的隨機數,構造方法傳入固定值則生成同樣的序列,不指定引數時每次生成不一樣的隨機數

  • boolean nextBoolean() ——隨機生成Boolean型別的隨機數
  • double nextDouble()——隨機生成double型別的隨機數
  • float nextFloat()——隨機生成float型別的隨機數
  • int nextInt()——隨機生成int型別的隨機數
  • int nextInt(int n)——隨機生成0~n之間int型別的隨機數
  • long nextLong()——隨機生成long型別的隨機數

包裝類

首先需要說明為什麼會有包裝類,因為基本型別的和物件型別執行在記憶體的不同位置,相對來說,基本型別的呼叫相對頻繁,同樣是存放在記憶體上,但訪問和建立的方式不一樣,呼叫的方式也不一樣。但物件擁有基本型別沒有的方法,因此有時需要將基本型別包裝起來使用。

基本型別的包裝類

byte Byte long Long char Character float Float
int Integer double Double short Short boolean Boolean

裝箱是將基本型別轉換為物件的形式,拆箱是將物件型別轉換為基本型別

類 引用變數=new 類(基本型別)

Integer型別的一些方法

Integer類的常用方法
toBinaryString(int i) 以二進位制無符號整數形式返回一個整數引數的字串
toHexString(int i) 以十六進位制無符號整數形式返回一個整數引數的字串
toOctalString(int i) 以八進位制無符號整數形式返回一個整數引數的字串
valueOf(int i) 返回一個表示指定的int值的Integer例項
valueOf(String s) 返回儲存指定的String值的Integer物件
parseInt(String s) (靜態方法)將字串引數作為有符號的十進位制整數進行解釋
intValue() 將Integer型別的值以int型別返回

其中,除Character類外都有靜態方法valueOf將字串轉換為包裝型別,都有靜態方法parseXXX將字串轉換為基本型別

Date

物件 只建議兩個構造方法,其餘都過時,一個無參的構造方法返回當前時間物件,另一個帶有引數的構造方法建立指定時間的物件Date date = new Date()或Date data = new Date(long date)

Calendar

Calendar為一個抽象類,不能被例項化,通過靜態方法返回一個Calendar物件,準確說是返回一個繼承該類的物件,引用了多型的形式

Calendar的常用方法
方法宣告 功能描述
int get(int field) 返回指定日曆欄位的值
void add(int field,int amount) 根據日曆規則,為指定的日曆欄位增加或減去指定的時間量
void set(int field,int value) 為指定日曆欄位設定指定值
void set(int year,int month,int date) 設定Calendar物件的年、月、日三個欄位的值
void set(int year,int month,int date,int hourOfDay,int minute,int second) 設定Calendar物件的年、月、日、時、分、秒六個欄位的值

Calendar.YEAR     Calendar.MONTH    Calendar.SECOND    Calendar.DATE     Calendar.Hour    Calendar.MINUTE

Calendar.setLenient模式 月份預設為0開始,因此得到月份需要新增1


 

集合類

單列集合Collection

  • List:元素有序、元素可重複(ArrayList/LinkedList)
  • Set:元素無序、不可重複(HashSet/TreeSet)

雙列集合Map

  • HashMap
  • TreeMap

Collection

Collection介面

方法宣告 功能描述 boolean add(Object o) 向集合中新增一個元素 boolean addAll(Collection c) 將指定Collection中的所有元素新增到該集合中 void clear() 刪除該集合中的所有元素 boolean removbe(Object o) 刪除該集合中指定的元素 boolean removeAll(Colection c) 刪除指定集合中的所有元素 boolean isEmpty() 判斷該集合是否為空 boolean contains(Object o) 判斷該集合中是否包含某個元素 boolean containsAll(Collection c) 判斷該集合中是否包含指定集合中的所有元素 Iterator iterator() 返回在集合的元素上進行迭代的迭代器,用於便利該集合所有元素

int size()

獲得該集合元素個數

list介面,元素允許重複,有序,存入和取出順序一致

List集合常用方法
方法宣告 功能描述
void add(int index,Object element) 將元素element插入在List集合的index處
boolean addAll(int index,Collection c) 將集合c所包含的所有元素插入到List集合的index處
Object get(int index) 返回集合索引index處的元素
Object remove(int index) 刪除index索引處的元素
Object set(int index,Object element) 將索引index處元素替換成element物件,並將替換後的元素返回
int indexOf(Object o) 返回物件o在List集合中出現的位置索引
int lastIndexOf(Object o) 返回物件o在List集合中最後出現的位置索引
List subList(int fromIndex,int toIndex) 返回從索引fromIndex(包括)到toIndex(不包括)處所有元素集合組成的子集合

ArrayList為List的一個實現類,可理解為長度可變的陣列,查詢方便,但增刪不方便

LinkedList是List的另一個實現類,雙向連結串列,增減方便

LinkedList方法
方法宣告 功能描述
void add(int index,E element) 在此列表中指定的位置插入指定的元素
void addFirst(Object o) 將指定元素插入此列表的開頭
void addLast(Object o) 將指定元素新增到此列表的結尾
Object getFirst() 返回此列表的第一個元素
Object getLast() 返回此列表的最後一個元素
Object removeFirst() 移除並返回此列表的第一個元素
Object removeLast() 移除並返回此列表的最後一個元素

Iterator介面用於遍歷列表元素,通過列表元素的 iterator()方法返回一個Iterator的引用物件,呼叫該物件的hasNext()方法判斷是否具有下一個元素,如果存在則呼叫next()方法輸出,修改元素需要使用迭代器自身的方法

ListInerator介面為Inerator的子類 listname.listIterator(起始位置)返回一個ListIterator物件

  • void add(Object o)               將指定的元素插入列表(可選操作)
  • boolean hasPrevious()        如果以逆向遍歷列表,列表迭代器有多個元素,則返回true
  • Object previous()                返回列表中的前一個元素
  • void remove()                     從列表中移除由next或previous返回的最後一個元素(可選操作)

同樣for語句可遍歷列表,但不能修改其中的值

Set

  • HashSet根據物件的雜湊值進行儲存位置,良好的存取和查詢效能,需要重寫hashCode方法和equals方法
  • TreeSet二叉樹排序    需要重寫compareTo方法確定排序方法

Vector執行緒安全

 

Map介面

Map集合常用方法表
方法宣告 功能描述
void put(Object key,Object value) 將指定的值與此對映中的指定鍵關聯(可選操作)
Object get(Object key) 返回指定鍵所對映的值,如果此對映不包含該鍵的對映關係,則返回null
boolean containsKey(Object Key) 如果此對映包含指定鍵的對映關係,則返回true
boolean containsValue(Object value) 如果此對映將一個或多個鍵對映到指定值,則返回true
Set keySet() 返回此對映中包含的鍵的Set檢視
Collection<V> values() 返回此對映中包含的值的Collection檢視
Set<Map.Entry<K,V>> entrySet() 返回此對映中包含的對映關係的Set檢視

HashMap,鍵值關係的列表,鍵相同時,以後值覆蓋前值達到元素的不重複,根據雜湊值儲存位置

LinkedHashMap對應於LinkedList,屬於雙向列表

TreeMap二叉樹原理

Properties集合   執行緒安全 setProperty getProperty

 

泛型

對集合中儲存或者取出的元素進行限制,避免出現型別不匹配的錯誤

 

Collections類常用方法(注意是多了一個s)
方法宣告 功能描述

static <T> boolean addAll(Collection <? super T>c,T...elements)

將所有指定元素新增到指定的collection中
statci void reverse(List list) 反轉指定List集合中元素的順序
static void shuffle(List list) 對List集合中的元素進行隨機排序(模擬玩撲克中的"洗牌")
static void short(List list) 根據元素的自然順序對List集合中的元素進行排序
static void swap(List list,int i,int j) 將指定List集合中i處元素和j處元素進行交換
static int binarySearch(List list,Object key) 使用二分法搜尋指定物件在List集合中的索引,查詢的List集合中的元素就必須是有序的
static Object max(Collection col) 根據元素的順序,返回給定集合中的最大的元素
static Object min(Collection col) 根據元素的順序,返回給定集合中的最小的元素
static booleanreplaceAll(List list,Object oldVal,Object newVal) 用一個新的newVal元素替換List集合中所有的舊值oldVal

Arrays類

static void sort()                                      排序

static int binarySearch(Object[] a,Object key)      查詢指定元素的索引值,只能對排序的陣列進行查詢

static int[] copyOfRange(int[] original,int from,int to)    用於將包括開始的元素,不包括結束的元素複製到新的陣列中

static void fill(Object[] a,Object val)                 用一個元素替換所有元素

static String toString(int[] arr)                           把陣列轉換為字串

 


 IO輸入輸出

位元組流        兩個抽象子類----(二進位制)InputStream(位元組輸入流)    OutPutStream(位元組輸出流)

字元流        Reader(字元輸出流)    Write字元輸出流

字元流常用方法
方法宣告 功能描述
InputStream
int read() 從輸入流讀取一個8位的位元組,把它轉換為0~255之間的整數,並返回這一整數
int read(byte[]) 從輸入流讀取若干位元組,把他們儲存到引數b指定的位元組陣列中,並返回的整數表示讀取位元組數
int read(byte[],int off,int len) 從輸入流讀取若干位元組,把它們儲存到引數b指定的位元組陣列中,off指定位元組陣列開始儲存資料的下標,len表示讀取的位元組
void close() 關閉此輸入流並釋放與該流關聯的所有系統資源
OutputStream
void write(int b) 向輸出流寫入一個位元組
void write(byte[] b) 把引數b指定的位元組陣列的所有位元組寫到輸出流
void write(byte[] b,int off,int len) 將指定byte陣列從偏移量off開始的len個位元組寫入輸出流
void flush() 重新整理此輸出流並強制寫出所有緩衝的輸出位元組
void close() 關閉此輸出流並釋放與此流相關的所有系統資源

檔案操作FileInputStream("檔名")/FileOutputStream("檔名",boolean)

位元組緩衝流BufferedInputStream(InputStream in[,size])/BufferedOutputStream


字元讀取FileRead/FileWrite

字元緩衝流BufferedReader/BufferedWrite  重要方法BufferedReader的重要方法readLine(),newLine()

LineNumberReader它是BufferedReader的子類.

InputStreamReader OutputStreamWriter 位元組輸入轉字元  字元輸出轉位元組

ObjectInputStream和ObjectOutputStream物件輸入或輸出流,需要實現Serializable介面 儲存物件引數

DateInputStream和DataOutputStream儲存基本型別的類,引數為BufferedOutputStream更方便

PrintStream物件,列印基本型別或者是物件型別等,呼叫其print方法即可輸出

System類三個常量in.out.err標準輸入輸出流

void setIn(InputStream in) 對標準輸入流重定向

void setOut(PrintStream out) 對標準輸出流重定向

void setErr(PrintStream out) 對標準錯誤輸出流重定向

 

 

 

 

 

 

 

GUI圖形使用者介面

  • AWT
  •         Component非選單類
  •                 Container容器類
  •                          Window    不依賴其他容器獨立存在的容器
  •                                Frame    具有標題欄的視窗
  •                                Dialog    對話方塊
  •                                        FileDialog
  •                          Panel    不能獨立存在
  •                 Button    
  •                 label
  •                 CheckBox
  •                 TextComponent
  •                         TextArea
  •                         TextField
  •         MenuComponent
  •                 MenuBar
  •                 MenuItem
  •                         Menu

事件監聽器

如:WindowListener介面         1.windowActivted(啟用)        2.windowClosed(關閉)      3.windowDeactived(失活)    4.windowDeiconified(取消圖示化)       5.windowIconified(圖示化)    6.windoiwOpened(開啟)    7.windowClosing(關閉)   

引數均為WindowEvent型別

事件介面卡

windowAdapter類介面卡,實現了介面的方法,但沒有具體程式碼塊,因此呼叫時需要重寫特定的方法

事件分類

  • WindowEvent     MouseEvent     KeyEvent     ActionEvent

WindowEvnet 需要實現的方法                  1.windowActivted(啟用)        2.windowClosed(關閉)      3.windowDeactived(失活)    4.windowDeiconified(取消圖示化)       5.windowIconified(圖示化)    6.windoiwOpened(開啟)    7.windowClosing(關閉)   

 MouseEvent            1.mousePressed(滑鼠按下)           2.mouseReleased(滑鼠鬆開事件)      3.mouseEnter(滑鼠進入按鈕區域)

4.mouseClick(滑鼠點選)         5.mouseExited(滑鼠移出按鈕區域) MouseEvent類下的getButton獲得具體滑鼠的操作, 常量BUTTON1      BUTTON2       BUTTON3代表值

Key        靜態方法static  getKeyText   返回值

 

佈局管理器  FlowLayout(流式佈局管理器)    BorderLayoput(邊界佈局管理器)    GirdLayout(網格佈局管理器)

GirdBagLayout(網格包佈局管理器)    CaedLayout(卡片管理器)

由左到右佈局FlowLayout佈局管理器的構造方法   

  • FlowLayout()——元件預設居中對齊,水平、垂直間距預設為5個單位
  • FlowLayout(int align)——指定元件相對於容器的對齊方式,水平、垂直間距預設為5個單位 FlowLayout.LETF(居左)  FlowLayout.CENTER(水平居中)    FlowLayout.RIGHT(居右對齊)
  • FlowLayout(int align,int hgap,int vgap)——指定元件的對齊方式和水平、垂直間距

上下左右中五種佈置方式BorderLayout邊界佈局管理器

新增元件方法add(Componept comp,Object constraints)第一個位元件,第二位常量 EAST SOUTH WEST NORTH CENTER,每一個區域只能放置一個元件

格子的形式設定佈局GridLayout網格佈局管理器構造方法

  • GridLayout()——預設只有一行,每個元件佔一列
  • GridLayout(int rows,int cols)——指定容器的行數和列數
  • GridLayout(int rows,int cols,int hgap,int vgap)——指定容器的行數和列數以及元件之間的水平、垂直間距

最靈活的各個包大小不一樣的佈局管理器GridBagLayout

  • 建立容器與佈局檔案Component GirdBagLayoput,容器關聯佈局setLayout
  • 建立約束物件GridBagLayout,並設定
  • 佈局檔案setConstraints關聯元件與約束物件
  • 容器新增元件

通俗講就是設定容器,為容器新增網格包佈局管理器,建立一個約束物件,設定約束物件的值,然後使用佈局檔案物件setConstraints方法將需要新增的元件綁上約束物件,從而設定其屬性,最後在容器中新增該元件

GridBagConstraints常用屬性
屬性 作用
gridx和gridy 設定元件的左上角所在網格的橫向和縱向索引。如果將gridx和gridy的值設定為GridBagConstraints.RELATIVE(預設值),表示當前元件緊跟在上一個元件後面
gridwidth和gridheight 設定元件橫向、縱向跨越幾個網格,兩個屬性的預設值都是1。如果把兩個屬性的值設為GridBagConstraints.REMAINER,表示當前元件在其行或其列上為最後一個元件,如果把這兩個屬性的值設為GridBagConstraints.RELATIVE,表示當前元件在其行或列上為倒數第二個元件
fill

如果當前元件的顯示區域大於元件需要的大小,設定是否以及如何改變元件大小,該屬性接受以下幾個屬性值:

  • NONE:預設,不改變元件大小
  • HORIZONTAL:使元件水平方向足夠長以填充顯示區域,但高度不變
  • VERTICAL:使元件垂直方向足夠高以填充顯示區域,但長度不變
  • BOTH:使元件足夠大,以填充整個顯示區域
weightx和weighty 設定元件佔領容器中多餘的水平方向和垂直方向空白的比例(也稱為權重)。假設容器的水平方向放置三個元件,其weightx分別為1、2、3,當容器寬度增加60個畫素時,這三個容器分別增加10、20和30的畫素。這兩個屬性的預設值是0,即不佔領多餘的空間

卡片佈局CardLayout,同一窗口布置多個介面

CardLayput常用方法
方法宣告 功能描述
void first(Container Parent) 顯示parent容器的第一張卡片
void last(Container parent) 顯示parent容器的最後一張卡片
void previous(Container parent) 顯示parent容器的前一張卡片
void next(Container parent) 顯示parent容器的下一張卡片
void show(Container parent,Stringname) 顯示parent容器中名稱為name的元件,如果不存在,則不會發生任何操作

通過cardLayout物件的next或者previous等方法實現元件之間的切換

不使用佈局管理器setLayout(nul)

必須呼叫setLocation方法(定位)/setSize方法(設定大小)方法/setBounds方法(位置x,y,大小x,y)。

 

AWT繪圖