編譯器默認添加的代碼
1)每個java代碼, 默認添加 import? java.lang.*;
2)如果一個類沒有定義任何構造方法,系統(tǒng)默認提供 公開 無參構造方法
3)訪問屬性和方法,如果不寫引用,默認為"this."
4)如果一個構造方法的第一行不是super(...),也不是this(...),系統(tǒng)默認為super();
5)接口中的屬性默認為public static final 方法默認為public abstract
6)如果一個類沒有指定父類,默認繼承Object類
==========================================================================
CoreJava
Java? 編程語言? 平臺?
移動互聯網
? ? Android? -- Java
? ? iOS? --- OC
云計算 大數據
==========================================================================
Java
簡單(和C++)
面向對象
跨平臺 可以運行在不同的操作系統(tǒng)中? Windows Unix Linux Mac ...
編譯? 源文件 <------>編譯器? 機器碼文件? 快? 不能跨平臺
解釋? 源文件 <------>解釋器? 逐行翻譯 ? 慢? 可以跨平臺
Java? 先編譯 后解釋
? ? ? 源文件(.java) ------> 字節(jié)碼文件(.class) ------> 解釋運行
? ? ? ? ? ? ? ? ? ? ? javac? ? ? ? ? ? ? ? ? ? ? java
? ? ? ? ? ? ? ? ? ? ? 編譯器? ? ? ? ? ? ? ? ? ? 解釋器
虛擬機 JVM? 屏蔽底層OS之間的差異
JDK (Java開發(fā)工具包 編譯器+解釋器+JVM+工具+類庫 )
設置三個環(huán)境變量
Java_Home : 指向JDK安裝目錄
Path: 指向JDK安裝目錄/bin
ClassPath: .
javac 源文件名 (帶.java)? 一個類 --- 一個.class文件
java? 類名? (不帶.class)
公開類的類名必須和源文件名相同,包括大小寫
一個源文件中可以定義多個類,但最多只能定義一個公開類
package 和磁盤上的文件夾對應
javac -d 路徑 源文件名? 自動按照包結構生成字節(jié)碼文件
Java程序的結構
package? 0-1
import? ? 0-n
class? ? 1-n? 公開類只能寫一個
編程習慣? 可讀性
1.注釋?
? // 單行注釋
? /*
? ? 多行注釋? 不能嵌套
? */
? /**
? ? 多行注釋? 配合JavaDoc工具, 生成API幫助文檔
? */
2.縮進
? 同級代碼左對齊
? 每進入一個代碼塊,縮進一次
? 每行一句代碼
3.標識符規(guī)則
? 字母,數字,_,$? 數字不能開頭
? 沒有長度限制
? 大小寫敏感
? 不能使用關鍵字和保留字
? 習慣:
? 1.望文知義?
? 2.大小寫
? ? 包名? ? ? ? ? ? ? ? ? 全小寫? ? ? ? ? ? ? ? ? ? helloworld
? ? 類名? ? ? ? ? ? 單詞首字母大寫? ? ? ? ? ? ? ? ? HelloWorld
? ? 變量名/方法名? ? 首單詞小寫,后面單詞首字母大寫? helloWorld
? ? 常量名? ? ? ? ? ? ? ? 全大寫? ? ? ? ? ? ? ? ? ? HELLOWORLD
變量
強類型:變量類型和變量中存儲數據類型必須一致
定義變量? 變量類型 變量名;? int a;? int a,b;
變量名 = 數據? ? a=10;
int a = 10;
數據類型
基本數據類型 (原始 簡單)
? ? byte? 1B? -128 -- 127? ? 10 010 0x10? 0b10 (since 1.7)
? ? short? 2B? -32768 -- 32767
? ? int? ? 4B? -2147483648 -- 2147483647
? ? long? 8B? -2^63 - 2^63-1? 字面值 加L
? ? float? 4B? 單精度浮點數? 字面值加F
? ? double 8B? 雙精度浮點數? 字面值加D 或者不加? 2.8e10?
? ? char? 2B? 字符 'A'? 65? '\u0041'? ? 'A' 65? 'a' 97? '0' 48
? ? ? ? ? ? ? 轉義字符 \n? \t? \" \' \\
? ? boolean? ? 字面值 true false
對象類型
? ? String? 字符串 字面值 "ABCD"
表達式? 值
? ? 運算類型: a b 發(fā)生運算? (類型提升)
? ? a,b中有double --> double
? ? a,b中有float? --> float
? ? a,b中有l(wèi)ong? --> long
? ? ? ? ? ? ? ? ? --> int
?
? ? =? ? ? ? ? a=b
? ? + - * / %?
? ? += -= *= /= %=? ? (不發(fā)生類型提升) a+=b <===> a=a+b
? ? ++ --? ? ? ? a++ <===> a+=1
? ? ==? ? ? a==b 判斷a和b值是否相同
? ? !=
? ? > < >= <=
? ? &&(邏輯與) ||(邏輯或) !(邏輯非)
? ? (布爾表達式)?值1:值2?
局部變量? 定義在方法內部的變量
1. 先賦值,再使用
2. 作用范圍: 從定義開始,到它所在的代碼塊結束
3. 重合范圍內,不允許2個局部變量重名
=============================================================================
程序執(zhí)行流程
1.順序執(zhí)行流程? 語句執(zhí)行1次
2.條件分支流程? 語句執(zhí)行0-1次
if (布爾表達式) { 代碼塊 }
if (布爾表達式) { 代碼塊1 }? else { 代碼塊2 }
if (條件1){}
else if (條件2){}
else if (條件3){}
...
else {}
switch(int表達式)? byte short int char? String (since 7.0)
{
? case 值1:
? case 值2:
? case 值3:
}
break? 跳出switch-case
3.循環(huán)流程? 語句執(zhí)行n次
while(布爾表達式){ 代碼塊 }? ? ? 0-n次?
do{循環(huán)體} while(循環(huán)條件);? ? ? 1-n次
for(循環(huán)變量初始化 ; 循環(huán)條件 ; 循環(huán)變量變化) {循環(huán)體}? 0-n次? 確定循環(huán)
? int i = 0 ; i < n? ; i++? n次
? int i = 1 ; i <= n ; i++? n次
break : 跳出循環(huán)
continue: 跳出本次循環(huán)
===============================================================================
函數? 獨立的過程
可維護性
定義
1.函數的聲明? static 返回值類型 函數名 (參數表)
? 形式參數:形參? 函數內部有效的局部變量
2.函數的實現? { }
調用
函數名(參數表)
? 實際參數:實參? 為對應的形參賦值
函數的作用:
1.減少冗余代碼, 提高程序的可維護性
2.提高可重用性? 函數庫
3.提升程序的結構化
? 非結構化 ----> 結構化? (面向過程)
數組
一次性定義多個同類型的變量
定義數組
int[] a ;
int []a ;
int a[] ;
分配空間 指定長度? 數組名.length? 表示數組長度
a = new int[5];
默認值:
? ? 數值類型:0
? ? 布爾類型:false
? ? 對象類型:null?
int[] a;
a = new int[]{1,3,2,6,5};
a = {1,3,2,6,5}; //error
int[] a = new int[]{1,3,2,6,5}; //顯式初始化
int[] a = {1,3,2,6,5};
訪問數組元素:? 數組名[下標]
a[0] a[1] a[2] a[3] a[4]
數組在內存中存儲空間必須是連續(xù)的
數組的長度固定!
二維數組
定義? int[][] a;
分配空間? a = new int[3][4];
a = new int[][]{{1,2,3,4},{5,6,7,8},{0,0,0,0}};
冒泡排序: 相鄰的元素比較
選擇排序: 一個元素和剩余所有元素比較
==================================================================================
面向對象思想
對象:一切客觀存在的事物? Object
是什么
有什么? ? 屬性
能做什么? 方法
is a? ? 繼承
has a? 關聯
use a? 依賴
先找到解決問題所需要的對象,再建立對象間的聯系和過程
計算機中的對象:內存中一塊數據 代表了生活中的對象? 抽象
面向對象的優(yōu)勢,要求
各司其職? 簡單的對象組成復雜的系統(tǒng)
弱耦合性? 對象之間的聯系盡可能弱化
可重用性
可擴展性
類?
對象的抽象,是對象在人腦中的反應? 人對對象的認識
對象的模板
類是代碼,對象根據類的模板創(chuàng)建出的數據
屬性:成員變量
1.有默認值? 默認值規(guī)則等同于數組默認值規(guī)則
? 數值 0
? 布爾 false
? 對象 null
2.作用范圍:全類內部
3.可以和局部變量重名,訪問時局部變量優(yōu)先
方法
聲明: 修飾符 返回值類型 方法名(參數表) 拋出的異常
? ? ? 對象能做什么
實現: {}? 對象怎么做
方法的重載 (Overloading)
多個方法,方法名相同, 參數表不同(參數個數不同,參數類型不同,參數類型排列不同)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果只有參數名不同,不算重載
由編譯器根據實參類型,選擇相應的方法調用 (編譯時多態(tài))
作用:讓一個對象的同類方法,由于參數表的不同所造成的實現差異對用戶屏蔽
構造方法
1.沒有返回值類型
2.方法名必須和類名相同
3.不能手工調用,對象構造過程中自動調用一次
如果一個類沒有定義任何構造方法,系統(tǒng)默認提供 公開 無參構造方法
創(chuàng)建對象:? new 類名(構造參數)
簡單變量:存數值
引用:存放對象的地址? null 表示該引用沒有指向任何對象
方法參數傳遞規(guī)則:
簡單類型參數傳值,對象類型參數傳地址(實參和形參共同指向同一對象)? ?
this:
1. 引用? 當前對象?
? this.
? 訪問屬性和方法,如果不寫引用,默認為"this."
? 區(qū)分成員變量和局部變量
2. this() 調用本類其他構造方法? 必須是構造方法的第一條語句
===============================================================================
三大特性
封裝? 明確的邊界
屬性私有? set/get訪問方法?
方法可以公開,可以私有
繼承? 一般--特殊? 父類 -- 子類? ? is a
父類的哪些屬性和方法能繼承給子類? <==> 子類能訪問父類的哪些屬性和方法?
訪問修飾符
private? 私有? ? ? 類的內部訪問? ? 不能繼承
(default) 默認? ? ? 本類+同包? ? ? 同包子類可以繼承
protected 受保護的? 本類+同包+子類? 可以繼承
public? ? 公開? ? ? ? ? ? ? ? ? ? ? 可以繼承
構造方法不能繼承
方法覆蓋 (Override)
子類用特殊的方法實現替換掉父類繼承給它的方法實現
訪問修飾符相同或更寬,返回值類型,方法名,參數表相同
單繼承 一個類只能有一個直接父類
類之間會形成簡單的樹狀結構
super
1.引用 父類對象
? 用來訪問父類的屬性,或者調用父類被覆蓋的方法
2.super() 用在構造方法的第一條語句? 表示創(chuàng)建父類對象
? 如果一個構造方法的第一行不是super(...),也不是this(...),系統(tǒng)默認為super();
對象構造過程
1.分配空間(非靜態(tài)屬性)? ? 屬性被賦予默認值
2.創(chuàng)建父類對象
3.初始化本類非靜態(tài)屬性? ? 屬性被賦予初始值
4.調用本類構造方法? ? ? ? 屬性可以被賦予構造參數
A <--- B <--- C
分配空間
初始化A類屬性
調用A類構造方法
初始化B類屬性
調用B類構造方法
初始化C類屬性
調用C類構造方法
多態(tài)?
子類對象可以賦值給父類引用
1.對象類型不變
2.只能對引用調用引用類型中聲明的方法
3.運行時根據對象實際類型,運行子類覆蓋之后的方法
子類引用可以直接賦值給父類引用
父類引用需要通過強轉,賦值給子類引用
引用 instanceof 類名? 判斷引用所指向的對象和 類名 是否兼容
? ? ? 是不是? ? 用于強制類型轉換之前,避免類型轉換異常
a instanceof Dog? ? true
a instanceof Cat? ? false
a instanceof Animal? true
多態(tài)的作用? 通用性
? ? 可以把不同的子類對象統(tǒng)一看做父類對象,屏蔽不同子類的差異
多態(tài)用在方法的參數上? method(A a):method方法接受A類或A的子類對象作為實參
多態(tài)用在方法的返回值上 A method(): method方法返回的是A類或A的子類對象
==================================================================================
修飾符?
private? ? 屬性 方法 構造方法
(default)? 屬性 方法 構造方法? 類
protected? 屬性 方法 構造方法
public? ? 屬性 方法 構造方法? 類
static 靜態(tài)
1.屬性?
? ? ? ? 靜態(tài)屬性全類共有
? ? ? ? 類名訪問
2.方法
類名直接調用
? ? ? ? 靜態(tài)方法不能訪問類的非靜態(tài)成員,包括this
對引用調用靜態(tài)方法,等價于對引用類型調用靜態(tài)方法
靜態(tài)方法只能被子類的靜態(tài)方法覆蓋,而且沒有多態(tài)
3.初始代碼塊
靜態(tài)初始代碼塊 在類加載的時候執(zhí)行一次
類加載:當JVM第一次使用一個類時,需要找到這個類對應的.class文件,并把這個文件中類的信息讀取到JVM中,并保存起來.
類加載的過程:
1)如果需要的話,先加載父類
2)按照定義順序,初始化靜態(tài)屬性,或執(zhí)行靜態(tài)初始代碼塊
類加載的時機:
1)第一次創(chuàng)建類的對象
2)第一次訪問類的靜態(tài)成員
3)第一次調用Class.forName()?
如果只是聲明類的引用,不會發(fā)生類加載
final
1.變量? 常量? 一旦賦值,不能改變
final屬性沒有默認值,必須在初始化屬性或構造方法中賦值一次
2.方法? 不能被子類覆蓋
3.類? ? 不能被子類繼承
abstract? 抽象的
1.類? ? 抽象類只能聲明引用,不能創(chuàng)建對象
半成品? 供子類繼承
2.方法? 抽象方法只有聲明,沒有實現
如果一個類中包含抽象方法,這個類就必須是抽象類
子類繼承抽象類,如果子類不希望也成為抽象類,就必須實現父類中所有的抽象方法
private final static 都不能和abstract同時出現
單例模式
===============================================================================
接口? 特殊的抽象類
1.所有的方法都是公開抽象方法? public abstract
2.所有的屬性都是公開靜態(tài)常量? public static final
3.沒有構造方法
一個類實現接口,如果這個類不希望成為抽象類,就必須實現接口中所有方法
接口之間可以多繼承
一個類在繼承另外一個類的同時,還可以實現多個接口
接口的作用:
1.多繼承? 主要類型-次要類型
? 用接口實現多繼承,不會破壞類之間樹狀關系的簡單性
2.解耦合工具? 將接口的實現者和接口的使用者分離
? 接口回調:接口和接口的使用者預先定義,個人負責接口實現
? ? ? ? ? ? A ---> I --- B?
=================================================================================
內部類
成員內部類
? ? 可以訪問外部類的私有成員
? ? 用"外部類類名.this"訪問外部類的當前對象
? ? 創(chuàng)建對象:先創(chuàng)建外部類對象,再通過"外部類對象.new 內部類類名()"
靜態(tài)內部類
? ? 只能訪問外部類的靜態(tài)成員
? ? 直接用"new 外部類類名.內部類類名()"創(chuàng)建對象
局部內部類
? ? 作用范圍:從定義開始.到所在代碼塊結束
? ? 不僅可以訪問外部類的私有成員,還可以訪問外部類的局部常量 (final)? ?
匿名內部類? 特殊的局部內部類
? ? 1.用于繼承某個類或實現某個接口
? ? 2.只會創(chuàng)建一個對象
===============================================================================
Object? Java中所有類的父類
1. Object o = 任何對象
2. Object類中定義的方法是所有Java對象都具有的方法
getClass(): 獲取對象的實際類型
finalize(): 在對象被垃圾回收時,由垃圾收集器自動調用
? ? ? 垃圾對象判定:零引用
? ? ? 垃圾回收時機:延遲回收
toString(): 返回對象的字符串形式
? ? ? public String toString()
? ? ? 打印對象,就是打印對象toString方法的返回值
equals(): 判斷2個對象內容是否相同
? ? ? public boolean equals(Object o):比較this和o對象的內容
包裝類? 8種基本類型 --- 包裝類
int? ? -- Integer
char? -- Character
double -- Double
自動封箱? 由編譯器自動處理基本類型和包裝類之間的轉換
============================================================================
String
常見方法:
length():字符串長度
charAt(int pos):獲得pos下標的字符
toCharArray():將字符串轉為字符數組
String(char[] cs):利用cs數組構造字符串
toUpperCase()轉大寫
toLowerCase()轉小寫
indexOf(String s):返回子串s在字符串中出現的首下標
indexOf(String s, int from):返回子串s在字符串中從from下標開始的首下標
startsWith(String s):判斷字符串是否以s子串開頭
endsWith(String s):判斷字符串是否以s子串結尾
trim():去掉字符串前后的空格及換行
replace(String s1,String s2):將字符串中s1子串替換為s2子串
split(String s):將字符串以s為分隔符,切割為字符串數組
substring(int from,int end):獲得從from下標到end下標的子串,包含from,不包含end
堆:存放對象
棧:存放局部變量
代碼空間:存放共享資源 (靜態(tài)屬性 串池)
intern():返回字符串在串池中的地址
================================================================================
集合? 容器
? 對象 管理,儲存多個對象
Collection
基本特點: 元素是Object
常見方法:
add(Object o):將對象o添加到集合中
clear():清空集合
contains(Object o):判斷集合中是否包含對象o
remove(Object o) :刪除對象o
size():獲得集合的長度
toArray():將集合轉為數組
遍歷:
迭代遍歷? for-each
實現類:無
List? Collection的子接口
基本特點: 元素是Object? 元素有順序,有下標? 可以重復
常見方法:
add(int pos,Object o):將元素o添加到pos下標
remove(int pos):刪除pos下標的元素
get(int pos):獲得pos下標的元素
indexOf(Object o):獲得o在集合中的下標
遍歷:
1.下標遍歷
2.迭代遍歷? for-each
實現類:
1.ArrayList? 數組實現? 查詢快 增刪慢? 1.2? 線程不安全? 快
2.LinkedList 鏈表實現? 查詢慢 增刪快
3.Vector? ? 數組實現? ? ? ? ? ? ? ? ? 1.0? 線程安全? ? 慢
Set? Collection的子接口
基本特點: 元素是Object? 元素無下標,元素內容不可重復
常見方法: 無
遍歷:迭代遍歷? for-each
實現類:
HashSet
自定義的對象放入HashSet,為了保證對象內容不重復:
1)覆蓋hashCode方法,保證相同對象返回相同的int
? ? ? 盡量保證不同對象返回不同的int
2)覆蓋equals方法,保證相同對象比較返回true
LinkedHashSet HashSet的子類? 維護元素添加到Set中的順序
TreeSet SortedSet(Set的子接口)的實現類 自動對元素排序
Map
基本特點:元素是鍵值對? 鍵:Object 無順序 內容不重復? 值:Object 可以重復
常見方法:
put(K key,V value):將鍵值對添加到Map中,如果key已經存在,新的value會替換舊的value
get(K key):通過key獲得對應的value
size():獲得Map中鍵值對的數量
remove(K key):刪除key所對應的鍵值對
containsKey(Object key) 判斷key是否存在
containsValue(Object value) 判斷value是否存在
遍歷:
keySet():獲得Map中所有key的集合? ? Set
values():獲得Map中所有value的集合? Collection
? ? ? ?
實現類:
HashMap? ? 1.2 線程不安全? 允許用null作為key或value
LinkedHashMap? HashMap的子類 維護鍵值對添加到Map中的順序
TreeMap SortedMap(Map的子接口)的實現類? 自動對key排序
Hashtable? 1.0 線程安全? 不允許用null作為key或value
Properties 1.0 Hashtable的子類? 鍵和值都是String 用于配置文件的讀取
泛型 since JDK5.0? 模板編程
在集合中,泛型用來約束集合中元素的類型
==================================================================================
異常處理? 容錯性
try{
插卡
輸入密碼和金額2000
余額-=2000
吐錢2000元
catch(吐錢異常 e){
余額+=2000
}
finally{
退卡
}
Throwable? 異常 錯誤父類
? |-- Error? ? 錯誤? 嚴重? 無法避免? 無法處理
? |-- Exception 異常? 可以處理
? ? ? ? ? |-- RuntimeException 及其子類? 未檢查異常 可以避免? 可處理可不處理
? ? ? ? ? |-- 非RuntimeException? ? ? ? 已檢查異常 無法避免? 必須處理
throw : 拋出一個異常? 等同于return語句?
異常的處理:
1.聲明拋出 throws? ? 聲明如果有異常,就向上拋出,由上級方法處理
2.捕獲異常 try-catch
? ? ? try - catch
? ? ? try - catch - finally? finally:無論如何都會執(zhí)行的代碼 往往用于釋放資源
? ? ? try - finally?
方法覆蓋 (Override)
子類用特殊的方法實現替換掉父類繼承給它的方法實現
訪問修飾符相同或更寬,返回值類型,方法名,參數表相同,
子類不能比父類拋出更多的異常
-------------------------------------------------------------------------------------------------------------------------------------------------
===============================================================================
I/O? ? 輸入/輸出?
流? 用來傳輸數據的對象
流的方向:輸入流/輸出流
數據單位:字節(jié)流/字符流
流的功能:節(jié)點流/過濾流? 節(jié)點:實際負責傳輸數據? 過濾:為節(jié)點流增強功能
1.創(chuàng)建節(jié)點流
2.封裝過濾流
3.讀寫數據
4.關閉流
字節(jié)流
InputStream/OutputStream? 字節(jié)流的父類? 抽象類
FileInputStream/FileOutputStream 文件字節(jié)流? 節(jié)點流
write(int a):寫一個字節(jié)
write(byte[] bs):寫一個字節(jié)數組
write(byte[] bs,int start , int length):寫字節(jié)數組中的一段
read():讀一個字節(jié)
read(byte[] bs):讀滿字節(jié)數組? 返回值:讀入的字節(jié)個數
read(byte[] bs,int start,int length):讀滿字節(jié)數組中的一段
DataInputStream/DataOutputStream? 讀寫8種基本類型和String
BufferedInputStream/BufferedOutputStream 緩沖流 提高I/O效率
? ? ? ? ? ? PrintStream? 緩沖輸出流? System.out :PrintStream類的對象
ObjectInputStream/ObjectOutputStream 讀寫8種基本類型,讀寫Object
? ? ? ?
對象序列化:利用I/O流傳輸對象
只有實現了Serializable接口的對象才能序列化
用transient修飾的屬性為臨時屬性,不參與序列化
字符的亂碼:編碼方式和解碼方式不統(tǒng)一
ASCII 美國
ISO8859-1 西歐
GB2312/GBK? 簡體中文?
Big5? 繁體
Unicode UTF-8 UTF-16(char類型的編碼方式)
字符流
Reader/Writer? 字符流的父類? 抽象類
FileReader/FileWriter 節(jié)點流 讀寫文件
BufferedReader/BufferedWriter 緩沖流
? ? ? ? ? ? ? PrintWriter
?
InputStreamReader/OutputStreamWriter 橋轉換? 字節(jié)流 --> 字符流
在橋轉換時,可以指定編解碼方式
JSON : 對象的統(tǒng)一字符串格式 {"name":"suns","age":30,"score":80.0}
Gson.jar Google提供的拼裝和解析JSON字符串的API
File 代表磁盤上的文件或目錄
exist():判斷文件是否存在
createNewFile():創(chuàng)建新文件
mkdir():創(chuàng)建新目錄
delete(): 刪除文件或空目錄
isDirectory():判斷File對象代表的是不是目錄
isFile():判斷File對象代表的是不是文件
listFiles():獲得目錄中所有內容 返回值:File[]
=======================================================================
視頻16
代碼消亡的原因不是需求變化,而是不斷更改,最后沒有邏輯悼做。
?
?