前面一課說了簡單的整型資料和浮點型資料,但是沒有說char字元型別,今天我們來說說char字元型別。
【Java Char型】
在Java中提供了字元型別,與C/C++類似,Java中字元是經過編碼的;Exp: 編碼值==65的字元是'A';
在Java中,使用的是Unicode編碼格式。通常情況下,我們認為Unicode是16 bit的編碼規則。
但是很多童鞋們,還是不明白這個東西,我自己也有點迷糊。下面是我摘錄的部分度娘知道的回答:
如果按照編碼規則來看,這個賦值是相容的。 輸出的時候系統是根據“數值”的型別來判斷的,正如上面說的,當用
System.out.println(numchar+4);
這裡會輸出的是什麼呢?我們可以看一下:
/* This program try to test the CHAR data type */ public class CharTest { public static void main(String[] args) { char charTestVar=4; System.out.println(charTestVar+4); } }
輸出如下所示:
而下面的程式段:
/* This program try to test the CHAR data type */ public class CharTest { public static void main(String[] args) { char charTestVar=4; System.out.println(charTestVar+4); System.out.println(charTestVar); } }
輸出如下所示:
這是為什麼呢?我們知道在表示式計算過程中:會進行型別轉換,通常是向數值範圍方向大的轉;因此第一段程式碼輸出是8,而第二段程式碼輸出的是8和四方形。
【Java 控制檯輸入流】
在Java類庫中System.out 類在java.lang包中定義,這是一個預設包含的包。而在Java中輸出資料不是這樣的,在需要從控制檯輸入資料的時候,則需要
引用Java提供的類庫包,這個與C語言一樣(C語言通過系統提供的庫函式實現輸入和輸出)。
在Java中用Scanner可以實現控制檯資料的輸入,Scanner是一個類,通過類的建構函式構造物件,然後通過類的方法(類似C++中的成員函式)來實現
資料的讀取。
構造Scanner物件語法: Scanner objectIdentify=new Scanner(System.in);
在使用這個類的時候需要匯入: java.util包,其語法如下:
import java.util.*;
這裡需要注意一點:因為import是完整的java語句,因此後面的分號不能少。
下面我們看一段簡單的程式碼如何實現資料的輸入:
/* This program test scaner */ import java.util.*; public class ScanerIn { public static void main(String[] args) { Scanner GetData=new Scanner(System.in); System.out.print("Please enter you name:"); System.out.println("You name is:"+GetData.nextLine()); } }
這段程式碼執行的結果如下所示:
Scanner物件提供了很多不同的方法來輸入不同的資料型別:
1、Scanner (InputStream In)
用給定的輸入流建立一個Scanner物件
2、String nextLine()
讀取輸入的下一行內容,並儲存為String物件
3、String next()
讀取輸入的下一個單詞,單詞以空白符分隔,空格、製表符算空白符(blank charecter)
4、int nextInt()
讀取輸入的下一個整型數值
5、doublet nextDouble()
讀取輸入的下一個浮點數值
6、boolean hasNext()
檢測輸入流中是否還有其他單詞
7、boolean hasNextInt()
檢測輸入流中是否還有整數
8、boolean hasDouble()
檢測輸入流中是否還有浮點數值
下面我來測試一下這寫類的方法:
/* This program test scaner */ import java.util.*; public class ScanerIn { public static void main(String[] args) { Scanner GetData=new Scanner(System.in); System.out.print("Please enter you name:"); System.out.println("You name is:"+GetData.nextLine()); System.out.print("Now we have got you name,Can we get you age:"); System.out.println("Your age is:"+GetData.nextInt()); System.out.print("Can you show the expect salary:"); System.out.println("Your expect salary is:"+GetData.nextDouble()); if(GetData.hasNext()) System.out.println("You hava finish you input data!!!"); } }
程式執行過程如下所示:
這裡我有一點迷惑?那就要if子句執行過程和我想象的不一樣。
【Java 控制檯密碼輸入】
如上面的測試一樣,我們知道,在console輸入中利用Scanner物件輸入的時候,是明文輸入的,有時候我們需要輸入密碼,很顯然,密碼不能用明文
進行輸入,否則就失去了保密的作用;考慮這一點,Java提供了另外一種輸入方式來實現密碼的輸入。
在Java中利用Console類實現密碼的輸入。其使用方法如下:
//首先利用Console類構造一個物件
Console CodeInput=System.console
String UserName=CodeInput.readLine();
String PassWord=CodeInput.readPassword();
例項程式碼如下所示:
Console CodeInput=System.console(); String UserName; char[] Password; UserName=CodeInput.readLine("Enter your name:"); Password=CodeInput.readPassword("Enter the password:");
這段程式碼執行過程如下圖所示:
這樣的話,明文就不顯示,並且Java繼承了Unix/Linux的特徵在輸入密碼的時候不顯示*或者其他掩碼符號。
這裡有一點需要注意:如果要使用Console類,必須匯入java.io.Console; 否則不能使用;同時object.readPassword()方法返回的值是陣列型別,不能用String物件
儲存,否則會報錯。如下所示:
【Java 讀取檔案內容】
和其他程式設計語言一樣,Java也提供了讀寫檔案的機制,與C語言不一樣的是,C語言讀寫檔案非常麻煩,而在Java中通過前面所介紹的Scanner物件就可以實現檔案的讀寫。
在使用前需要構造Scanner檔案物件。如下所示:
Scanner FileIn=new Scanner(new File("test.txt"));
這樣就構造了一個檔案輸入輸出物件,通過Scanner檔案物件就可以進行檔案的讀寫。
為了防止檔案讀寫“指標”無指向,在檔案讀寫語句中,必須進行異常捕捉;否則在編譯的過程中會報沒有進行異常處理。
因為異常型別的處理我還沒有深入瞭解,因此這裡就不多說了,以後有機會再說。
下面我沒來看一下檔案讀取的程式碼:
/* This program test scaner */ import java.util.*; import java.io.Console; import java.io.File; public class ScanerIn { public static void main(String[] args) { /* //Scanner 物件測試 Scanner GetData=new Scanner(System.in); System.out.print("Please enter you name:"); System.out.println("You name is:"+GetData.nextLine()); System.out.print("Now we have got you name,Can we get you age:"); System.out.println("Your age is:"+GetData.nextInt()); System.out.print("Can you show the expect salary:"); System.out.println("Your expect salary is:"+GetData.nextDouble()); //Console物件測試 Console CodeInput=System.console(); String UserName; char[] Password; UserName=CodeInput.readLine("Enter your name:"); Password=CodeInput.readPassword("Enter the password:"); */ //File物件測試 try { Scanner FileIn=new Scanner(new File("TestText.txt")); while(FileIn.hasNext()) System.out.println(FileIn.nextLine()); }catch(Exception e) { System.out.println(e); } /* if(!GetData.hasNext()) System.out.println("You hava finish you input data!!!"); */ } }
這個程式碼的執行過程如下所示:
仔細看上面的執行過程可以發現,如果沒有檔案我們就不能讀取檔案,報檔案找不到的異常,要是不用try結構捕捉的話,那麼我們的程式執行過程中就會崩潰。如果
沒有檔案:TextText.txt,執行結果就如下所示:
可以看到Scanner物件,不能建立檔案,那麼我麼要如何建立檔案呢?這個就等到下次再來說吧,我們再來看看檔案的寫入。
【Java 寫內容到檔案】
在Java中寫檔案和讀取檔案內容一樣容易實現。
為了實現“寫”檔案,我們需要構造一個PrintWriter物件;如下所示:
PrintWriter FileOut=new PrintWriter("filename.txt");
這個物件需要引用java.io.PrinterWriter物件,為了省略很多的引用,通常我們引用:
java.io.*;
即可,但是我建議在不熟悉的時候,引用什麼物件,則匯入不同的物件,這樣可以增加對類庫的認識。
我們來看一段例項程式碼:
/* This program test scaner */ import java.util.*; import java.io.Console; import java.io.File; import java.io.PrintWriter; import java.io.*; public class ScanerIn { public static void main(String[] args) { /* //Scanner 物件測試 Scanner GetData=new Scanner(System.in); System.out.print("Please enter you name:"); System.out.println("You name is:"+GetData.nextLine()); System.out.print("Now we have got you name,Can we get you age:"); System.out.println("Your age is:"+GetData.nextInt()); System.out.print("Can you show the expect salary:"); System.out.println("Your expect salary is:"+GetData.nextDouble()); //Console物件測試 Console CodeInput=System.console(); String UserName; char[] Password; UserName=CodeInput.readLine("Enter your name:"); Password=CodeInput.readPassword("Enter the password:"); */ /****************** //File物件測試 try { Scanner FileIn=new Scanner(new File("TestText.txt")); while(FileIn.hasNext()) System.out.println(FileIn.nextLine()); }catch(Exception e) { System.out.println(e); } **************/ //寫檔案測試 try { PrintWriter FileOut=new PrintWriter(new FileWriter("TestText.txt")); FileOut.println("Hello wellcome to my word"); FileOut.println("This is my fisrt to write a file via java"); FileOut.println(":)"); FileOut.close(); }catch(Exception e) { System.out.println(e); } //測試寫入檔案是否成功,還測試,改寫是追加還是全部重寫 try { Scanner FileIn=new Scanner(new File("TestText.txt")); while(FileIn.hasNext()) System.out.println(FileIn.nextLine()); }catch(Exception e) { System.out.println(e); } /* if(!GetData.hasNext()) System.out.println("You hava finish you input data!!!"); */ } }
上面程式碼的執行結果如下:
這裡可以看到程式成功執行了。要點: 我們可以看到重複的匯入庫是不會報錯的。
而且這樣的寫入檔案時全部覆蓋,會將原來的檔案全部覆蓋掉。如果不能覆蓋原來的內容,則需要進行處理;我搜到了一段程式碼如下,可供大家參考:
import java.io.*; import java.util.*; public class TestPrintWriter { public static void main(String[] args)throws IOException { File file=new File("temp2.txt"); if(file.exists()) { System.out.println("File temp.txt already exists."); System.exit(0); } PrintWriter output=new PrintWriter(new FileWriter(file)); for(int i=0;i<10;i++) { output.print((int)(Math.random()*100)+" "); } output.close(); BufferedReader input=new BufferedReader(new FileReader("temp2.txt")); int total=0; String line; while((line=input.readLine())!=null) { StringTokenizer tokens=new StringTokenizer(line); while(tokens.hasMoreTokens()) total+=Integer.parseInt(tokens.nextToken()); } output=new PrintWriter(new FileWriter(file,true)); output.printf("\n\n"); output.printf("Total is %d ",total); output.close(); } }
今天就寫到這裡了,希望這次可以將這本書從頭看到尾,然後根據學習進度寫完整本書的總結。