<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 修飾的變量叫靜態(tài)變量類變量, 沒有被 static 修飾的變量叫實(shí)例變量
      
       在運(yùn)行時期, JVM 在加載類的時候?qū)⑼瓿蓪o態(tài)變量/類變量分配一次內(nèi)存空間, 且在內(nèi)存上只存在一份拷貝, 類的所有實(shí)例將共享這份拷貝。

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

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

    2. static 修飾方法

       被 static 修飾的方法稱為靜態(tài)方法, 與靜態(tài)變量相似的, 它獨(dú)立于該類的任何對象, 它不依賴類的特定實(shí)例。
     
       因此靜態(tài)方法中不能使用 this、super 關(guān)鍵字, 也不能調(diào)用非靜態(tài)的變量或方法(因?yàn)榉庆o態(tài)是需依賴于具體的實(shí)例, 如果調(diào)用, 則不能保證其被正確初始化,

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

    3. static 修飾代碼塊

       被 static 修飾的代碼塊叫靜態(tài)代碼塊, JVM 在加載類的時候就會執(zhí)行這些靜態(tài)代碼塊, 而且只會被執(zhí)行一次, 因此靜態(tài)代碼塊會比類的構(gòu)造方法優(yōu)先執(zhí)行。

       如果一個類中的靜態(tài)代碼塊有多個,JVM 將按照它們在類中出現(xiàn)的先后順序依次執(zhí)行它們。

    二、final

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

    1. final 修飾類

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

    2. final 修飾變量

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

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

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

       [小延伸: 普通代碼塊實(shí)際上會被提取到構(gòu)造方法中來執(zhí)行, 而且會比構(gòu)造方法體內(nèi)的代碼優(yōu)先執(zhí)行。]

    3. final 修飾方法

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

       final 不能用來修飾構(gòu)造器(構(gòu)造方法、構(gòu)造函數(shù)、構(gòu)造子), 因?yàn)楦割惖臉?gòu)造器不能夠被繼承, 類內(nèi)的 private 方法也不能夠被子類繼承,

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

    三、transient

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

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

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

    Java 的 Serializable 提供了一種持久化對象實(shí)例的機(jī)制。當(dāng)一個對象發(fā)生持久化時, 可能會有一些特殊的數(shù)據(jù)成員,

    是我們不希望用 Serializable 機(jī)制來保存的。為了在一個特定對象的一個或多個域上關(guān)閉持久化, 可以在這個域前加上關(guān)鍵字 transient。
      
    transient 是 Java 的關(guān)鍵字, 用來表示一個域不是該對象串行化的一部分。當(dāng)一個對象被串行化的時候, 被聲明成 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());
            
    /**
             * 控制臺執(zhí)行輸出結(jié)果:
             * 
             * <------------- 序列化之前 ------------->
             * 姓名: 店小三
             * 昵稱: 小菜一疊
             * <------------- 反序列化后 ------------->
             * 姓名: 店小三
             * 昵稱: 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)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产黄色免费网站| 免费国产99久久久香蕉| 成人免费看黄20分钟| 亚洲卡一卡二卡乱码新区| 免费国产作爱视频网站| 亚洲人成在久久综合网站| 曰批视频免费30分钟成人| 亚洲人成在线播放| 日本黄页网站免费| 免费人妻精品一区二区三区| 亚洲国产精品无码久久青草| 久久国产乱子伦精品免费午夜| 亚洲精品无码久久久久| 中文字幕日本人妻久久久免费| 亚洲AV无码乱码国产麻豆穿越| 久久不见久久见免费视频7| 亚洲中文久久精品无码1 | 亚洲性日韩精品一区二区三区| a一级爱做片免费| 久久精品国产亚洲av麻| 亚洲w码欧洲s码免费| 亚洲精品乱码久久久久久V| 波多野结衣视频在线免费观看 | 亚洲高清国产拍精品26U| 蜜桃视频在线观看免费视频网站WWW| 亚洲精品电影天堂网| 免费视频中文字幕| 亚洲日韩在线观看免费视频| 亚洲VA中文字幕无码一二三区| 久久国内免费视频| 日本一区二区三区免费高清在线 | 亚洲免费日韩无码系列| 九九美女网站免费| 久久亚洲国产成人影院| 亚洲国产成人VA在线观看| 99久久免费看国产精品| 亚洲av成人片在线观看| 久久久无码精品亚洲日韩蜜臀浪潮| 国内自产拍自a免费毛片| 中文字幕乱码一区二区免费| 亚洲熟妇AV日韩熟妇在线|