<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-126  評論-247  文章-5  trackbacks-0

       
    一、static

    static 可以用來修飾變量、方法、代碼塊。

    1. static 修飾變量:

       被 static 修飾的變量叫靜態變量類變量, 沒有被 static 修飾的變量叫實例變量
      
       在運行時期, JVM 在加載類的時候將完成對靜態變量/類變量分配一次內存空間, 且在內存上只存在一份拷貝, 類的所有實例將共享這份拷貝。

       靜態變量/類變量獨立于該類的任何對象, 它不依賴類的特定實例, 可以通過類名來訪問得到, 也可以通過實例名來訪問(不建議)。

       而對于實例變量, 是每次創建類的實例的時候都會為實例變量分配一次內存空間, 實例變量在內存上可能存在多個拷貝, 但它們之間互不影響。

    2. static 修飾方法

       被 static 修飾的方法稱為靜態方法, 與靜態變量相似的, 它獨立于該類的任何對象, 它不依賴類的特定實例。
     
       因此靜態方法中不能使用 this、super 關鍵字, 也不能調用非靜態的變量或方法(因為非靜態是需依賴于具體的實例, 如果調用, 則不能保證其被正確初始化,

       而 Java 編譯器是不允許你這么做的)。靜態方法可以通過類名來訪問得到, 也可以通過實例名來訪問(不建議)。

    3. static 修飾代碼塊

       被 static 修飾的代碼塊叫靜態代碼塊, JVM 在加載類的時候就會執行這些靜態代碼塊, 而且只會被執行一次, 因此靜態代碼塊會比類的構造方法優先執行。

       如果一個類中的靜態代碼塊有多個,JVM 將按照它們在類中出現的先后順序依次執行它們。

    二、final

    final 譯成中文是最終的和不可更改的意思, 它可以用來修飾非抽象類, 非抽象成員方法和變量。

    1. final 修飾類

       final 不能用來修飾 abstract 的類, 不能被繼承, 它是頂級類, 沒有子類, 像我們常用的 String 類

    2. final 修飾變量

       final 用來修飾變量, 那就意味著該變量一旦初始化完成, 那么它的值就不能夠再被改變。

       因此, final 修飾的變量必須由程序員手動去做初始化給變量賦值, 而且初始化的位置只能是: 定義處、構造方法、普通代碼塊(不能是靜態代碼塊)。

       而且這三個位置中只能選擇一處來做初始化。

       [小延伸: 普通代碼塊實際上會被提取到構造方法中來執行, 而且會比構造方法體內的代碼優先執行。]

    3. final 修飾方法

       final 用來修飾方法表示不允許其子類來覆蓋這個方法。

       final 不能用來修飾構造器(構造方法、構造函數、構造子), 因為父類的構造器不能夠被繼承, 類內的 private 方法也不能夠被子類繼承,

       也就不存在覆蓋之說法, 覆蓋僅適用于成員方法, private 修飾的方法實際上默認也是 final 類型的。

    三、transient

    這個比較陌生, 其實我壓根就沒用過.... -_-|| 在 java 源碼里見到過, 不過沒有用到的東西向來學了就忘的很干脆, 這次是為了找工作, 重新整理一遍。

    @Transient 相信很多人都認識這個, 在編一個實體類寫 JPA(Java Persistence API, Java 持久化 API)注解的時候, 會常常用到這個注解。

    而這里的 transient 和 @Transient 的作用很相似:

    Java 的 Serializable 提供了一種持久化對象實例的機制。當一個對象發生持久化時, 可能會有一些特殊的數據成員,

    是我們不希望用 Serializable 機制來保存的。為了在一個特定對象的一個或多個域上關閉持久化, 可以在這個域前加上關鍵字 transient。
      
    transient 是 Java 的關鍵字, 用來表示一個域不是該對象串行化的一部分。當一個對象被串行化的時候, 被聲明成 transient 的變量的值

    不會包括在串行化里面。 

    示例:

      
    package test;

    import java.io.Serializable;

    public class Admin implements Serializable{

        
    private static final long serialVersionUID = 1L;
        
    private String name;
        
    private transient String nickname;
        
        
    public String getName() {
            
    return name;
        }
        
        
    public void setName(String name) {
            
    this.name = name;
        }
        
        
    public String getNickname() {
            
    return nickname;
        }
        
        
    public void setNickname(String nickname) {
            
    this.nickname = nickname;
        }
        
    }
      

     


       
    package test;
    /**
     * <!--
     * Author : fancy
     * Email  : fancydeepin@yeah.net
     * Date   : 2013-02-07
     * --!>
     
    */
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;

    public class AdminTest {

        
    public static void main(String[] args) throws Exception{
            
            Admin admin 
    = new Admin();
            admin.setName(
    "店小三");
            admin.setNickname(
    "小菜一疊");
            writeObject(admin);
            System.out.println(
    "<------------- 序列化之前 ------------->");
            System.out.println(
    "姓名: " + admin.getName());
            System.out.println(
    "昵稱: " + admin.getNickname());
            admin 
    = (Admin)readObject();
            System.out.println(
    "<------------- 反序列化后 ------------->");
            System.out.println(
    "姓名: " + admin.getName());
            System.out.println(
    "昵稱: " + admin.getNickname());
            
    /**
             * 控制臺執行輸出結果:
             * 
             * <------------- 序列化之前 ------------->
             * 姓名: 店小三
             * 昵稱: 小菜一疊
             * <------------- 反序列化后 ------------->
             * 姓名: 店小三
             * 昵稱: null
             
    */
        }
        
        
    //序列化
        public static void writeObject(Object obj) throws Exception{
            ObjectOutputStream oos 
    = new ObjectOutputStream(new FileOutputStream("admin.ser"));
            oos.writeObject(obj);
        }
        
        
    //反序列化
        public static Object readObject() throws Exception{
            ObjectInputStream ois 
    = new ObjectInputStream(new FileInputStream("admin.ser"));
            
    return ois.readObject();
        }
    }
       


     



      
    posted on 2013-02-07 12:14 fancydeepin 閱讀(1905) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 欧洲乱码伦视频免费国产| 91香蕉在线观看免费高清| 亚洲日韩精品一区二区三区| 久久国产精品2020免费m3u8| 99久久婷婷国产综合亚洲| 国产国拍亚洲精品福利| 免费国产污网站在线观看15| 国产精品自拍亚洲| 亚洲精品视频在线播放| 四虎影在线永久免费观看| 最近高清中文字幕免费| 国产AV无码专区亚洲AV琪琪| 久久亚洲AV午夜福利精品一区| 日韩免费电影在线观看| 无码人妻一区二区三区免费n鬼沢| 亚洲高清乱码午夜电影网| 亚洲av无码专区国产乱码在线观看| 女人18毛片a级毛片免费视频| 国产福利在线观看永久免费| 亚洲中文字幕无码爆乳app| 亚洲va国产va天堂va久久| 国产精品极品美女免费观看 | 麻豆精品不卡国产免费看| 亚洲欧美黑人猛交群| 亚洲视频一区调教| 亚洲成人一区二区| 欧美大尺寸SUV免费| 久久aa毛片免费播放嗯啊| 一本久久免费视频| 亚洲日韩一区二区三区| 亚洲爱情岛论坛永久| 亚洲男人的天堂一区二区| 大地资源在线观看免费高清| 日韩精品极品视频在线观看免费| 一级毛片高清免费播放| 亚洲av中文无码字幕色不卡| 亚洲精品电影在线| 亚洲国产第一页www| 亚洲熟女少妇一区二区| 亚洲午夜无码片在线观看影院猛| 精品剧情v国产在免费线观看 |