<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)航:
     
    主站蜘蛛池模板: 久久亚洲国产最新网站| 特a级免费高清黄色片| 成人毛片免费网站| 午夜免费国产体验区免费的| 久久久久久亚洲av成人无码国产| 国产又大又粗又长免费视频| 高潮内射免费看片| 亚洲精品视频免费看| 四虎影视永久免费观看| 久久aⅴ免费观看| 亚洲精品无码中文久久字幕| 国产AV无码专区亚洲精品| 成年女人毛片免费视频| 中文字幕无码免费久久| 成人亚洲国产精品久久| 亚洲影视一区二区| 中文字幕亚洲不卡在线亚瑟| 免费国产成人高清在线观看网站| 2022免费国产精品福利在线| 97久久国产亚洲精品超碰热| 久久精品亚洲综合一品| gogo全球高清大胆亚洲| 国产成人免费网站| 三年片在线观看免费观看大全一| 蜜桃传媒一区二区亚洲AV| 亚洲毛片免费观看| 好看的电影网站亚洲一区| 免费一级毛片在线播放不收费| 亚欧人成精品免费观看| 3344在线看片免费| 男女猛烈无遮掩视频免费软件| 色偷偷女男人的天堂亚洲网| 亚洲精品国产字幕久久不卡| 又黄又爽的视频免费看| 毛片免费在线播放| 在线观看的免费网站无遮挡| 男女拍拍拍免费视频网站| jizzjizz亚洲日本少妇| 亚洲av极品无码专区在线观看| 婷婷亚洲综合五月天小说| 在线a亚洲v天堂网2019无码|