Java 期末復習提綱


Java 開發環境

Java 的特點

面向對象、跨平台、能把中小型程序寫成大型程序

開發 Java 的流程

  1. 設計類
  2. 寫代碼
  3. 重構

Java 程序規范

  • Javadoc 風格注釋
  • 接口以 able 結尾
  • 接口、類使用 Pascal 風格命名
  • 成員方法,成員變量使用 camel 風格命名
  • 高內聚,低耦合

Java 基本語法

數據類型

基本類型 字節個數 默認初始值 取值范圍
byte 1 0 -128~127
short 2 0 -32769~32767
int 4 0 -2,147,483,648(-2^31)~2,147,485,647(2^31 - 1)
long 8 0L -9,223,372,036,854,775,808(-2^63)~9,223,372,036,854,775,807(2^63 -1)
float 4 0.0f 符合IEEE 754標准的浮點數
double 8 0.0d 符合IEEE 754標准的浮點數
boolean 1位 false true/false
char 2 必須手動初始化 '\u0000'~'\uffff'

8進制與16進制表示

前綴0表示8進制,而前綴0x代表16進制。例如:

int octal = 0144;
int hexa =  0x64;

轉義字符

符號 字符含義
\n 換行 (0x0a)
\r 回車 (0x0d)
\f 換頁符(0x0c)
\b 退格 (0x08)
\t 制表符
" 雙引號
' 單引號
\\ 反斜杠
\ddd 八進制字符 (ddd)
\uxxxx 16進制Unicode字符 (xxxx)

基本類型與引用類型的區別

  1. 從概念方面來說
    基本類型:變量名指向具體的數值
    引用類型:變量名指向存數據對象的內存地址
  2. 從內存構建方面來說
    基本類型:基本數據類型在被創建時,在上給其划分一塊內存,將數值直接存儲在上;
    引用類型:引用數據類型在被創建時,首先要在上給其引用(句柄)分配一塊內存,而對象的具體信息都存儲在內存上,然后由棧上面的引用指向堆中對象的地址。
  3. 從使用方面來說
    基本類型:使用時需要賦具體值,判斷時使用“==”號
    引用類型:使用時可以賦null,判斷時使用equals方法

強制類型轉換

(target_type)variable;

關鍵字

關鍵字 作用
break 用來改變程序執行流程,立刻從當前語句的下一句開始執行從。如果后面跟有一個標簽,則從標簽對應的地方開始執行
case 用來定義一組分支選擇,如果某個值和switch中給出的值一樣,就會從該分支開始執行
catch 用來聲明當try語句塊中發生運行時錯誤或非運行時異常時運行的一個塊
continue 用來打斷當前循環過程,從當前循環的最后重新開始執行,如果后面跟有一個標簽,則從標簽對應的地方開始執行
do 用來聲明一個循環,這個循環的結束條件可以通過while關鍵字設置
else 如果if語句的條件不滿足就會執行該語句
final final 修飾的類不能被繼承final 修飾的方法不能被子類重寫final 修飾的變量(成員變量或局部變量)即成為常量,只能賦值一次。final 修飾的成員變量必須在聲明的同時賦值,如果在聲明的時候沒有賦值,那么只有 一次賦值的機會,而且只能在構造方法中顯式賦值,然后才能使用。final 修飾的局部變量可以只聲明不賦值,然后再進行一次性的賦值。
finally 用來執行一段代碼不管在前面定義的try語句中是否有異常或運行時錯誤發生
for 用來聲明一個循環。程序員可以指定要循環的語句,推出條件和初始化變量
if 用來生成一個條件測試,如果條件為真,就執行if下的語句
implements 在類的聲明中是可選的,用來指明當前類實現的接口
import 在源文件的開始部分指明后面將要引用的一個類或整個包,這樣就不必在使用的時候加上包的名字
instanceof 用來測試第一個參數的運行時類型是否和第二個參數兼容
interface 用來定義一系列的方法和常量。它可以被類實現,通過 implements 關鍵字
private 用在方法或變量的聲中。它表示這個方法或變量只能被這個類的其它元素所訪問
protected 在方法和變量的聲明中使用,它表示這個方法或變量只能被同一個類中的,子類中的或者同一個包中的類中的元素所訪問
public 在方法和變量的聲明中使用,它表示這個方法或變量能夠被其它類中的元素訪問
return 用來結束一個方法的執行。它后面可以跟一個方法聲明中要求的值
static 用來定義一個變量為類變量。類只維護一個類變量的拷貝,不管該類當前有多少個實例。 static 同樣能夠用來定義一個方法為類方法。類方法通過類名調用而不是特定的實例,並且只能操作類變量
this 用來代表它出現的類的一個實例。this可以用來訪問類變量和類方法
throw 允許用戶拋出一個exception對象或者任何實現throwable的對象
throws 用在方法的聲明中來說明哪些異常這個方法是不處理的,而是提交到程序的更高一層
try 用來定義一個可能拋出異常語句塊。如果一個異常被拋出,一個可選的catch語句塊會處理try語句塊中拋出的異常。同時,一個finally語句塊會被執行,無論一個異常是否被拋出
void 用在Java語言的方法聲明中說明這個方法沒有任何返回值。"void"也可以用來表示一句沒有任何功能的語句
while 用來定義一段反復執行的循環語句。循環的退出條件是while語句的一部分

