final+static
final
final關鍵字顧名思義代表“最后的”,意味著不能被更改。它的定義,可以概括地分為以下三點:
如果一個方法被final修飾,那么在編譯階段,JVM會為其尋求內聯,即相當于將該方法中的語句都添加到調用該方法的代碼中,去除這個方法。函數的調用是需要一定的開銷的:保護現場、建立堆棧、恢復現場等,對于一些代碼量不大,又頻繁調用的函數來說,時空的消耗都是很大的,所以內聯有助于提升Java的效率。因此如果已經確定某一個方法不會被繼承,就盡量用final來修飾。
static
static關鍵字同樣可以用于修飾類、方法和變量,但它修飾的類只能是內部類,它所修飾的方法和變量可以稱為“靜態方法”、“靜態變量”,也可以稱為“類方法”、“類變量”,后一種稱呼顯然更貼近于它的實際含義。相對于“類方法”、“類變量”的是“實例方法”、“實例變量”,也就是沒有用關鍵字static修飾的方法和變量。一個類可以有很多對象(實例),對于非靜態變量,每個對象都擁有,而靜態變量,則是所有對象共有。
- 靜態資源是獨立于類而存在的,所有實例共享,在類初始化的時候加載;
- 非靜態資源是在new一個新對象的時候加載,即生成實例的時候。
通過以上兩點,可以得出:
當類只進行了初始化,還未產生實例的時候,非靜態資源是未被加載出來的,因而在靜態方法中引用非靜態資源是錯誤的
當父類子類都存在靜態資源和非靜態資源的時候,new第一個子類對象時,調用資源的順序是:父類靜態資源 -> 子類靜態資源 -> 父類構造函數 -> 子類構造函數。由于靜態 資源初始化只需一次,new第二個子類對象時,調用資源的順序就是 父類構造函數 -> 子類構造函數
轉載于:https://www.cnblogs.com/sy130908/p/11429521.html
總結
以上是生活随笔為你收集整理的final+static的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [POJ3040] Allowance
- 下一篇: 匿名对象+内部类