Java學習(五)

Java學習(五)

標籤(空格分隔): Javajava


final的用法

final在java中並不經常使用,然而它卻爲咱們提供了諸如在c語言中定義常量的功能,不只如此,final還可讓你控制你的成員、方法或者是一個類是否可被重寫或繼承等功能,這些特色使final在java中擁有了一個不可或缺的地位,也是學習java時必需要知道和掌握的關鍵字之一。android

   final成員:當你在類中定義變量時,在其前面加上final關鍵字,那即是說,這個變量一旦被初始化便不可改變,這裏不可改變的意思對基本類型來講是其值不可變,而對於對象變量來講是其引用不可再變。其初始化能夠在兩個地方,一是其定義處,也就是說在final變量定義時直接給其賦值,二是在構造函數中,注意,這兩個地方只能選其一,要麼在定義時給值,要麼在構造函數中給值,不能同時既在定義時給了值,又在構造函數中給另外的值。還有一種用法是定義方法中的參數爲final,對於基本類型的變量,這樣作並無什麼實際意義,由於基本類型的變量在調用方法時是傳值的,也就是說你能夠在方法中更改這個參數變量而不會影響到調用語句。然而對於對象變量,卻顯得很實用,由於對象變量在傳遞時是傳遞其引用,這樣你在方法中對對象變量的修改也會影響到調用語句中的對象變量,當你在方法中不須要改變做爲參數的對象變量時,明確使用final進行聲明,會防止你無心的修改而影響到調用方法。設計模式

   final方法:將方法聲明爲final,那就說明你已經知道這個方法提供的功能已經知足你要求,不須要進行擴展,而且也不容許任何今後類繼承的類來重寫這個方法,可是繼承仍然能夠繼承這個方法,也就是說能夠直接使用。另外有一種被稱爲inline的機制,它會使你在調用final方法時,直接將方法主體插入到調用處,而不是進行例行的方法調用,例如保存斷點,壓棧等,這樣可能會使你的程序效率有所提升,然而當你的方法主體很是龐大時,或你在多處調用此方法,那麼你的調用主體代碼便會迅速膨脹,可能反而影響效率,因此你要慎用final進行方法定義。函數

   final類:當你將final用於類身上時,你就須要仔細考慮,由於一個final類是沒法被任何人繼承的,那也就意味着此類在一個繼承樹中是一個葉子類,而且此類的設計已被認爲很完美而不須要進行修改或擴展。對於final類中的成員,你能夠定義其爲final,也能夠不是final。而對於方法,因爲所屬類爲final的關係,天然也就成了final型的。你也能夠明確的給final類中的方法加上一個final,但這顯然沒有意義。學習

JavaI/O部分之File類的用法

在java中,I/O(輸入/輸出)是比較乏味的事情,由於看不到明顯的運行效果,但輸入/輸出是全部程序都必需的部分——使用輸入機制,容許程序讀取外部數據(包括來自磁盤、光盤等存儲設備的數據)、用戶輸入數據;使用輸出機制,容許程序記錄運行狀態,將程序數據輸出到磁盤、光盤等存儲設備中。.net

 Java的I/O經過java.io包下的類和接口來支持,在java.io包下主要包括輸入、輸出兩種IO流,每種輸入、輸出流又可分爲字節流和字符流兩大類。其中字節流以字節爲單位來處理輸入、輸出操做,而字符流則以字符來處理輸入、輸出操做。設計

Java的IO流使用了一種裝飾器設計模式,它將IO流分爲底層節點流和上層處理流,其中節點流用於和底層的物理存儲節點直接關聯——不一樣的物理節點獲取節點流的方式可能存在必定的差別,但程序能夠把不一樣的物理節點流包裝成統一的處理流,從而容許程序使用統一的輸入。輸出代碼來讀取不一樣的物理存儲節點的資源。code

下面主要經過一個類來記錄此部分知識點,具體代碼以下:對象

import java.io.File;
import java.util.Date;
 
 
 
/**
 * 
 * @author Android將軍
 *
 */
/*
 * File類是java.io包下表明與平臺無關的文件和目錄,也就是說,若是但願在程序中操做文件和目錄,均可以經過File
 *類來完成。值得指出的是,不論是文件仍是目錄都是使用File來操做的,File能新建、刪除、重命名文件和目錄,File
 *不能訪問文件內容自己。若是須要訪問文件內容自己,則須要使用輸入/輸出流。
 *  一旦建立了File對象後,就能夠調用File對象的方法來訪問,File類提供了不少方法來操做文件和目錄。
 */
public class FileStudy {
    
 
    private static File file;
    /**
     * 傳入指定目錄的文件或目錄,獲取該對象的詳細信息
     * @param uri 傳入的文件路徑或文件目錄
     */
    public static void createSysout(String uri)
    {
        file=new File(uri);
        if(file.isFile())//判斷File對象所對應的是不是文件,而不是目錄
        {
            //返回此File對象所表示的文件名
            System.out.println("文件名:"+file.getName());
            //返回此File對象所對應的路徑名
            System.out.println("文件路徑:"+file.getPath());
            //返回此File對象所對應的絕對路徑所對應的File對象
            System.out.println("該文件所對應的絕對路徑所對的File的名字:"+file.getAbsoluteFile().getName());
            //返回此File對象所對應的絕對路徑名。
            System.out.println(file.getAbsolutePath());
            //返回此File對象所對應目錄(最後一級子目錄)的父目錄名.
            System.out.println(file.getParent());
            
            //重命名此File對象所對應的文件或目錄,若是重命名成功,則返回true,不然返回false
//          System.out.println(file.renameTo(new File("TestNewName.txt")));//重命名以後,該file所對應的文件就沒有了。
            //判斷File對象所對應的文件或目錄是否存在
            System.out.println("文件是否存在:"+file.exists());
            //判斷File對象所對應的文件和目錄是否可寫
            System.out.println("文件是否可寫:"+file.canWrite());
            //判斷File對象所對應的文件和目錄是否可讀
            System.out.println("文件是否可讀:"+file.canRead());
            //判斷File對象所對應的是不是目錄,而不是文件
            System.out.println("該對象是否爲目錄:"+file.isDirectory());
            //判斷File對象所對應的文件或目錄是不是絕對路徑。該方法消除了不一樣平臺的差別,能夠直接判斷File對象是否爲絕對路徑。
            //在Unix/Linux/BSD等系統上,若是路徑名開頭是一條斜線(/),則代表該File對象對應一個絕對路徑;在Windows等系統上,若是路徑開頭
            //是盤符,則說明它是一個絕對路徑。
            System.out.println("是否爲絕對路徑:"+file.isAbsolute());
            System.out.println("文件的最後修改時間:"+new Date(file.lastModified()).toString());
            System.out.println("文件內容的長度:"+file.length());
            
        }
        
    }
}

http://blog.csdn.net/android_jiangjun/article/details/41683915blog

相關文章
相關標籤/搜索