1. 程式人生 > 實用技巧 >記錄一個學渣從新開始學習java的筆記(不定時更新)

記錄一個學渣從新開始學習java的筆記(不定時更新)

記錄一下自己複習java的筆記

由於自己有一定的學習基礎,所以筆記不會太過詳細,主要記錄自己容易忘記的知識點以及難點,這裡用的編輯器是IDEA。

面向物件的三大特徵

  1. 封裝:是面向物件程式語言對客觀事物的模擬,客觀事物裡成員變數都是隱藏在物件內部的,外界是無法直接操作的。

封裝原則:將類的某些資訊隱藏在類的內部,不允許外部程式直接訪問,而是通過該類提供的方法來實現對隱藏資訊的操作和訪問成員變數private,提供對應的getXxx()/setXxx()方法。

好處:通過方法來控制成員變數的操作,提高了程式碼的安全性,把程式碼用方法進行封裝,提高了程式碼的複用性。

  1. 繼承:是面向物件三大特徵之一,可以使得子類具有父類的屬性和方法,還可以在子類中重新定義,追加屬性和方法。(父類也被稱為基類,超類。子類也被稱為派生類)

    public class 子類名 extends 父類名{}

    好處:提高了程式碼的複用性

    提高了程式碼的維護性

    弊端:繼承讓類與類之間產生了關係,類的耦合性增強了,當父類發生變化時子類實現也不得不跟著變化,削弱了子類的獨立性。

    注意事項:java中類只支援單繼承,不支援多繼承

    java中類支援多層繼承

    注:

    1. 變數名相同時,訪問的是子類變數,可用關鍵字 super.變數名 訪問父類中的名字相同的變數

    2. 子類中所有的構造方法預設都會訪問父類中無參的構造方法。(因為子類會繼承父類中的資料,可能還會使用父類的資料,所以子類初始化之前,一定要完成父類的初始化,另外每一個子類構造方法的第一條語句預設都是:super())

註釋

書寫註釋是一個非常好的習慣,註釋是不會被執行的,java中註釋有三種。

  1. 單行註釋 即註釋一行,例:

    //單行註釋
    System.out.println("Hello World");//單行註釋
  2. 多行註釋

    /*
    多行
    註釋
    */
  3. 文件註釋

/*
*瞭解即可
* */

識別符號

關鍵字

private

private是一個許可權修飾符,可以修飾成員(成員變數和成員方法)

作用是保護成員不被別的類使用,被private修飾的成員只在本類中才能訪問

對於private修飾的成員變數,如果需要被其他類使用需提供相應的操作如:

  1. 提供“get變數名()”方法,用於獲取成員變數的值,方法用public修飾。

  2. 提供“set變數名(引數)”方法,用於設定成員變數的值,方法用public修飾。

this

this修飾的變數用於指代成員變數,方法的形參如果與成員變數同名,不帶this修飾的變數指的是形參,而不是成員變數。

方法的形參沒有與成員變數同名,可以不用this修飾。

注:方法被哪個物件呼叫,this就代表哪個物件。

修飾符

狀態修飾符

  1. final (最終態)可以修飾成員變數,成員方法,類

特點:

修飾方法:表明該方法是最終方法,不能被重寫

修飾變數:表明該變數是常量,不能再次被賦值

修飾類:表明該類是最終類,不能被繼承

final修飾區域性變數

(1)邊量是基本型別:final修飾指的是基本型別的資料值不能發生改變

(2)變數是引用型別:final修飾指的是引用型別的地址值不能發生改變,但是地址裡面的內容是可以發生改變的

  1. static(靜態)可以修飾成員方法,成員變數

  2. 特點

    被類的所有物件共享

    可以通過類名呼叫,也可以通過物件名呼叫,推薦使用類名呼叫

    靜態成員方法只能訪問靜態成員

資料型別

浮點數(double,float)不能表示精確的數值,不能用於比較和表示貨幣等,最好完全避免浮點數進行比較;

轉義字元:

強制轉換,自動轉換

注意溢位,精度問題,不能把物件型別轉換為不相干的型別。