運算符優先級表

優先級 運算符 結合性
1 () [] . 從左到右
2 ! +(正) -(負) ~ ++ -- 從右向左
3 * / % 從左向右
4 +(加) -(減) 從左向右
5 << >> >>> 從左向右
6 < <= > >= instanceof 從左向右
7 == != 從左向右
8 &(按位與) 從左向右
9 ^ 從左向右
10 | 從左向右
11 && 從左向右
12 || 從左向右
13 ?: 從右向左
14 = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 從右向左

說明:

  1. 該表中優先級按照從高到低的順序書寫,也就是優先級為1的優先級最高,優先級14的優先級最低。
  2. 結合性是指運算符結合的順序,通常都是從左到右。從右向左的運算符最典型的就是負號,例如3+-4,則意義為3加-4,符號首先和運算符右側的內容結合。   
  3. instanceof作用是判斷對象是否為某個類或接口類型

短路原則

  • 對於a && b,只有當a和b同時為true時,整個表達式才為true,在java中,首先運算表達式a,如果a為true,則繼續運算表達式b,如果表達式a為false,那么整個表達式也肯定為false,所以表達式b不會被運算。

  • 對於a || b,至少有一個為true,則表達式為true,如果a為false,整個表達式的值等於表達式b的值,因此繼續運算表達式b,如果a為true,整個表達式的值為true,則沒有必要再運算表達式b。

數組和字符串

聲明數組變量

double[] array;   // 首選的方法

//或

double array[];  // 效果相同,但不是首選方法

數組變量的聲明,和創建數組可以用一條語句完成,如下所示:

    // 數組大小
    int size = 10;
    // 定義數組
    double[] myList = new double[size];
    
    //或者
    
    double[] myList = {1.9, 2.9, 3.4, 3.5};

常用屬性

length , 獲取數組的長度

常用數組方法(在 Arrays 類中 )

方法 說明
public static int binarySearch(Object[] a, Object key) 用二分查找算法在給定數組中搜索給定值的對象(Byte,Int,double等)。數組在調用前必須排序好的。如果查找值包含在數組中,則返回搜索鍵的索引;否則返回 (-(插入點) - 1)。
public static boolean equals(long[] a, long[] a2) 如果兩個指定的 long 型數組彼此相等,則返回 true。如果兩個數組包含相同數量的元素,並且兩個數組中的所有相應元素對都是相等的,則認為這兩個數組是相等的。換句話說,如果兩個數組以相同順序包含相同的元素,則兩個數組是相等的。同樣的方法適用於所有的其他基本數據類型(Byteshortint等)。
public static void fill(int[] a, int val) 將指定的 int 值分配給指定 int 型數組指定范圍中的每個元素。同樣的方法適用於所有的其他基本數據類型(byteshortint等)。
public static void sort(Object[] a) 對指定對象數組根據其元素的自然順序進行升序排列。同樣的方法適用於所有的其他基本數據類型(byteshortint等)。

遍歷數組

for (double item:arrays)
{
    //do something here
}

String類的常用方法

方法 作用
int length() 返回字符串對象包含的字符數
String format() 創建格式化字符串
int charAt(int index) 返回指定索引處的 char 值
int compareTo(String anotherString) 按字典順序比較兩個字符串
int compareToIgnoreCase(String str) 按字典順序比較兩個字符串,不考慮大小寫
boolean endsWith(String suffix) 測試此字符串是否以指定的后綴結束
boolean equalsIgnoreCase(String anotherString) 將此 String 與另一個 String 比較,不考慮大小寫
boolean equals(String anotherString) 將此 String 與另一個 String 比較
String replace(char oldChar, char newChar) 返回一個新的字符串,它是通過用 newChar 替換此字符串中出現的所有 oldChar 得到的
boolean startsWith(String prefix) 測試此字符串是否以指定的前綴開始
String toLowerCase() 使用默認語言環境的規則將此 String 中的所有字符都轉換為小寫
String toUpperCase() 使用默認語言環境的規則將此 String 中的所有字符都轉換為大寫
String trim() 返回字符串的副本,忽略前導空白和尾部空白

