1. Java 程式的語法
1.1 識別符號的命名規范
? 識別符號:給類或者變數類的方法屬性命名都是識別符號
? 組成必須是:字母、陣列、_、$、#、- 首字母不能是數字
1.2 約定
- 類:首字母大寫
- 變數、方法名、屬性首字母小寫
- 包全部小寫(包 Package: 相對于作業系統檔案夾)
- 駝峰式命名
- 見名知意
2. Java 的輸入輸出
? System.in(輸入)
? System.out(輸出)
3. 基本型別(8大)
3.1 整數:
| 資料型別 | 占用位元組 | 資料范圍 |
|---|---|---|
| byte | 占一個位元組(8bit) | -2^7(-10111 1111=127) - 2^7 (1111 1111=-128) |
| short | 占兩個位元組(16bit) | -2^15 - 2^15-1 |
| int | 占四個位元組(32bit) | -2^31 - 2^31-1 |
| long | 占八個位元組(64bit) | -2^63 - 2^63-1 |
3.2 小數:
| 資料型別 | 占用位元組 | 資料范圍 |
|---|---|---|
| float | 占四個位元組(32bit) | -3.410^38 - 3.410^38 |
| double | 占八個位元組(64bit) | -1.710^308 - 1.710^308 |
3.3 字符:
| 資料型別 | 占用位元組 | 資料描述 |
|---|---|---|
| char | 占兩個位元組(16bit) | 采取 Unicode 編碼,可以存放中文 char c = '中'; |
3.4 布爾:
| 資料型別 | 占用位元組 | 資料值 |
|---|---|---|
| boolean | 占1個位元組(8bit) | true false |
4. 資料型別的轉換
4.1 自動型別轉換
- 資料型別兼容
- 低的資料型別賦值給高的資料型別
4.2 強制型別轉換
高的資料型別賦值低的資料型別
- 溢位
- 精度的丟失
5. 運算子
- 算術運算:
+ - * / % ++ --(不建議 byte,short,char 進行操作,如果一定要操作,都默認轉換成 int 操作) - 比較運算子:
== != > < >= <= - 邏輯運算子:
&& || ! & |(回傳 Boolean) - 位運算:
& | 《 》 - 三目運算:
條件 ? 值1 : 值2(條件成立,回傳值1,否則回傳值2)
6. Java 流程控制陳述句
6.1 順序結構
? forEach:(加強型 for 回圈)
? for(String string : array):for(資料型別 變數名 : 陣列)
6.2 分支結構
/**
if else 主要用在區間段判斷
switch 主要用在定值判斷,switch 一般是與 break 配合使用
*/
if(條件) {
條件true要執行的代碼
} else if(運算式陳述句) {
} else {
條件false要執行的代碼
}
switch(變數) {
// 變數的資料型別:只能是byte short int 或者 enum
case 值1: 操作1;
......
// String 只能是僅代表1.7與以后的版本才可以放在switch中
case 值n: 操作n;
default:其他情況的操作;
}
6.3 回圈結構
/**
while 與 do while 的區別:
一般 while 能做的操作do while 也能夠實作
while 可能執行0次或者多次,但是 do while 至少執行一次
*/
while(條件) {
回圈陳述句
}
do{
}while(條件);
/**
中斷回圈:
break 中段本層回圈,不能中斷外一層
continue 中斷本次回圈
this 代表當前物件
*/
7. Java 面向物件
7.1 計算機語言發展
- 機器語言:0 1
- 匯編語言
- 初級編程語言:passic,vb,vc,dephi,PHP,ASP
- 高級語言:C#,C++,Java,Object-C
7.2 語言又分為兩種
-
面向程序:vc
-
面向物件:Java,C++
面向程序是面向物件的基礎,面向物件依賴于面向程序,他們之間不存在沖突
面向物件(OO),面向物件的編程(OOP),面向物件的分析(OOS),面向物件的設計(OOD)
面向程序 → 側重于業務流程的實作,演算法的本身
面向物件 → 側重于實作業務的事物,呼叫著程式的指揮官
面向物件:編程最小單位
8. Java 定義
8.1 Class(類)
? 把具有相同屬性與行為的一系列事物統稱為一個類,例如:動物,魚 <?)))><<
8.1.1 定義類的語法:
class 類名{
? 屬性
? 資料型別 屬性名;
? ......
? 資料型別 屬性名;
? // 行為也叫方法
回傳值型別 方法名(引數串列){
? 方法體
}
}
/**
類體:抽象的概念,具體相同屬性與行為的一系列事物的總稱;
類體 → 屬性與行為
*/
8.2 參考型別
? 類,介面,陣列
8.3 屬性的定義
? 類的屬性也可以稱為類的成員變數,類的成員屬性,域;Java 的資料型別 屬性名
? 類的屬性如果不賦值,會有默認值,基本型別默認值都與0相關,參考型別默認值都是 null
8.4 方法(函式)
? 是具有特定功能的封裝
8.4.1 方法的定義:
回傳值的型別 方法名(引數串列 形式引數){
方法體
}
8.5 回傳值型別
? 可以是 Java 的資料型別:基本型別,參考型別,void
8.6 物件
? 是客觀存在的,是類的實體;類是物件的模版(萬物皆物件)
? 創建物件:類名 物件名 = new 類名();
? 呼叫物件的屬性或者行為: .代表參考
? 物件名.屬性,物件名.行為(引數串列);
8.7 類的屬性
? 成為類的成員屬性,全域變數會有默認值
? 默認值規則:byte,short,int,long 默認值:0
8.8 package(包)
? 相當于作業系統里面的檔案夾
? 包主要是為了解決開發程序中類的命名沖突問題
? 一般把完成特定功能的代碼放在同一個包里
? Java.lang :Java 核心類包,默認都已經匯入,不需要手工匯入
? Java.util:Java 的工具類包
9. Java 面向物件
面向程序:注重程式的流程,資料結構與演算法,參與者就是它本身
面向物件:注重的事物的屬性與行為,參與者更多是一個指揮者
9.1 extends(繼承)
? 繼承是單繼承:一個類只能有一個直接父類,但一個父類可以有多個子類
? Java 中沒有多繼承,但是有多重繼承,所有類的頂級父類是 Object 類
9.2 繼承關系中,類的初始化順序
- 父類的靜態 static
- 子類的靜態
- 父類的普通(屬性與方法) 代碼
- 父類的構造
- 子類的普通
- 子類的構造
9.3 overload(方法的多載)
- 發生在同一個類中
- 方法名相同
- 引數串列不同(個數不同,引數資料型別不同,個數與資料型別都不相同)
- 與回傳值型別無關,與訪問修飾符無關
9.4 override(繼承方法的覆寫 / 重寫)
? 在繼承關系中,子類對父類的方法的重新實作
- 方法名與父類相同
- 引數串列也相同
- 回傳值型別也相同,或者可以隱式轉換成父類的回傳值型別
9.5 繼承轉型
- 向上轉型:把子類物件轉換成父類物件(是安全的,但子類物件的自身屬性會被隱藏)
- 向下轉型:把父類物件轉換成子類物件
- 不允許直接 new 父類賦值給子類的向下轉型
- 可以向上轉型,再向下轉型
9.6 混合型別轉型
? 只能騙過編譯器,運行會發生轉換例外
9.7 訪問修飾符
修飾符:控制別的類對本類的屬性與方法的訪問權限
面向物件的封裝,就是通過訪問修飾符來控制訪問權限
- 修飾符 資料型別 屬性名;
- 修飾符 回傳值型別 方法名(引數串列){方法體}
- 修飾符 class 類名{}
| 修飾符 | 本類 | 同包下的類(子類與非子類) | 不同包的子類 | 不同包的其他類 |
|---|---|---|---|---|
| public | T | T | T | T |
| protected | T | T | T | F |
| default | T | T | F | F |
| private | T | F | F | F |
- public:公共權限
- protected:受保護的
- default / 不寫:默認
- private:私有的
9.8 instanceof(判斷物件型別)
物件名 instanceof 類名:用來判斷物件是否是類的實體
10. Java 中的常用方法
10.1 構造方法
? Object() {}
toString():回傳類的類路徑 + @+hascode對應的16進制數equals(Object obj):物件(Object)的比較 equals與==相同hascode(): 回傳記憶體地址的整數
10.2 字串序列(String)
? 構造:String() String(String s) String(byte s[]) String(char s[])
10.3 構造字串物件
? String s = "hello";
10.4 字面量值賦值
String s = new String("hello");
10.5 常用方法
| 方法 | 描述 |
|---|---|
boolean equals(Object anObject) |
重寫了Object equals 比較字串內容 |
boolean equalsIgnoreCase(Object anObject) |
忽略大小寫比較字串內容 |
int length() |
獲取字串長度 |
char charAt(int index) index → 0-length()-1 |
獲取字串中 index 位置的字符 |
indexOf("要查找的字串") |
回傳第一次出現要查找的字串的位置,如果查找不到回傳-1 |
indexOf("要查找的字串",int index) |
跳過 index 位置,開始查找第一次出現要查找的字串的位置 |
lastIndexOf("要查找的字串") |
回傳最后一次出現要查找的字串的位置 |
lastIndexOf("要查找的字串",int index) |
跳過 index 位置,回傳最后一次出現要查找的字串的位置 |
substring(int begin) |
截取字串從 begin 開始到末尾 |
substring(int begin,int end) |
截取字串,從 begin 開始到 end 不包含 end |
replaceAll("原串","新串") |
把字串中的所有原字串替換成新串 |
split("分隔符") |
分割符把字串分割成若干個字符,回傳分割后的字串陣列 |
| concat("xxx") | 相對于 "原串" + "xxxxx",字串追加 |
10.6 Object 類
? Object 是 Java 的祖先類,基類,金字塔最頂端的類,最小的細胞類
-
如果是基本型別(byte short int long char float double boolean)
== 比較的內容(值) -
如果比較是參考型別(類 介面 陣列)
== 比較的是記憶體地址
-
equals 只能用于參考型別的比較
比較的時候看當前物件的類里面有沒有重寫 equals 方法,如果沒有重寫 equals 方法,默認呼叫 Object 里面的 equal 方法
如果重寫 equals 方法,那么按照當前類中 equals 方法的邏輯進行比較
-
如果兩個物件 equals() 回傳true,那么 hashCode() 值會相同,但是兩個物件 hashCode() 相同,兩個物件未必能 equals() 相等
10.7 Java 重寫
- 繼承關系中,子類對父類的方法重寫實作
- 方法名相同
- 引數串列也相同
- 回傳值型別也相同或者可以隱式轉換成父類的回傳值型別
- 訪問修飾符的權限不能低于父類
10.8 final 關鍵字
? final 修飾變數:就變成常量,不可以變
? final 修飾方法:就變成最終方法,不可以被重寫 override
? final 修飾類:類就不可以被繼承 (太監類)
10.9 StringBuffer 可變的字串序列
? append() :往字串追加內容
? insert(位置,"內容") :往字串指定位置追加內容
? delete(int start,int end):洗掉字串從 start 開始到 end - 1 位置上的字串
? reverse() :讓里面的內容反轉
10.10 System
? System.in:輸入流
? System.out :輸出流
10.11 獲取控制臺的輸入物件
Scanner in = new Scanner(System.in);
// 遇到空格就不往后取內容
in.next();
// 遇到換行符才不往后取內容
in.nextLine();
10.12 GC(garbage Collect) 垃圾回收器
? Java 程式垃圾是不需要程式員去手工回收,系統(JVM)在后臺啟動一個執行緒(守護執行緒) 每隔一定的時間,自動呼叫System.gc()方法,掃描系統中長時間
? 未使用物件,或者物件指向null,自動回收這些物件,
? 呼叫該物件的finalize()方法來釋放占用的內容空間,當然程式員也可以手工呼叫System.gc()
10.13 java.util.Date 時間類
? SimpleDateFormat 是一個以與語言環境有關的方式來格式化和決議日期的具體類
10.13.1 Date 時間格式
? yyyy:四位年
? MM:月
? dd:日
? hh:12進制時
? HH:24進制時
? mm:分
? ss:秒
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss")
new SimpleDateFormat("yy年MM月dd日 HH時:mm分:ss秒 ")
10.14 Math 數學工具類
10.15 基本型別的包裝類
? 基本型別的包裝類里面都提供了操作該基本型別的屬性與方法
| 基本型別 | 包裝類 |
|---|---|
| byte | java.lang.Byte |
| short | java.lang.Short |
| int | java.lang.Integer |
| long | java.lang.Long |
| float | java.lang.Float |
| double | java.lang.Double |
| char | java.lang.Character |
| boolean | java.lang.Boolean |
10.16 陣列
? Java 陣列用來存盤具有相同資料型別的若干個資料的集合,陣列長度不可變
10. 16.1 一維陣列的定義
一個一維陣列里面每個元素都是一個一維陣列
int nums[] = {1,2,3,4,5,6,7,8,9};
-
動態定義
-
申明: 資料型別[] 變數名(陣列名);
-
初始化:陣列名 = new 資料型別[length];
-
資料型別[] 變數名(陣列名) = new 資料型別[length];
-
-
靜態定義
- 資料型別[] 陣列名 ={資料1,......資料n}
10.16.2 二維陣列的定義
int nums = {{1,2,3},{4,5,6},{7,8}};
易出現例外
? ArrayIndexOutOfBoundsException:陣列下標越界例外
11. 排序演算法
11.1 冒泡排序
# 排序數字
8,7,6,3,5,2,4,1
# 首輪
7,8,6,3,5,2,4,1
7,6,8,3,5,2,4,1
7,6,3,8,5,2,4,1
7,6,3,5,8,2,4,1
7,6,3,5,2,8,4,1
7,6,3,5,2,4,8,1
7,6,3,5,2,4,1,8
# 第二輪
6,7,3,5,2,4,1,8
6,3,7,5,2,4,1,8
6,3,5,7,2,4,1,8
6,3,5,2,7,4,1,8
6,3,5,2,4,7,1,8
6,3,5,2,4,1,7,8
# 末輪
8,7,6,3,5,2,4,1
11.2 選擇排序
'''
首輪
max=8
index=0
'''
8,7,6,3,5,2,4,1
'''
第二輪
max=7
index=1
'''
8,7,6,3,5,2,4,1
'''
第三輪
max=6
index=2
'''
8,7,6,3,5,2,4,1
'''
末輪
max=1
index=7
'''
8,7,6,5,4,3,2,1
11.3 查找演算法
- 全部遍歷
- 二分查找(折半查找):適合已經排好序的陣列
12. abstract 抽象
12.1 抽象方法
一個方法沒有方法體{}
訪問修飾符 abstract
回傳值型別 方法名(引數串列);
這個時候方法就必須申明為抽象方法(用關鍵字 abstract 修飾)
12.2 abstract 抽象類
訪問修飾符(default protected public)
abstract class 類名{}
12.3 抽象類
- 可以有抽象方法,也可以沒有抽象方法
- 抽象類可以有構造方法,但是不能 new 操作
- 抽象類中可以有成員變數(屬性)成員方法
- 抽象類中可以有常量
- 抽象類可以繼承其他的類
- 如果一個類繼承一個抽象的類,要不繼續宣告為抽象類,要么重寫抽象類中的所有抽象方法
- 抽象類用來被繼承的,只能單繼承,抽象類與子類存在 instanceof 關系
12.4 介面(interface)
- 介面是一種特殊的抽象,介面中的方法全部都是抽象的
- 介面中方法默認都是 public abstract 都是抽象的
- 介面中不能有成員變數方法
- 介面中可以有常量,默認都是public final
- 介面沒有構造,不能實體化
- 介面不能繼承類
- 介面可以繼承介面,介面與介面的繼承多繼承
- 介面是用來被實作的,一個類可以實作多個介面,一個類可以實作多個介面主要是為了彌補 Java 單繼承缺陷
12.5 抽象類與介面對比
| 比較點 | 抽象類 | 介面 |
|---|---|---|
| 定義 | abstract class 類名{} | interface 介面名{} |
| 構造器 | 有 | 無 |
| 成員屬性方法 | 有 | 無 |
| 常量 | 有 | 有 |
| 抽象方法 | 可以有,可以沒有 | 有 |
| 繼承exends | 抽象類可以繼承其他類,只能單繼承 | 介面只能繼承介面,可以多繼承 |
| 實作implements | 抽象類可以實作介面,可以多實作 | 介面不能實作介面 |
| 關系 | 抽象類是用來被繼承的,與后代存在 instanceof 關系 | 介面是用來被實作的,與實作介面的類不存在任何關系 |
13. Java 的集合類框架
13.1 陣列
? 陣列定長的定義后大小不可以變化的
13.2 Collection:集合類框架的頂端介面
13.2.1 常用方法
| 方法 | 描述 |
|---|---|
| add(Object obj) | 追加元素 |
| addAll(Collection c) | 追加另外一個集合 |
| size() | 集合里面的元素個數 |
| remove(Objecr obj) | 洗掉元素 |
| removeAll(Collection c) | 洗掉外一個集合里面存在的所有元素 |
| clear() | 清空集合 |
| isEmpty() | 判斷集合是否沒有元素 |
| iterator() | 迭代集合里面的元素 |
13.2.2 Collection 子介面
? List 介面:有序的,可以重復的集合介面
13.2.3 常用實作類
-
ArrayList,LinkedList,Stack,Vector
- ArrayList 取資料塊,插入慢
- LinkedList 取資料慢,插入快
- ArrayList 與 Vector:Vector多執行緒安全的
-
Set:無序的,不可以重復的集合
-
常用實作類 HashSet,TreeSet,HashSet
-
去重:先呼叫當前物件的 hashCode 去集合里面找,如果沒有相同的就會放入集合,如果有相同的繼續呼叫 equals(),如果有 equals 就不放入,如果沒有相同的就放入
-
-
Map 介面: 鍵值對存盤
- key(鍵)是一個 Set 集合,不可以重復值;value(值) 是一個可重復的集合
- 常用實作類:HashMap,HashTable,TreeMap
13.2.4 List 常用的方法
get(index,Object obj):在指定位置上添加元素toArray():把集合轉換成陣列
14. Java 泛型
指定引數或者集合的資料型別
-
用法
List<資料型別> list = new ArrayList(); -
泛型好處
- 指定存放的資料型別,提升安全性
- 指定存放的資料型別,取資料時候減少強制型別的轉換,減少出錯的概率,同時提升程式的運行效率
15. Java 的例外處理(Exception)
15.1 Throwable 類
? 子類 Error 是程式錯誤,不可以運行或者記憶體溢位,斷電,程式是無法捕獲的
? Exception 程式運行程序中輸入輸出計算結果不當發生
15.2 例外處理五大關鍵字
| 關鍵字 | 描述 |
|---|---|
| try | 嘗試運行某段代碼 |
| catch | 捕獲例外 |
| finally | 最終要執行的一段代碼,在程式中用來釋放資源,關閉打開的資源 特殊情況:finally 之前 try 或者 catch 中遇到 System. |
| thorw | 拋出例外 |
| throws | 宣告例外 |
15.3 自定義例外處理
- 宣告一個例外類(
寫一個類 extends Exception{}) - 可能發生例外的方法都宣告可能拋出自定義類
- 再呼叫拋出的例外
本文來自博客園,作者:Schieber,轉載請注明原文鏈接:https://www.cnblogs.com/xiqingbo/p/java-28.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457974.html
標籤:Java
上一篇:HM-SpringCloud微服務系列9.2【初識Seata】
下一篇:操作執行緒的方法
