java expextion_Java(20~24)
1、Collection中的集合稱為單列集合,Map中的集合稱為雙列集合(鍵值對集合)。
2、Map常用方法:map.put()? ?map.get()? ?map.remove()? ?map.keySet()? //關系對象圖 ,可用于遍歷,一旦有遍歷,就會有迭代器。? ?打印set 集合, 返回集合所有鍵的數組。map.getClass()? ?//返回類的全名。它是Object類的內部類
。
3、八種基本類型的包裝類? ?int? =>? Integer? ?;? ?double? =>? Double 。 基本數據類型只能干加減乘除,別的事情干不了,所以就有了它的包裝類。需求:年齡需轉成字符串,考試成績要轉為double類型。
包裝類提供多種方法實現對數據的操作。? parseInt()? ?//? 將字符串參數作為有符號的十進制整數進行解析,也就是字符串轉int類型。
4、map接口里面的靜態接口Entry? (好比靜態方法一樣),接口中的內部成員,如果不設置非靜態的話,就要對象去調用,而接口是不能建立對象的,所以用靜態調用。
5、1、泛型的嵌套: Set> set = map.entrySet();? ?// 接口的內部接口。類似類中的內部類。2、迭代Set集合:Iterator> it = set.irerator();
6、增強 for 的底層也是迭代器iterator,所以增強 for 的寫法只是簡化代碼量。
7、面試題:增強for 能不能遍歷 Map 集合? ?? ?//? 不能。
8、增強 for 間接遍歷 Map 集合。
9、HashMap集合的兩種遍歷方法? (內在含義都是轉set單列結合才能遍歷)
10、重點。HashMap 存儲自定義對象 作為鍵出現,保證鍵 的 唯一性,就需要重寫 hashCode 和 equals 方法。sources。
11、LinkHashMap 保證存儲元素順序的一致? 這是與HashMap的區別。兩者都是線程不安全的集合,因為運行速度快。
12、Map 接口實現類 Hashtable? 。線程安全,運行速度慢。
13、需要記住Map集合的一些特點。HashMap 允許存儲 null 鍵 和 null 值,null 類型 當值當鍵 都沒問題。而Hashtable 不允許存儲 null 值 與 null 鍵。
14、Hashtable 在 1.2起就 逐漸被拋棄,但它的孩子 Properties 依然 活躍在開發舞臺。Properties? 表示一個持久的屬性集??杀4嬖诹髦谢驈牧髦屑虞d。(集合都是內存的東西,一旦程序結束,就廢了,但IO流可以和內存結合起來,把數據集合變成一個永久性的集合存在)。
15、java sdk 1.5新特性==》靜態導入的作用:減少開發的代碼量。
16、java sdk 1.5新特性==》可變參數:前提,數據類型需要確定,然后參數個數任意。
17、可變參數語法: 數據類型... 變量名。?可變參數,本質,就是一個數組a 。
18、可變參的注意事項:1、一個方法只能有一個可變參數。2、可變參數必須寫在列表的最后一位。無敵可變參 Object...o
19、Collection是集合的根接口,而Collections 是集合的工具類。
20、List集合 ,盡量寫成多態形式。擴展性強(vector,LinkedList 、ArrayList)。
21、Collections.binarySearch(arr,5)? //? 5代表 集合元素? ,返回該元素的索引。Collections.binarySearch(arr,16)? //? 16代表 非集合元素,返回值:-(集合長度+1)。
22、Collections.shuffle(list)? // 對集合元素進行隨機排列。
23、集合的嵌套:Map集合 存儲 Map集合。
24、Map的Entry子接口,泛型的嵌套,在集合的嵌套遍歷之中需要注意。
25、throwable超類。thorows IOException 。
FileInputStream :字節輸入流? (讀取操作) ;?FileOutputStream :字節輸出流? (寫入操作)? 第二參數是布爾值,文件追加內容。
定義一個字節數組緩沖區:byte[] buf = new byte[fis.available()];? 注:關閉資源? fis.close();
26、Reader,讀取字符流的抽象超類。
27、FileReader 讀取包含中文的文件。看下面拉:
//輸出的字符對應的編碼值? ? ? ? ?//輸出字符本身
// System.out.println(ch); ? ? System.out.print((char)ch);
28、fw.flush()? // 刷新該流的緩沖。
29、flush():將流中的緩沖區緩沖的數據刷新到目的地中,刷新后,流還可以繼續使用。
close():關閉資源,但在關閉前會將緩沖區中的數據先刷新到目的地,否則丟失數據,然后在關閉流。流不可以使用。如果寫入數據多,一定要一邊寫一邊刷新,最后一次可以不刷新,由close完成刷新并關閉。
packagecn.laoda.zhaoda;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;public classCopyTextFileTest {public static void main(String[] args) throwsIOException{
copyTextFile();
}public static void copyTextFile() throwsIOException {//1,明確源和目的。
FileReader fr = new FileReader("g:\\cn.txt");
FileWriter fw= new FileWriter("g:\\copy.txt");//2,為了提高效率。自定義緩沖區數組。字符數組。
char[] buf = new char[1024];int len = 0;while((len=fr.read(buf))!=-1){
fw.write(buf,0,len);//保留疑問:每次寫入的起始位置都是?
}/*2,循環讀寫操作。效率低。
int ch = 0;
while((ch=fr.read())!=-1){
fw.write(ch);
}*/
//3,關閉資源。
fw.close();
fr.close();
}
}
30、IO讀寫? =>? 類總結:
31、把字符轉成字節的轉換流對象:OutputStreamWriter 。
public classoutputStreamWriterDemo {public static void main(String[] args) throwsException{
outputStreamWriterDemo();
}public static void outputStreamWriterDemo() throwsException {//創建與文件關聯的字節輸出流對象
FileOutputStream fos = new FileOutputStream("g:\\cn8.txt");//創建可以把字符轉成字節的轉換流對象,并指定編碼
OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");//調用轉換流,把文字寫出去,其實是寫到轉換流的緩沖區中
osw.write("你好");//寫入緩沖區。
osw.close();
}
}
32、OutputStreamWriter和InputStreamReader是字符和字節的橋梁:也可以稱之為字符轉換流。字符轉換流原理:字節流+編碼表。
public classInputStreamReaderDemo {public static void main(String[] args) throwsIOException {//演示字節轉字符流的轉換流
readCN();
}public static void readCN() throwsIOException{//創建讀取文件的字節流對象
InputStream in = new FileInputStream("c:\\cn8.txt");//創建轉換流對象//InputStreamReader isr = new InputStreamReader(in);這樣創建對象,會用本地默認碼表讀取,將會發生錯誤解碼的錯誤
InputStreamReader isr = new InputStreamReader(in,"utf-8");//使用轉換流去讀字節流中的字節
int ch = 0;while((ch = isr.read())!=-1){
System.out.println((char)ch);
}//關閉流
isr.close();
}
}
33、public BufferedOutputStream(OutputStream out)創建一個新的緩沖輸出流,以將數據寫入指定的底層輸出流。
34、字符緩沖輸入流 :BufferedReader (從字符輸入流中讀取文本,緩沖各個字符,從而實現字符、數組和行的高效讀取) 。? ?字符緩沖輸出流: BufferedWriter? (將文本寫入字符輸出流,緩沖各個字符,從而提供單個字符、數組和字符串的高效寫入)? ? 作用:完成文本數據的高效的寫入與讀取的操作。
35、BufferedWriter? ====>? ??void newLine() 根據當前的系統,寫入一個換行符。
/** BufferedWriter 字符緩沖輸出流
* 方法
* public void newLine()寫入一個行分隔符
*
* 需求: 通過緩沖輸出流寫入數據到文件
* 分析:
* 1,創建流對象
* 2,寫數據
* 3,關閉流
**/
public classBufferedWriterDemo {public static void main(String[] args) throwsIOException {//創建流//基本字符輸出流
FileWriter fileOut = new FileWriter("file.txt");//把基本的流進行包裝
BufferedWriter out = newBufferedWriter(fileOut);//2,寫數據
for (int i=0; i<5; i++) {
out.write("hello");
out.newLine();
}//3,關閉流
36、BufferedReader? ?==== >? ?public String readLine() 讀取一個文本行,包含該行內容的字符串,不包含任何行終止符,如果已到達流末尾,則返回 null。
/** BufferedReader 字符緩沖輸入流
*
* 方法:
* String readLine()
* 需求:從文件中讀取數據,并顯示數據*/
public classBufferedReaderDemo {public static void main(String[] args) throwsIOException {//1,創建流
BufferedReader in = new BufferedReader(new FileReader("file.txt"));//2,讀數據//一次一個字符//一次一個字符數組//一次讀取文本中一行的字符串內容
String line = null;while( (line = in.readLine()) != null){
System.out.println(line);
}//3,關閉流
in.close();
}
}
37、使用字符緩沖流完成文本文件的復制
/** 采用高效的字符緩沖流,完成文本文件的賦值
*
* 數據源: file.txt
* 目的地: copyFile.txt
*
* 分析:
* 1,指定數據源, 是數據源中讀數據,采用輸入流
* 2,指定目的地,是把數據寫入目的地,采用輸出流
* 3,讀數據
* 4,寫數據
* 5,關閉流*/
public classCopyTextFile {public static void main(String[] args) throwsIOException {//1,指定數據源, 是數據源中讀數據,采用輸入流
BufferedReader in = new BufferedReader(new FileReader("file.txt"));//2,指定目的地,是把數據寫入目的地,采用輸出流
BufferedWriter out = new BufferedWriter(new FileWriter("copyFile.txt"));//3,讀數據
String line = null;while ( (line = in.readLine()) != null) {//4,寫數據
out.write(line);//寫入換行符號
out.newLine();
}//5,關閉流
out.close();
in.close();
}
}
~~~~~~·? ?~~~~~~~~····~~~~~····?~~~~~~·? ?~~~~~~~
38、IO流中對象很多,解決問題(處理設備上的數據時)到底該用哪個對象呢? 把IO流進行了規律的總結(四個明確):
l? 明確一:要操作的數據是數據源還是數據目的。
源:InputStream??? Reader
目的:OutputStream Writer
先根據需求明確要讀,還是要寫。
l? 明確二:要操作的數據是字節還是文本呢?
源:
字節:InputStream
文本:Reader
目的:
字節:OutputStream
文本:Writer
已經明確到了具體的體系上。
l? 明確三:明確數據所在的具體設備。
源設備:
硬盤:文件? File開頭。
內存:數組,字符串。
鍵盤:System.in;
網絡:Socket
目的設備:
硬盤:文件? File開頭。
內存:數組,字符串。
屏幕:System.out
網絡:Socket
完全可以明確具體要使用哪個流對象。
l? 明確四:是否需要額外功能呢?
額外功能:
轉換嗎?轉換流。InputStreamReader OutputStreamWriter
高效嗎?緩沖區對象。BufferedXXX
InputStream
FileInputStream
BufferedInputStream
OuputStream
FileOutputStream
BufferedOuputStream
Writer
OutputStreamWriter
FileWriter
BufferedWriter
Reader
InputStreamReader
FileReader
BufferedReader
~~~~~~·? ?~~~~~~~~····~~~~~····?~~~~~~·? ?~~~~~~~
總結:
l? 字節流
字節輸入流 InputStream
FileInputStream 操作文件的字節輸入流
BufferedInputStream高效的字節輸入流
字節輸出流 OutputStream
FileOutputStream 操作文件的字節輸出流
BufferedOutputStream 高效的字節輸出流
l? 字符流
字符輸入流 Reader
FileReader 操作文件的字符輸入流
BufferedReader 高效的字符輸入流
InputStreamReader 輸入操作的轉換流(把字節流封裝成字符流)
字符輸出流 Writer
FileWriter 操作文件的字符輸出流
BufferedWriter 高效的字符輸出流
OutputStreamWriter 輸出操作的轉換流(把字節流封裝成字符流)
l? 方法:
讀數據方法:
read() 一次讀一個字節或字符的方法
read(byte[]? char[]) 一次讀一個數組數據的方法
readLine() 一次讀一行字符串的方法(BufferedReader類特有方法)
readObject() 從流中讀取對象(ObjectInputStream特有方法)
寫數據方法:
write(int) 一次寫一個字節或字符到文件中
write(byte[] char[]) 一次寫一個數組數據到文件中
write(String) 一次寫一個字符串內容到文件中
writeObject(Object ) 寫對象到流中(ObjectOutputStream類特有方法)
newLine() 寫一個換行符號(BufferedWriter類特有方法)
l? 向文件中寫入數據的過程
1,創建輸出流對象
2,寫數據到文件
3,關閉輸出流
l? 從文件中讀數據的過程
1, 創建輸入流對象
2, 從文件中讀數據
3, 關閉輸入流
l? 文件復制的過程
1, 創建輸入流(數據源)
2, 創建輸出流(目的地)
3, 從輸入流中讀數據
4, 通過輸出流,把數據寫入目的地
5, 關閉流
39、Error:錯誤的發生往往都是系統級別的問題,都是jvm所在系統發生的,并反饋給jvm的。我們無法針對處理,只能修正代碼。
40、Exception:指程序在編譯、運行期間發生了某種異常(XxxException),我們可以對異常進行具體的處理。若不處理異常,程序將會結束運行。
41、異常:
public classEEX {public static voidmain(String[] args) {int[] arr = {1,2,3};
getElement(arr,5);
}public static int getElement(int[] arr,int index) throwsNullPointerException, ArrayIndexOutOfBoundsException {if(arr==null){throw new NullPointerException("arr指向的數組不存在");
}if(index<0 || index>=arr.length){throw new ArrayIndexOutOfBoundsException("錯誤的角標,"+index+"索引在數組中不存在");
}int element =arr[index];returnelement;
}
}
執行結果:=>
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 錯誤的角標,5索引在數組中不存在
at cn.itcast.demo.EEX.getElement(EEX.java:15)
at cn.itcast.demo.EEX.main(EEX.java:7)
42、運行時期異常
RuntimeException和他的所有子類異常,都屬于運行時期異常。NullPointerException,ArrayIndexOutOfBoundsException等都屬于運行時期異常.
運行時期異常的特點:
方法中拋出運行時期異常,方法定義中無需throws聲明,調用者也無需處理此異常。
43、異常重寫注意細節:
1、子類覆蓋父類方法時,如果父類的方法聲明異常,子類只能聲明父類異常或者該異常的子類,或者不聲明。
2、當父類方法聲明多個異常時,子類覆蓋時只能聲明多個異常的子集。
3、當被覆蓋的方法沒有異常聲明時,子類覆蓋時無法聲明異常的。
舉例:父類中會存在下列這種情況,接口也有這種情況
問題:接口中沒有聲明異常,而實現的子類覆蓋方法時發生了異常,怎么辦?
答:無法進行throws聲明,只能catch的捕獲。萬一問題處理不了呢?catch中繼續throw拋出,但是只能將異常轉換成RuntimeException子類拋出。
interfaceInter {public abstract voidmethod();
}class Zi implementsInter {public void method(){ //無法聲明 throws Exception
int[] arr = null;if (arr == null) {//只能捕獲處理
try{throw new Exception(“哥們,你定義的數組arr是空的!”);
}catch(Exception e){
System.out.println(“父方法中沒有異常拋出,子類中不能拋出Exception異?!?;//我們把異常對象e,采用RuntimeException異常方式拋出
throw newRuntimeException(e);
}
}
}
}
44、異常中常用方法:
getMessage方法:返回該異常的詳細信息字符串,即異常提示信息。
toString方法:返回該異常的名稱與詳細信息字符串。
printStackTrace:在控制臺輸出該異常的名稱與詳細信息字符串、異常出現的代碼位置。
45、自定義異常類。=>??編譯時異常繼承Exception,運行時異常繼承RuntimeException。
class NoAgeException extendsException{
NoAgeException() {super();
}
NoAgeException(String message) {super(message);
}
}
// Person類
class Person{
private String name;
private int age;
Person(String name,int age) throws NoAgeException? {
//加入邏輯判斷。
if(age<0 || age>200)?? ??? {
throw new NoAgeException(age+",年齡數值非法");
}
this.name = name;
this.age = age;
}
//定義Person對象對應的字符串表現形式。覆蓋Object中的toString方法。
public String toString()?? {
return "Person[name="+name+",age="+age+"]";
}
}
//測試類
class ExceptionDemo{
public static void main(String[] args) {
try {
Person p = new Person("xiaoming",20);
System.out.println(p);
}
catch (NoAgeException ex){
System.out.println("年齡異常啦");
}
System.out.println("over");
}
}
46、Properties:Map集合的一種,它是Hashtable集合的子集合,它鍵與值都是String類型,它是唯一能與IO流結合使用的集合
方法
load( InputStream in ) 從流所對應的文件中,讀數據到集合中
load( Reader in ) 從流所對應的文件中,讀數據到集合中
store( OutputStream out , String message ) 把集合中的數據,寫入到流所對應的文件中
store( Writer out , String message) 把集合中的數據,寫入到流所對應的文件中
實現文件內容的自動追加
構造方法
FileOutputStream(File file, boolean append)
FileOutputStream(String fileName, boolean append)
FileWriter(File, boolean append)
FileWriter(String fileName, boolean append)
實現文件內容的自動刷新
構造方法
PrintStream(OutputStream out, boolean autoFlush)
PrintWriter(OutputStream out, boolean autoFlush)
PrintWriter(Writer out, boolean autoFlush)
Commons-IO
方法
readFileToString(File file):讀取文件內容,并返回一個String;
writeStringToFile(File file,String content):將內容content寫入到file中;
copyDirectoryToDirectory(File srcDir,File destDir);文件夾復制
copyFileToDirectory (File srcFile,File destFile);文件復制
總結
以上是生活随笔為你收集整理的java expextion_Java(20~24)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 异常管理员_java web在
- 下一篇: java程序员第二语言_惊呆了!Java