• Java static,final 基本概念


    (转载自http://blog.kenyang.net/2011/03/java-staticfinal.html)
     
    從很久以前我就了解到,

    不僅僅要知道know how,

    還要知道know why,

    舉個例子,當我派工作給底下的人做時,

    例如要他做出一個發送mail的功能出來,

    恩,拜Google大神所賜,通常很快都可以找到發送mail的code。

    但是當我細下去問每一行code的用途時,

    大多是...."恩...不知道"。

    我覺得此風不可長。

    甚至有些學弟們搞不清楚何時要用static、final。

    也不懂甚麼是interface、abstract等等之類的。

    因為他們也不知道這些東西的作用。

    所以用這篇文章來稍微解說一下。

    static:

    靜態的意思

    可以用來宣告一個函數或者變數,

    只要記得當一個函數或者變數被宣告為static時,

    他就具有唯一值的概念!!

    他就永遠只佔著那一組記憶體空間。

    不管該類別被new幾個object,該值永遠都會是一樣的!

    舉個例子!

    我們看到下面code的例子

    class test{
         static int iValue = 0;
         public test() {
         }
    }
    public class main {
         public static void main(String[] argv)  {
              test test1 = new test();
              test test2 = new test();
              System.out.println(test1.iValue);
              test2.iValue  = 10;
              System.out.println(test2.iValue);
              System.out.println(test1.iValue);
         } 
    }
    
    
    

    我們把test這個類別裡的資料成員iValue宣告為static,

    然後再main裡面分別去new兩個object出來。

    分別是test1, test2,

    然後先印出test1的iValue出來,(印出0,當然!一開始是0)

    接著我們用test2這個object去將iValue設值設為10,

    接著再去印出test2的iValue出來,(印出10出來,當然!因為設成10了阿)

    重點來了!

    這時候再印出test1的iValue出來!

    大部分的人會覺得,應該是印出0阿,

    但是印出的是10。

    原因是因為我們將iValue宣告成static了。

    而iValue成為一個共同的變數。

    這就是static 的一個特性!

    特性一:永遠會是一個唯一值!!


    且static 還有一個特性,

    特性二:static可以透過類別直接存取使用!

    意思是我們其實不需要new 一個object出來。

    也可以透過類別直接去存取該變數

    例子如下!

    class test{
         static int iValue = 0;
         public test() {
         }
    }
    public class main {
         public static void main(String[] argv)  {
              System.out.println(test.iValue);
         }
    }
    
    
    

    你會發現在main中,我們並沒有new一個object出來!!

    也可以存取到test這個類別中的資料成員(iValue)

    static的介紹大概到這,

    接著介紹final

    final:

    相較於static,final的概念就容易了解許多!

    可以用來宣告一個類別、函數、或者變數。

    類別:當宣告在類別上時,該類別就無法被繼承!

    函數:當一個函數被宣告為final時,則繼承他的子類別無法覆寫

    變數:當一個變數被宣告為final時,意思是他是一個常數,是無法被修改的。


    注意!

    使用static final需要注意一點!!

    如上面所述說的,當我們有一個常數要宣告時,

    會宣告如下

    public static final String strValue = "ken";
    

    為什麼宣告這樣會有個風險呢?

    因為java在進行compile的時候,

    會將宣告成static final的變數,直接包進去程式裡面。

    什麼意思呢?

    System.out.println(strValue);
    

    當你有類似存取strValue的code時, 

    我們去把java會把compile成的class,decompile來看 

    會發現它變成如下的code 

    System.out.println("ken");
    


    好啊好啊,那到底風險又在哪?

    當然啦,如果你今天有用一些好用的IDE進行開發,

    應該是不會遇到這樣的風險,

    以Eclipse為例,只要你一儲存或者執行,Eclipse就會幫你進行compile!

    (如果有勾選Build Automatically的話)

    可是如果你今天是徒法煉鋼!

    自己下指令進行compile的時候...

    又剛好你程式改了,把strValue的值改為"yang",

    又剛好你忘記進行compile....

    這時候...如果有人去存取strValue就會出錯!!

    那怎麼解決???

    我們可以利用static block來進行宣告的動作!!!

    如下:

    static String strValue;
    static{
         strValue = "ken";
    }
    

    如果用這樣的宣告方式,即可避免上面述說的問題!


    原諒我,太累了。

    今天就先講解static,final 基本概念

    下篇在講解interface, abstract!!
  • 相关阅读:
    Python iter() 函数
    Python file() 函数
    Python bin() 函数
    QTP自动化测试-打开运行报告
    mysql-笔记-数据类型
    mysql-笔记--增删改查
    mysql-笔记-命名、索引规范
    Navicat for MySQL 安装和破解
    mysql client--笔记-修改密码-登录-查看数据库-创建数据库
    安装mysql
  • 原文地址:https://www.cnblogs.com/zt1175576678/p/4023894.html
Copyright © 2020-2023  润新知