1.內部類html
Java支持在一個類中定義另外一個類,這樣的類稱做內部類,包含內部類的類稱爲內部類的外嵌類。java
2.匿名類(被認爲是一個子類去掉聲明後的類體)c++
Bank是類,下列代碼用Bank
的一個子類(匿名類)建立對象。git
new Bank(){ 匿名的類體 }
board.showMess(new OutputAlphabet() //向參數傳遞OutputAlphabet的匿名子類對象 { public void output() { for(char c='α';c<='ω';c++) //輸出希臘字母 System.out.printf("%3c",c); } } );
Example7_2.java的以上即爲使用匿名類的部分。正則表達式
machine.turnOn( new SpeakHello(){ public void speak() { System.out.println("hello,you are welcome!"); } } ); machine.turnOn( new SpeakHello(){ public void speak() { System.out.println("你好,歡迎光臨!"); } } );
3.異常類數組
Java容許定義方法時聲明該方法調用過程當中可能出現的異常,即容許方法調用過程當中拋出異常對象,終止當前方法的繼續執行。
另外,異常對象能夠調用如下方法獲得或輸出有關異常的信息:dom
public String getMessage(); public void printStackTrace(); public String toString();
將可能出現的一場操做放在try部分,一旦try部分拋出異常對象,那麼try部分馬上結束執行,轉向執行相應的catch部分。學習
try{ 可能發生異常的語句 } catch(ExceptionSubClass1 e) { … } catch(ExceptionSubClass2 e) { … }
一個方法在聲明時可使用throws關鍵詞聲明要產生的若干個異常,並在該方法體中具體給出產生異常的操做。以下:設計
public void income(int in,int out) throws BankException { if(in<=0||out>=0||in+out<=0) { throw new BankException(in,out); //方法拋出異常,致使方法結束 } int netIncome=in+out; System.out.printf("本次計算出的純收入是:%d元\n",netIncome); money=money+netIncome; }
4.斷言調試
在代碼調試階段中,斷言語句通常用於程序不許備經過捕獲異常來處理的錯誤。
assert booleanExpression;
assert booleanExpression:messageException;
與上一種相似,,另外的輸出messageException
表達式的值。
java -ea mainClass
啓用斷言語句1. File類
public String getName()
獲取文件的名字。
public boolean canRead()
判斷文件是不是可讀的。
public boolean canWrite()
判斷文件是否可被寫入。
public boolean exits()
判斷文件是否存在。
public long length()
獲取文件的長度(單位是字節)。
public String getAbsolutePath()
獲取文件的絕對路徑。
public String getParent()
獲取文件的父目錄。
public boolean isFile()
判斷文件是不是一個普通文件,而不是目錄。
public boolean isDirectroy()
判斷文件是不是一個目錄。
public boolean isHidden()
判斷文件是不是隱藏文件。
public long lastModified()
獲取文件最後修改的時間。
建立目錄 public boolean mkdir()
public String[] list()
用字符串形式返回目錄下的所有文件。
public File [] listFiles()
用File對象形式返回目錄下的所有文件。
public String[] list(FilenameFilter obj)
用字符串形式返回目錄下的指定類型的全部文件。
public File [] listFiles(FilenameFilter obj)
用File對象形式返回目錄下的指定類型全部文件。
上述兩方法的參數FilenameFilter
是一個接口,該接口有一個方法:
public boolean accept(File dir,String name);
File file=new File("c:\\myletter","letter.txt");
若是c:\myletter目錄中沒有名字爲letter.txt文件,
文件對象file調用方法
public boolean createNewFile();
文件對象調用方法 public boolean delete()
能夠刪除當前文件,
例如:file.delete();
用Runtime 類聲明一個對象( Runtime類在java.lang包)
Runtime ec;
而後使用該類的getRuntime()靜態方法建立這個對象:
ec=Runtime.getRuntime();
ec能夠調用exec(String command)
方法打開本地機的可執行文件或執行一個操做。
2.文件字節輸入流
使用輸入流一般包括4個基本步驟:
(1)設定輸入流的源 (2)建立指向源的輸入流 (3)讓輸入流讀取源中的數據 (4)關閉輸入流。
3.文件字節輸出流
(1)給出輸出流的目的地 (2)建立指向目的地的輸出流 (3)讓輸出流把數據寫入到目的地 (4)關閉輸出流。
4.文件字符輸入、輸出流
(1)Reader類提供的read方法以字符爲單位順序地讀取源中的數據。
int read():
int read(char b[]):
int read(char b[], int off, int len):
void close():
long skip(long numBytes):
(2) Writer流以字符爲單位順序地寫文件,每次調用write方法就順序地向目的地寫入內容。 Writer類有以下經常使用的方法。
void write(int n):
向輸出流寫入一個字符。
void write(byte b[]):
向輸出流寫入一個字符數組。
void write(byte b[],int off,int length):
從給定字符數組中起始於偏移量off處取len個字符寫到輸出流。
void close():
關閉輸出流。
5.緩衝流
(1)BufferedReader
和BufferedWriter
類建立的對象稱做緩衝輸入、輸出流。兩者的源和目的地必須是字符輸入流和字符輸出流。
構造方法:
BufferedReader(Reader in);
BufferedWriter (Writer out);
(2)BufferedReader
和BufferedWriter
類讀寫文件的方法:
readLine()
讀取文本行
write(String s,int off,int len)
把字符串s寫到文件中
newLine();
向文件寫入一個回行符
6.隨機流
使用RandomAccessFile
類來建立一個隨機訪問文件流。RandomAccessFile
類建立的流的指向既能夠做爲源也能夠做爲目的地。
構造方法
RandomAccessFile(String name,String mode) ;
RandomAccessFile(File file,String mode) ;
相關方法:
seek(long a)
定位RandomAccessFile
流的讀寫位置
getFilePointer()
獲取流的當前讀寫位置
7.數組流
(1)字節數組流
字節數組輸入流ByteArrayInputStream
和字節數組輸出流ByteArrayOutputStream
分別使用字節數組做爲流的源和目標。
ByteArrayInputStream構造方法及經常使用方法
ByteArrayInputStream(byte[] buf);
ByteArrayInputStream(byte[] buf,int offset,int length);
public int read();
順序地從源中讀出一個字節
public int read(byte[] b,int off,int len);
順序地從源中讀出參數len指定的字節數
ByteArrayOutputStream流構造方法及經常使用方法
ByteArrayOutputStream();
ByteArrayOutputStream(int size);
public void write(int b);
順序地向緩衝區寫入一個字節
public void write(byte[] b,int off,int len);
將參數b中指定的len個字節順序地寫入緩衝區
public byte[] toByteArray();
返回輸出流寫入到緩衝區的所有字節
(2)字符數組
CharArrayReader
和CharArrayWriter
類是字符數組流,使用字符數組做爲流的源和目標。
8.數據流
DataInputStream
和DataOutputStream
類建立的對象稱爲數據輸入流和數據輸出流。
構造方法:
DataInputStream(InputStream in)
建立的數據輸入流指向一個由參數in指定的底層輸入流
DataOutputStream(OutnputStream out)
建立的數據輸出流指向一個由參數out指定的底層輸出流
9.對象流
ObjectInputStream
和ObjectOutputStream
類建立的對象稱爲對象輸入流和對象輸出流。
它的構造方法是:
ObjectInputStream(InputStream in)
ObjectOutputStream(OutputStream out)
相關方法:
writeObject(Object obj)
將一個對象obj寫入到一個文件
readObject()
讀取一個對象到程序中
所謂序列化:一個類若是實現了Serializable
接口,那麼這個類建立的對象就是所謂序列化的對象。
10.使用Scanner解析文件
(1)使用默認分隔標記解析文件
建立Scanner
對象,並指向要解析的文件,例如:
File file = new File("hello.java");
Scanner sc = new Scanner(file);
sc
將空白做爲分隔標記
(2)使用正則表達式做爲分隔標記解析文件 :
建立Scanner
對象,指向要解析的文件,並使用useDelimiter
方法指定正則表達式做爲分隔標記。
11.文件對話框
構造方法JFileChooser()
建立初始不可見的有模式的文件對話框。而後文件對話框調用下述2個方法:
showSaveDialog(Component a);
showOpenDialog(Component a);
均可以使得對話框可見,只是呈現的外觀有所不一樣,showSaveDialog
方法提供保存文件的界面,showOpenDialog
方法提供打開文件的界面。
上述兩個方法中的參數a指定對話框可見時的位置,當a是null時,文件對話框出如今屏幕的中央;若是組件a不空,文件對話框在組件a的正前面居中顯示。
11.帶進度條的輸入流
若是讀取文件時但願看見文件的讀取進度可使用javax.swing
包提供的輸入流類:
ProgressMonitorInputStream
它的構造方法是:
ProgressMonitorInputStream(Conmponent c,String s,InputStream);
12.文件鎖
FileLock
、FileChannel
類處理Java提供的文件鎖功能。它們分別在java.nio
和java.nio.channels
包中。
輸入、輸出流讀寫文件時可使用文件鎖。
RondomAccessFile建立的流在讀寫文件時使用文件鎖的步驟以下:
(1)先使用RondomAccessFile
流創建指向文件的流對象,該對象的讀寫屬性必須是rw,例如:
RandomAccessFile input=new RandomAccessFile("Example.java","rw");
(2)input流調用方法getChannel()
得到一個鏈接到地層文件的FileChannel
對象(信道),例如
FileChannel channel=input.getChannel();
(3)信道調用tryLock()
或lock()
方法得到一個FileLock
(文件鎖)對象,這一過程也稱做對文件加鎖.
例如:FileLock lock=channel.tryLock();
board.showMess(new OutputAlphabet() //向參數傳遞OutputAlphabet的匿名子類對象 { public void output() { for(char c='α';c<='ω';c++) //輸出希臘字母 System.out.printf("%3c",c); } } );
中,對於匿名類的使用格式存有疑惑
run->configrations->VM options:-ea
以後成功調試並啓用assert語句
interface Some{ void dosome (); } class SomeImpl implements Some { public void dosome(){ System.out.println("作一些事"); } } public class Main { public static void main (String [] args) { Some s= new SomeImpl(); s.dosome (); } }
如下描述正確的是
A
.
編譯失敗
B . 顯示「作一些事」
C
.
發生ClassCastException
D
.
執行時不顯示任何信息
緣由和分析:對接口的理解不很到位。在此題中簡單的將接口Some
做爲父類,並最後調用在子類中重寫的方法便可。
教材學習中的問題和解決過程, 一個問題加1分
代碼調試中的問題和解決過程, 一個問題加1分
經過對教材的學習,瞭解了兩個特殊類的使用方法及輸入、輸出流相關知識
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 6/6 | 1/1 | 20/20 | |
第二週 | 245/251 | 1/2 | 18/38 | |
第三週 | 633/884 | 1/3 | 22/60 | |
第四周 | 305/1189 | 1/4 | 30/90 | |
第五週 | 410/1599 | 3/7 | 30/120 | |
第六週 | 1135/2734 | 3/10 | 30/150 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)