變數

資料型別 變數名[=範圍];

[]裡面的內容可以不寫,則數值變數預設賦值為0,字元型別預設初始值為null,boolean預設是false,除了基本變數預設初始值均為null。

每個變數都有型別,型別可以是基本型別,也可以是引用型別。

變數名必須是合法的識別符號。

變數宣告是一條完整的語句,所以必須以分號結尾。

注意作用域:例項變數(全域性變數),區域性變數必須賦初始值,類變數(靜態變數static)。

成員變數:類中方法外定義的變數

區域性變數:方法內定義的變數

區別:

  1. 成員變數在堆記憶體中,區域性變數在棧記憶體中

  2. 成員變數隨著物件的存在而存在,隨著物件的消失而消失,區域性變數隨著方法的呼叫而存在,隨著方法的呼叫完畢而消失。

  3. 成員變數有預設的初始化值,區域性變數沒有預設的初始化值,必須先定義,賦值,才能使用。

常量

一旦定義後,就不會改動的值。

final 常量名=值;

常量名一般使用大寫字元。

變數命名規範

所有變數,方法,類名:要求見名知意

類成員變數:首字母小寫,駝峰原則即除了第一個單詞以外,後面的單詞首字母均大寫。lastName。

區域性變數:首字母小寫和駝峰原則。

常量:大寫字母和下劃線,MAX_VALUE

類名:首字母大寫,駝峰原則,Man,GoodMan

方法名:首字母小寫和駝峰原則。

運算子

包機制

用於區別類名的名稱空間。(可以理解為資料夾)

作用:對類進行分類管理

語法:package pkg1[.pkg2[.pkg3...]];該語句必須放在最開頭。

一般利用公司域名倒置作為包名。

在java程式中匯入某包。使用“import”語句。

import package1[.package2...].(classname|*);

注:修飾符不存在先後順序。

javaDoc

javaDoc命令是用來生成自己的API文件的

引數資訊

  1. @author 作者名

  2. @version 版本號

  3. @since 指明需要最低JDK版本

  4. @param 引數名

  5. @return 返回值

  6. @throws 丟擲的異常情況

    例:

    /**
    * @author 小朋友
    * @since 1.8
    */
    public class ForExample {
    public static void main(String[] args) {

    int a=0;

    }

    /**
    *
    * @param name
    * @return
    * @throws Exception
    */
    public String writer(String name)throws Exception
    {
    return name;
    }
    }

可以生成幫助文件

步驟

  1. 開啟命令列視窗

  2. 進入所需生成文件的路徑

  3. 輸入 javadoc -encoding UTF-8 -charset UTF-8 所有生成幫助文件的檔名加字尾

  4. 回車

scanner物件

可通過Scanner類來獲取使用者的輸入

基本語法 Scanner s =new Scanner(System.in);

通過Scanner類的next()和nextLine()方法獲取輸入的字串,用hasNext()與hasNextLine()方法判斷是否還有輸入的資料

例:

public class demo_1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("使用next和nextLine方法接收:");
// if(scanner.hasNext())//判斷是否有字串輸入
// {
// String str=scanner.next();//只能接收單個字串
// System.out.println("接收到字串:"+str);
// }
if(scanner.hasNextLine())
{
String str=scanner.nextLine();//可以接收一行字串
System.out.println("接收到字串:"+str);//輸出
}


}
}

結構

  1. 順序結構

  2. 選擇結構 if-else switch 語句

    case穿透:case語句後面如果不加breakj結束迴圈將繼續執行下一個case(不會再進行判斷)後面的語句,直到遇到break或者語句最後才結束。

  3. 迴圈結構 while迴圈, for迴圈,do—while迴圈,continue結束本次迴圈,break結束迴圈,巢狀迴圈。

javaAPI

指的是JDK中提供的各種功能的java類,這些類將底層的實現封裝了起來,我們不需要關心這些類是如何實現的,只需要學習這些類如何使用即可。可以通過幫助文件來學習這些API如何使用。

String類