String 類的 == 判斷的是變量是否引用的同一個實例,而不是他們所引用的實例的內容是否相等

Java 面向對象基礎

基本概念:

  • 成員變量
  • 成員方法
  • 創建對象的關鍵字 new
  • 構造函數的定義:無返回值,與類同名
  • this 表示當前實例,super表示父類
    • 當使用 super(someargs) 來繼承父類的構造函數的時候,這句話必須放在最前面
    • this(someargs)表示調用此類中與參數相符的構造函數重載,也必須放在構造函數的最前面
    • 上面兩個語句不能出現在同一個構造函數中
    • 本質上來說,this 是一個指向當前對象的指針,super 是一個關鍵字
  • static 關鍵字修飾的成員變量和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。
  • final關鍵字有一下幾種含義:
    • 一個編譯時恆定不變的常量
    • 一個在運行時初始化,而你不希望它被改變的變量
    • 參數列表中的參數以聲明的方式聲指明為final,這意味着你無法改變參數所指向的對象
    • 把方法鎖定,以防止任何繼承它的類修改它的含義

類的繼承

// A.java
public class A {
    private int i;
    protected int j;
 
    public void func() {
 
    }
}
 
// B.java
public class B extends A {
}
  • 類只能有一個爸爸(父類),但可以實現多個接口
  • 子類可以繼承父類所有的方法和屬性,但是無法使用 private(私有) 的方法和屬性
  • 通過使用instanceof 操作符,能夠確定對象是否是一個類或者其子類的實例
  • 繼承基本類和抽象類用extends關鍵字,實現接口類的繼承用implements關鍵字。

重寫與重載

重寫

重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫!返回值和形參都不能改變。即外殼不變,核心重寫!

方法的重寫規則

  • 參數列表必須完全與被重寫方法的相同;
  • 返回類型必須完全與被重寫方法的返回類型相同;
  • 訪問權限不能比父類中被重寫的方法的訪問權限更高。例如:如果父類的一個方法被聲明為public,那么在子類中重寫該方法就不能聲明為protected
  • 父類的成員方法只能被它的子類重寫。
  • 聲明為final的方法不能被重寫。
  • 聲明為static的方法不能被重寫,但是能夠被再次聲明。
  • 子類和父類在同一個包中,那么子類可以重寫父類所有方法,除了聲明為privatefinal的方法。
  • 子類和父類不在同一個包中,那么子類只能夠重寫父類的聲明為publicprotected的非final方法。
  • 重寫的方法能夠拋出任何非強制異常,無論被重寫的方法是否拋出異常。但是,重寫的方法不能拋出新的強制性異常,或者比被重寫方法聲明的更廣泛的強制性異常,反之則可以。
  • 構造方法不能被重寫。
  • 如果不能繼承一個方法,則不能重寫這個方法。

重載

重載(overloading) 是在一個類里面,方法名字相同,而參數不同。返回類型呢?可以相同也可以不同。

重載規則

  • 被重載的方法必須改變參數列表;
  • 被重載的方法可以改變返回類型;
  • 被重載的方法可以改變訪問修飾符;
  • 被重載的方法可以聲明新的或更廣的檢查異常;
  • 方法能夠在同一個類中或者在一個子類中被重載。

重寫與重載的區別

區別點 重載方法 重寫方法
參數列表 必須修改 一定不能修改
返回類型 可以修改 一定不能修改
異常 可以修改 可以減少或刪除,一定不能拋出新的或者更廣的異常
訪問 可以修改 一定不能做更嚴格的限制(可以降低限制)

多態性

多態是同一個行為具有多個不同表現形式或形態的能力。
多態存在的三個必要條件:

  • 繼承
  • 重寫
  • 父類引用指向子類對象

Java 包(package)

包的作用

  1. 把功能相似或相關的類或接口組織在同一個包中,方便類的查找和使用。
  2. 如同文件夾一樣,包也采用了樹形目錄的存儲方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時調用兩個不同包中相同類名的類時,應該加上包名加以區別。因此,包可以避免名字沖突。
  3. 包也限定了訪問權限,擁有包訪問權限的類才能訪問某個包中的類。

