Java基礎(八)
(1)HashMap集合本身基於哈希表
它可以保證鍵的唯一性(Map都是針對鍵有效)
HashMap<String,String>
- String:人的ID編號
-
String:人的姓名
HashMap<Integer,String> - Integer:年齡
-
String:姓名
HashMap<String,Student>
- String:學號
- Student:學號對應一個學生:有姓名和年齡
HashMap<Student,String> 鍵:是一種自定義類型
Student:學生:年齡和姓名
String:朝代 -
如果對象的成員變量值一樣,認為同一個人.
哈希表:依賴於兩個方法 hashCode() ,equals()方法
(2)LinkedHashMap<K,V>
LinkedHashMap<K,V>:是Map接口基於哈希表和鏈接列表實現的哈希表保證鍵的唯一性 鏈接列表保證元素有序性(存儲和取出一致)
(3)
TreeMap基於紅黑樹結構的Map接口的實現(4)線程安全的類:
- StringBuffer :字符串緩沖區
- Vector :List集合
- Hashtable :Map集合的
(5)Collection
Collectio 和Collections的區別: - Collection:頂層次單列集合的根接口,它是一個集合,是一個接口
- Collections:是針對集合操作的工具類,有一些功能:隨機置換,集合裏面的二分查找,將集合的元素進行反轉
-
*集合的二分查找
- public static <T> int binarySearch(List<T> list, T key)
- static T max(Collection coll):獲取集合中的最大值
- public static void reverse(List<?> list):將集合中的元素順序反轉
- public static void shuffle(List<?> list):將集合中的元素打亂
- public static void sort(List<T> list)
(1) 當程序出現一些問題的,可以是嚴重問題,可以是一種異常,將這些通常為Throwable
Throwable 類是 Java 語言中所有錯誤或異常的超類 - Throwable
- error
- exception
-
舉例:
張三去山上旅行
1)張三騎車去旅行,山路崩塌了,不能前行了----->不可抗力因素
2)張三騎車去旅行,騎著發現輪胎沒氣了------->需要檢查的問題
3)騎著,山路有石子,他就非得往石子上騎,導致車胎沒氣了---->自己原因造成的,no zuo no die不抗力因素----->error: 屬於嚴重問題 內存溢出了 (加載頁面中大量圖片的時候,程序會掛掉---使用第三方的框架去處理:ImageLoader)
- 異常:
- 編譯時期異常:只要出現的不是運行時期異常,統稱為編譯時期 日期的文本格式---解析 java.util.Date類型:ParseException:解析異常
- 編譯時期異常:開發者必須處理!
- 運行時期異常:RuntimeException
-
編譯通過了,但是開發者代碼不嚴謹(NullPointerExceptino等等...)
(2)異常的處理分為兩種:
1)try...catch...finally (標準格式) :捕獲異常
2)throws ... 拋出異常變形格式...
try...catch...
try...catch...catch...
catch....try{
一些代碼
try裏面的代碼越少越好
代碼包含了可能會出現問題的代碼
}catch(異常類 異常類對象){
try出現異常了,描述的異常剛好就是catch的異常類,就會執行catch裏面代碼
//處理異常
}
(3)如何處理多個異常
兩個或兩個以上的異常的時候怎麽辦?try{
可能出現問題的代碼
}catch(異常類 對象名){
處理異常的代碼
}try{
可能出現問題的代碼
int[] arr = {1,2,3} ;
Sop(arr[3]);
int a = 10 ;
int b =0 ;
Sop(a/b) ;}catch(異常類名1 對象名1){
//異常處理
}catch(異常類名2 對象名2(){//異常處理
}
dk7以後出現另一種方式處理多個異常
try{可能出現問題的代碼;
}catch(異常類名1 | 異常類名2 |... 對象名){
處理異常
}
(4)編譯時期異常和運行時期異常的區別?編譯時期:開發者必須進行顯示處理,不處理,編譯不能通過,
運行時期異常:無需進行顯示處理,可以像編譯時期一樣進行處理處理異常的第二種方式:使用throws 拋出異常 (跟在方法的後面)
xxx 返回值 方法名() throws 異常類名{
}
標準格式 try{ ... }catch(異常類 對象){ // 異常處理 } 執行try裏面的代碼
,如果出現了問題,它會通過代碼的問題創建一個異常對象,然後通過異常對象和catch裏面的異常類是否一致
如果一致的情況,就會出現catch裏面的代碼,執行Throwable裏面的方法 - public String getMessage() :消息字符串
- public String toString(): 異常的簡短描述 ":
-
":由冒號和空格組成
- public void printStackTrace():返回值void 直接調用, 包含了消息字符串,還有": "
- 信息描述,具體出現異常的代碼定位以及定位的源碼上
(5)throw:表示也是拋出異常,拋出的一個異常對象 (throw new 異常類名() :匿名對象的方式)
try...catch...finally - finally語句體是一定會執行的,除非是Jvm退出了
(6)自定義異常類,兩種方式 - 1)自定義一個類,這個繼承自Exception
- 2)繼承RuntimeException
異常中的註意事項:
子類繼承父類的時候的註意事項 - 1)子類重寫父類的方法的時候,子類的方法的拋出的異常必須要麽是父類的方法異常一樣,要麽是父類方法異常的子類
- 2)子類重寫父類方法的時候,如果父類中的這個方法沒有拋出異常,那麽子類重寫的這個方法也不能拋出異常,只能try...catch
(三)File類
(1)File類:表示文件或者目錄的路徑的抽象表現形式. IO流就是對文件進行操作的 - public File(String pathname):表示pathname的抽象路徑表現的形式 (開發中使用這種方式)
- public File(String parent,String child)
根據 parent 路徑名字符串和 child 路徑名字符串創建一個新 File 實例
public File(File parent, String child):根據一個file對象和一個文件路徑來構造File實例
(2)跟創建相關的功能: - public boolean createNewFile():創建文件,當文件不存在的時候,創建此抽象路徑下的文件
- public boolean mkdir():創建一個文件夾,如果文件夾存在,不創建
- public boolean mkdirs():創建文件夾,如果父目錄不存在,會創建此目錄
(3)刪除功能 -
public boolean delete() :刪除文件或者文件夾(目錄不能是空的) :逐一刪除文件或者目錄的
如果創建一個文件/目錄,沒有寫盤符的時候,會創建在哪裏呢?
會創建在當前項目路徑下
(4)絕對路徑:c:\xxx\xxx.txt
相對路徑:a.txt回想:html頁面(以後jsp頁面)
後臺地址 :URI 統一資源定位符<form action="http://localhost:8080/Web工程名稱/後臺(XXX.servlet)" metod="提交方式"> 用戶名:<input type="text" name="username"/> 密碼:<input type ="password" name="pwd"/> <input type ="hidden" name="hid"/> <img src="圖片的路徑"/> </form>
頁面的重定向/轉發
response.sendRedirect("/工程名稱/xxx.jsp") ;File 的重命名功能:
- public boolean renameTo(File dest)重新命名此抽象路徑名表示的文件。
如果路徑名一致的情況,那麽只是重命名
如果兩次路徑名稱不一致,那麽不只是重命名,並且剪切
(5)File類的判斷功能 - public boolean isDirectory():判斷是否是文件夾
- public boolean isFile() :判斷是否是文件
- public boolean canRead(): 是否可讀
- public boolean canWriter():是否可寫
- public boolean exists() :是否存在
- public boolean isHidden():是否是隱藏文件
(6)File類的獲取功能: - public String getAbsolutePath():獲取抽象文件的絕對路徑
- public String getPath():獲取相對路徑的字符串
- public String getName()返回由此抽象路徑名表示的文件或目錄的名稱
- public long length()返回由此抽象路徑名表示的文件的長度。
- public long lastModified():文件最後一次被修改的時間(時間毫秒值)
(7)File的高級功能 - public String[] list() :獲取當前某個路徑下的所有的文件夾以及文件名稱的字符串數組
- public File[] listFiles() :獲取當前某個路徑下所有的文件夾以及文件的File數組
(四)IO流
(1)IO:在設備和設備之間的一種數據傳輸!
IO流的分類:
按流的方向分: - 輸入流: 讀取文件 (e:\a.txt):從硬盤上文件讀取出來後輸出這個文件的內容
- 輸出流: 寫文件:將e:\a.txt 內容讀出來--->寫到f盤下
按數據的類型劃分:
字節流 - 字節輸入流:InputStream :讀取字節
- 字節輸出流:OutputStream :寫字節
字符流 - 字符輸入流:Reader :讀字符
- 字符輸出流:Writer :寫字符
(2)FileOutputStream
關於字節輸出流寫數據的方法 - public void write(int b):一次寫一個字節
- public void write(byte[] b) :一次寫一個字節數組
- public void write(byte[] b, int off,int len):一次寫一部分字節數組
問題:如何末尾追加數據呢 - public FileOutputStream(File file, boolean append):指定為true,末尾追加數據
(3)FileInputStream
構造方法: public FileInputStream(String name)讀數據方式: - public abstract int read():一次讀取一個字節
-
public int read(byte[] b):一次讀取一個字節數組 (讀取實際的字節數)
(五)遞歸
遞歸:只的是方法調用方法本身的一種現象
Math類:max() 方法 Math.max(10,Math.max(15,20)); 方法嵌套舉例
方法遞歸:public void show(int n){ if(n<0){ System.exit(0) ;//jvm退出了 } System.out.println(n) ; show(n--) ; }
方法遞歸的三個必要條件:
- 1)方法遞歸必須有出條件
- 2)必須滿足一些規律
- 3)一定要寫方法
-
*註意:構造方法不存在方法遞歸的
舉例
從前有座山,山裏有個廟,廟裏有個老和尚和小和尚,老和尚給老和尚講了一個故事是:
從前有座山,山裏有個廟,廟裏有個老和尚和小和尚,老和尚給老和尚講了一個故事是:
從前有座山,山裏有個廟,廟裏有個老和尚和小和尚,老和尚給老和尚講了一個故事是:
從前有座山,山裏有個廟,廟裏有個老和尚和小和尚,老和尚給老和尚講了一個故事是:
條件結束:山塌了,或者和尚掛了
Java基礎(八)