就個人的一些看法簡單的 談談static。

我們提供的服務有:網(wǎng)站設計、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、寬城ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的寬城網(wǎng)站制作公司
就java 工程師來說,static非常容易在面試的時候被問到。
言歸正傳,書面上說static是靜態(tài)的。其實我把它理解為“全局的”。什么叫全局的?全局的屬性,全局的方法,全局的代碼塊。
全局屬性,全局方法,比較好理解就是這個類所有的對象都共有的屬性和方法。因為是整個類共有的,所以可以通過聲明直接調用。我把它理解為“單例模式”的屬性和方法。所謂單例模式就是指這個類聲明的所有對象共享這些屬性和方法。一個對象對這個屬性進行了修改,所有對象再調這個屬性都是修改后的值了。
下面主要說一下static修飾的代碼塊,面試的一大考點就是static代碼塊是什么時候被加載的。
首先我們需要了解一下java虛擬機對類的加載過程。首先JVM會通過classloader將類的字節(jié)碼轉換成相應的Class對象。其中classloader是雙親委托的方法來查找類文件的。
就是首先委托父類的classloader查找(父類也有父類就交由父類的父類查找以此類推,直到不再繼承別的classloader的類),如果查找不到再由自己來查找。如果自己也找不到就拋出異常。以上是準備工作,當這個類抽次被使用,我們會顯出石化這個類(如果有父類就先初始化他的父類),在初始化的過程中我們會處理static修飾的代碼。就是我們這里要說的static代碼塊。每個類知會初始化1次。(我們可以通過改變方法 Class.forName()中的第二個參數(shù)來控制是否初始化一個類)。
以下為網(wǎng)上找的一個經(jīng)典的例子。
面試題目如下:請寫出程序執(zhí)行完成之后的結果。
package extend;
public class X {
Y y=new Y();
static{
System.out.println("tttt");
}
X(){
System.out.println("X");
}
public static void main(String[] args) {
new Z();
}
}
class Y{
Y(){
System.out.println("Y");
}
}
class Z extends X{
Y y=new Y();
static{
System.out.println("tt");
}
Z(){
System.out.println("Z");
}
}先不告訴最后結果,我們先來分析下。一步一步推出結果。
整個過程就是這樣了。現(xiàn)在知道結果了吧:
tttt
tt
Y
X
Y
Z
記住,面試有可能會標出一些語句的,讓你選擇這些語句的執(zhí)行順序。不過只要知道原理,就沒什么難的了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對創(chuàng)新互聯(lián)的支持。如果你想了解更多相關內容請查看下面相關鏈接
新聞名稱:淺談Java中類的實例化步驟
當前網(wǎng)址:http://www.chinadenli.net/article6/geiiig.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、品牌網(wǎng)站建設、面包屑導航、建站公司、做網(wǎng)站、關鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)