String類在java.lang包下,所以使用的時候不需要導包。

String類代表字串。 Java程式中的所有字串文字(例如"abc" )都被實現為此類的例項。也就是說java程式中所有的雙引號字串,都是String類的物件。

特點

字串不變; 它們的值在建立後不能被更改。 字串緩衝區支援可變字串。

String物件是不可變的,但是它們可以被共享。

字串效果上相當於字元陣列(char[]),但是底層原理是位元組陣列(byte[])

通過new建立的字串物件,每次new都會申請一個記憶體空間,即使內容相同,但是地址值不同。

以“”方式給出的字串,只要字串序列相同(順序和大小寫),無論在程式程式碼中出現幾次,JVM都只會建立一個String物件,並在字串池中維護。

有關方法

  1. a.equals(b) 比較字串a和b的內容是否相等 返回值為boolean型別

  2. a.length() 返回字串a的字元長度 返回值為int型別

  3. a.charAt(int i) 獲取指定位置上的char值 返回值為char型別

StringBuilder

StringBuilder是一個可變的字串類,可以把它看成是一個容器,這裡的可變指的是StringBuilder物件中的內容是可變的。

StringBuilder append(任意型別) 新增資料,並返回物件本身

StringBuilder reverse() 返回相反的字元序列

這兩個方法String是沒有的,所以出現了二者的相互轉換

StringBuilder轉換為String

String toString() 通過toString()就可以實現把StringBuilder轉換為String

String轉換為StringBuilder

StringBuilder(String s) 通過構造方法就可以實現把String轉換為StringBuilder類。

Random類

簡單來說就是產生隨機數的一個類

  1. 導包 import java.util.Random

  2. Random r=new Random();

  3. int i=r.nextInt(10);//獲取[0,10)的整數。

java中的記憶體分配

棧記憶體

儲存區域性變數

定義在方法中的變數,使用完畢後立即消失。

堆記憶體

儲存new出來的內容(實體,物件)陣列在初始化時,會為儲存空間新增預設值。

每一個new出來的東西都有一個地址值,使用完畢,會在垃圾回收器空閒時被回收。

陣列

陣列動態初始化 例:int []arr=new int[3];

陣列靜態初始化 例: int []arr={1,2,3};

常見小問題

  1. 索引越界

    訪問了陣列中不存在的索引對應的元素,造成索引越界問題。

  2. 空指標異常

    訪問的陣列已經不再指向堆記憶體的資料,造成空指標異常。

集合

集合是提供一種儲存空間可變的儲存模型,儲存的資料容量可以發生改變。集合類有很多,先學習第一個:ArrayList

ArrayList<E> 可調整大小的陣列實現,<E>是一種特殊的資料型別,泛型。

在出現E的地方我們使用引用資料型別替換即可。

ArrayList部分方法

  1. ArrayList() 建立一個空的集合物件

  2. boolean add(E e) 將指定的元素追加到此集合的末尾

  3. void add(int index,E element) 在此集合中指定位置插入指定的元素

  4. boolean remove(Object o) 刪除指定的元素,返回刪除是否成功

  5. E remove(int index) 刪除指定索引處的元素,返回被刪除的元素。

  6. E set(int index,E element) 修改指定索引處的元素,返回被修改的元素

  7. E get(int index) 返回指定索引處的元素

  8. int size() 返回集合中的元素的個數

方法

定義

具有獨立功能的程式碼塊組織成為一個整體,使其具有特殊功能的程式碼集。

注意

  1. 方法必須先建立才可以使用該過程稱為方法定義。

  2. 方法建立後並不是直接執行的,需要手動建立使用後才執行,該過程稱為方法呼叫。

  3. 帶返回值定義的方法return後面的返回值與方法定義上的資料型別要匹配。

  4. 方法的返回值通常會使用變數接收,否則該返回值將無意義。

  5. 方法不能巢狀定義

  6. void表示無返回值,可以省略return,也可以寫reruen;

  7. 方法引數傳遞 對於基本型別的引數,形式引數的改變,不影響實際引數的值,但是對於引用型別的引數,形式引數的改變,影響實際引數的值。(基本型別傳遞的值,引用型別傳遞的是地址)

帶引數方法定義

public static void 方法名(資料型別 變數名1,資料型別 變數名1...){方法體}

方法呼叫時,引數的數量與型別必須與方法定義中的設定相匹配。

形參和實參

形參:方法定義中的引數等同於變數定義格式例如:int number

實參: 方法呼叫中的引數,等同於使用變數或者常量。例如:10,number

方法過載

方法過載指的是同一個類中定義的多個方法之間的關係,滿足下列條件的多個方法相互構成過載。

  1. 多個方法在同一個類中

  2. 多個方法具有相同的方法名、

  3. 多個方法的引數不相同,型別不同或者數量不同

不能通過返回值來判斷兩個方法是否相互構成過載。

方法重寫

概述:子類中出現了和父類中一樣的方法宣告

應用:當子類需要父類的功能,而功能主體子類有自己特有內容時,可以重寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容 注意事項:1. 私有方法不能被重寫(父類私有成員子類是不能繼承的)

  1. 子類方法訪問許可權不能更低(public>預設>私有)

構造方法

是一種特殊的方法主要是完成物件資料的初始化。

如果沒有定義構造方法,系統將給出一個預設的無參構造方法

如果定義了構造方法,系統將不再提供預設的構造方法,若已經定義了帶參構造方法,還要使用無參構造方法。就必須再寫一個無參構造方法。

:構造方法無返回值 例:public 類名(){}

Debug

概述:

Debug是供程式設計師使用的程式除錯工具,它可以用於檢視程式的執行流程,也可以用於追蹤程式執行過程來除錯程式。

  1. 加斷點:選擇要設定斷點的程式碼行,在行號的區域後面單擊滑鼠左鍵即可。

  2. 執行斷點:在程式碼區域右鍵,點選Debug執行。

  3. 觀察Debugger視窗以及Console視窗。

  4. 點Step Into或者快捷鍵F7執行下一步

  5. 結束:點選視窗的Stop結束

  6. 刪除斷點:選擇要刪除的斷點,單擊滑鼠左鍵即可。

注意事項:如果資料來自於鍵盤輸入,一定要記住輸入資料,否則就不能繼續執行。

類是對現實生活中一類具有共同屬性和行為的事務的抽象,確定物件將會擁有的屬性和行為。類是java程式的基本組成單位。

類的組成

  1. 屬性:在類中通過成員變數來體現(類中方法外的變數)

  2. 行為:在類中通過成員方法來體現

特點

類是物件的資料型別

類是具有相同屬性和行為的一組物件的集合

物件:是能夠看得到摸得著的真實存在的實體

類是物件的抽象

物件是類的實體

物件的屬性:物件具有的各種特徵,每個物件的每個屬性都具有特點的值

物件的行為:物件能夠執行的操作

注:一個類的多個物件的成員變數是不同的,但可以共用方法。

抽象類

在java中,一個沒有方法體的方法應該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽象類

多型

概述:同一個物件在不同時刻表現出來的不同形態

多型的前提和體現

  1. 有繼承/實現關係

  2. 有方法重寫

  3. 有父類引用指向子類物件

    多型中成員訪問特點

    1. 成員變數:編譯看左面,執行看左邊

    2. 成員方法:編譯看左面,執行看右邊

      (因為成員方法有重寫,而成員變數沒有)

      好處和弊端

      1. 好處:提高了程式的擴充套件性(具體體現:定義方法的時候,使用父型別作為引數,將來在使用的時候使用具體的子型別參與操作)

      2. 弊端:不能使用子類的特有功能

    轉型

    1. 向上轉型

      從子到父 父類引用指向子類物件 (例: fu f=new zi())

    2. 向下轉型

      從父到子 父類引用轉為子類物件(例: zi z=(zi)f)

使用==做比較

對於基本型別:比較的是資料值是否相同。

對於引用型別:比較的是地址值是否相同。

狂神說JavaJava零基礎學習視訊通俗易懂