Java是一門面向對象的編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程式員以優雅的思維方式進行複雜的編程。 Java具有簡單性、面向對... ...
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