大家可以關註作者的賬號,關註從零開始學Java筆記文集。也可以根據目錄前往作者的博客園博客進行學習。本片文件將基於黑馬程式員就業班視頻進行學習以及資料的分享,並記錄筆記和自己的看法。歡迎大家一起學習和討論。 "【從零開始學Java筆記】目錄" 這裡的Java基礎並不是真正的Java基礎,而是一些無法 ...
大家可以關註作者的賬號,關註從零開始學Java筆記文集。也可以根據目錄前往作者的博客園博客進行學習。本片文件將基於黑馬程式員就業班視頻進行學習以及資料的分享,並記錄筆記和自己的看法。歡迎大家一起學習和討論。
【從零開始學Java筆記】目錄
這裡的Java基礎並不是真正的Java基礎,而是一些無法分類的Java知識,如果這裡有不懂得知識沒有關係,可以繼續學習下去。
Java關鍵字
Java關鍵字是電腦語言里事先定義的,有特別意義的標識符,有時又叫保留字,還有特別意義的變數。Java的關鍵字對Java的編譯器有特殊的意義,他們用來表示一種數據類型,或者表示程式的結構等,關鍵字不能用作變數名、方法名、類名、包名和參數。
——來自java關鍵字總結及詳解
首先大家需要瞭解一下什麼是關鍵字,但是並不需要死記硬背,大致瞭解即可,因為後期常用的那幾個關鍵字會被經常使用,自然就記住了。
Java 命名規範
1、項目名全部小寫
2、包名全部小寫
3、類名首字母大寫,其餘組成詞首字母依次大寫
4、變數名、方法名首字母小寫,如果名稱由多個單片語成,除首字母外的每個單詞的首字母都要大寫
5、常量名全部大寫
6、所有命名規則必須遵循以下規則 :
- 只能由字母、數字、下劃線、$符號組成
- 不能以數字開頭
- 不能使用Java中的關鍵字
包
什麼是包
就是類似文件夾的一個東西,我們一般把Java文件按照需要裝在不同的包下麵
包的特點
可以有多層,例如java.util.Scanner,java是一個包,util也是一個包,Scanner是包下的一個類
不同包下的文件名可以重覆,相同包下不可重覆
包的聲明必須是第一行代碼
不同包之間的互相訪問
1.使用類的全名(包名.類名)
java.util.Scanner sc = new java.util.Scanner(System.in);
但是這樣十分繁瑣,所有我們引出了第二個方法
2.使用關鍵字import將類導入
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
註意: *代表的是通配符,代表導入了這個包下所有的類,並沒有導入子包下的類
foreach迴圈
foreach:增強for迴圈,一般用於遍歷集合或者數組
格式:
for(元素的類型變數:集合或者數組對象) {
可以直接使用變數;
}
舉例:
import java.util.ArrayList;
import java.util.Collection;
public class ForeachDemo {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
c.add("hello");
c.add("world");
c.add("java");
for(String i:c) {
System.out.println(i);
}
}
}
輸出結果:
hello
world
java
包裝類
由於基本數據類型只能做一些簡單的操作和運算,所以Java為我們封裝了基本數據類型,為每種基本數據類型提供了包裝類。包裝類就是封裝了基本數據類型的類,為我們提供了更多複雜的方法和一些變數
數據類型 | 包裝類 |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
foat | Float |
double | Double |
boolean | Boolean |
Integer:
String -> int
方式1: int intValue( )
方式2: static int parseInt(String s)
int -> String
方式1: + " "
方式2: String toString()
構造方法:
Integer(int value)
Integer(String s)
自動裝箱和拆箱
JDK1.5特性:自動裝箱和拆箱
//自動裝箱
//相當於: Integer i = new Integer(10);
Integer i = 10;
//自動拆箱
//相當於int. a = i. intValue();
int a = i;
應用場景
ArrayList list = new ArrayList();
list . add(1);//自動裝箱,list.add(new Integer(1));
正則表達式
正則表達式:就是一套規則,可以用於匹配字元串
boolean matches(String regex) :判斷當前字元串是否匹配指定的正則表達式,如果匹配則返回true,否則返回false
常用正則表達式,全部表達式可以在API-String類-matches()方法中找到,如何查閱API請查看相應章節博客。
以下是常用的正則表達式
字元
x 字元 x
\ 反斜線字元
字元類
[abc] a、b 或 c(簡單類)
[^abc] 任何字元,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍
預定義字元類
. 任何字元(與行結束符可能匹配也可能不匹配)
\d 數字:[0-9]
\D 非數字: [^0-9]
\s 空白字元:[ \t\n\x0B\f\r]
\S 非空白字元:[^\s]
\w 單詞字元:[a-zA-Z_0-9]
\W 非單詞字元:[^\w]
Greedy 數量詞
X? X,一次或一次也沒有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超過 m 次
實例:校驗手機號碼是否輸入正確
public class RegexDemo {
/* <br> 2020年3月26日已知
中國電信號段
133,149,153,173,174,177,180,181,189,199
中國聯通號段
130,131,132,145,146,155,156,166,175,176,185,186
中國移動號段
134(0-8),135,136,137,138,139,147,148,150,151,152,157,158,159,165,178,182,183,184,187,188,198
上網卡專屬號段(用於上網和收發簡訊,不能打電話)
如中國聯通的是145
虛擬運營商
電信:1700,1701,1702
移動:1703,1705,1706
聯通:1704,1707,1708,1709,171
衛星通信: 1349 <br> 未知號段:141、142、143、144、154
*/
public static void main(String[] args) {
//10位
String mobile = "1316667777";
//11位
String mobile1 = "13166687777";
//12位
String mobile2 = "131666777799";
//開頭不對
String mobile3 = "23166687777";
//帶有字母
String mobile4 = "131666a7777";
System.out.println(mobile.matches("^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$"));
System.out.println(mobile1.matches("^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$"));
System.out.println(mobile2.matches("^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$"));
System.out.println(mobile3.matches("^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$"));
System.out.println(mobile4.matches("^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$"));
}
}
泛型
由於集合可以存儲任意類型的對象,當我們存儲了不同類型的對象,就有可能在轉換的時候出現類型轉換異常,所以java為瞭解決這個問題,給我們提供了一種機制,叫做泛型。
泛型是一種廣泛的類型,把明確數據類型的工作提前到了編譯時期,借鑒了數組的特點
泛型好處:
- 避免了類型轉換的問題
可以減少黃色警告線
可以簡化我們代碼的書寫
什麼時候可以使用泛型?
當我們看到在API中看到某個方法後有
匿名對象
匿名對象:沒有名字的對象
匿名對象的應用場景:
當方法只調用一次的時候可以使用匿名對象
可以當作參數進行傳遞,但是無法在傳參之前做其他的事情
註意:匿名對象可以調用成員變數並賦值,但是賦值並沒有意義
內部類
什麼是內部類?
在 Java 中,可以將一個類定義在另一個類裡面或者一個方法裡面,這樣的類稱為內部類。廣泛意義上的內部類一般來說包括這三種:成員內部類、局部內部類和匿名內部類。在開始學習Java的時候,可能會覺得內部類沒有什麼意義,但是在後期的學習中會發現,內部類可以有效地提高代碼的效率,讓你的代碼變得高效,優美。
成員內部類、局部內部類和匿名內部類的共性
- 內部類仍然是一個獨立的類,在編譯之後會內部類會被編譯成獨立的.class文件,但是前面冠以外部類的類名和$符號。
- 內部類不能用普通的方式訪問。內部類是外部類的一個成員,因此內部類可以自由地訪問外部類的成員變數,無論是否是private的。
成員內部類
在類的成員位置,和成員變數以及成員方法所在的位置是一樣的
在內部類當中,可以直接訪問外部類的成員,包括私有成員
成員內部類的修飾符:
我們可以使用許可權修飾符修飾成員內部類,但是如果使用私有來修飾,則無法在其他類中訪問
我們可以使用static修飾成員內部類,不用再創建外部類的對象了
我們可以使用abstract fina 修飾成員內部類
局部內部類
在方法內,出了方法之後就無法使用
匿名內部類
可以把匿名內部類看成是一個沒有名字的局部內部類
定義在方法當中
必須在定義匿名內部類的時候創建他的對象
格式:
new 類/介面(){
如果是創建了繼承這個類的子類對象,我們可以重寫父類的方法
如果是創建了實現這個介面的子類對象,我們必須要實現該介面的所有方法
};
原理:而是創建了繼承這個類的子類對象或者是創建了實現這個介面的子類對象
匿名內部類的應用場景
作為參數進行傳遞