默認導入的包是java.lang

抽象方法:

public abstract <returnType> <methodName>(...);

僅有方法頭,而沒有方法體和操作實現,具體實現由當前類的不同子類在它們各自的類聲明中完成,抽象類可以包含抽象方法
注意

  • 一個抽象類的子類如果不是抽象類,則它必須為父類中的所有抽象方法書寫方法體,即重寫父類中的所有抽象方法
  • 有抽象類才能具有抽象方法,即如果一個類中含有抽象方法,則必須將這個類聲明為抽象類
  • 除了抽象方法,抽象類中還可以包括非抽象方法

抽象類

abstract class Number 
{
    //. . .
}
  • 沒有具體實例對象的類,不能使用new方法進行實例化
  • 類前需加修飾符abstract
  • 可包含常規類能夠包含的任何東西,例如構造方法,非抽象方法
  • 也可包含抽象方法,這種方法只有方法的聲明,而沒有方法的實現

集合類

Set

  • 集合中的對象不按特定的方式排序,並且沒有重復對象
  • 實現:
    • HashSet: HashSet類按照哈希算法來存取集合中的對象,存取速度比較快
    • TreeSet :TreeSet類實現了SortedSet接口,能夠對集合中的對象進行排序

List

  • 元素以線性方式存儲,集合中可以存放重復對象。
  • 實現:
    • ArrayList : 代表長度可以改變的數組。可以對元素進行隨機的訪問,向ArrayList()中插入與刪除元素的速度慢
    • LinkedList : 在實現中采用鏈表數據結構。插入和刪除速度快,訪問速度慢。

Map

一種把鍵對象和值對象映射的集合,它的每一個元素都包含一對鍵對象和值對象
常用操作:

Object put(Object key, Object value)    //向集合中加入元素   
Object remove(Object key)               //刪除與KEY相關的元素   
void putAll(Map t)                      //將來自特定映像的所有元素添加給該映像   
void clear()                            //從映像中刪除所有映射   
Object get(Object key)                  //獲得與關鍵字key相關的值
put(Object key, Object value)           //添加一個“值”(想要得東西)和與“值”相關聯的“鍵”(key)(使用它來查找)

數組、List相互轉換

//List to array
Employee[] employees = employeeList.toArray(new Employee[employeeList.size()]);

//Array to list
employeeList = Arrays.asList(employees);

常用集合操作

//遍歷
employeeList
    .stream()
    .forEach(employee -> 
    {
        //Do something here
    }));
    
//去重
employeeList = employeeList
        .stream()
        .distinct()  //使用 equals()方法 
        .collect(Collectors.toList());
        
//字符串列表轉小寫並去重
list = list
        .stream()
        .map(s->s.toLowerCase()+"或者你也可以在這里加上自己喜歡的話")
        .distinct()
        .collect(Collectors.toList()); //list 必須是 List 接口類型變量
        
//或者我們還可以排個序
list.sort((s1,s2)->
        {
            //或者在這里寫你自己的比較方法
            //返回類型是 int
            return s1.compareTo(s2);
        });

//最后我們還可以刪庫跑路
list.clear();

IO 操作

常用的讀寫文件的操作

//從控制台讀入
//先背一波類名
BufferedReader brConsole = new BufferedReader(new InputStreamReader(System.in));
        try
        {
        //讀取文件
            BufferedWriter bwFile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("worldcup.txt",true)));

            String line = null;
            while((line=brConsole.readLine())!=null)
            {
                if ("Done".equalsIgnoreCase(line))
                {
                    break;
                }
                else
                {
                    bwFile.write(line);
                    bwFile.newLine();
                }
            }
            bwFile.flush();
            
//好煩啊,其他的都差不多了,不寫了

自定義異常

聲明一個異常

class MyException extends Exception
{
}

捕獲異常

try
{
   // 程序代碼
}
catch(ExceptionName e1)
{
   //Catch 塊
}

捕獲多重異常

 try
 {
    // 程序代碼
 }
 catch(異常類型1 異常的變量名1)
 {
    // 程序代碼
 }
 catch(異常類型2 異常的變量名2)
 {
    // 程序代碼
 }
 catch(異常類型3 異常的變量名3)
 {
    // 程序代碼
 }
 
 //或者
 
  try
 {
    // 程序代碼
 }
 catch(異常類型1 | 異常類型2 | 異常類型3 異常的變量名)
 {
    // 程序代碼
 }

參考:
Java 教程 | 菜鳥教程:http://www.runoob.com/java/java-tutorial.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM