1. 程式人生 > >《Java程式設計師面試筆試寶典》之Static關鍵字有哪些作用

《Java程式設計師面試筆試寶典》之Static關鍵字有哪些作用

static關鍵字主要有兩種作用:第一,只想為某特定資料型別或物件分配單一的儲存空間,而與建立物件的個數無關。第二,希望某個方法或屬性與類而不是物件關聯在一起,也就是說,在不建立物件的情況下就可以通過類來直接呼叫方法或使用類的屬性。具體而言,static在Java語言中主要有四種使用情況:成員變數、成員方法、程式碼塊、內部類。

(1)static成員變數

雖然Java語言中沒有全域性的概念,但可以通過static關鍵字來達到全域性的效果。Java類提供了兩種型別的變數:用static關鍵字修飾的靜態變數和沒有static關鍵字的例項變數。靜態變數屬於類,在記憶體中只有一個拷貝(所有例項都指向同一個記憶體地址),只要靜態變數所在的類被載入,這個靜態變數就會被分配空間,因此就可以被使用了。對靜態變數的引用有兩種方式,分別為“類.靜態變數”和“物件.靜態變數”。

例項變數屬於物件,只有物件被建立後,例項變數才會被分配空間,才能被使用,它在記憶體中存在多個拷貝。只能用“物件.例項變數”的方式來引用。以下是靜態變數與例項變數的使用例子。

public class TestAttribute {public static int staticInt=0; 

public int nonStaticInt=0;

public static void main(String[] args){

TestAttribute t=new TestAttribute();

System.out.println(“t.staticInt=”+t.staticInt);

System.out.println(“TestAttribute.staticInt=”+TestAttribute.staticInt);

System.out.println(“t.nonStaticInt=”+t.nonStaticInt);

System.out.println(“對靜態變數和例項變數分別+1″);

t.staticInt++;

t.nonStaticInt++;

TestAttribute t1=new TestAttribute();

System.out.println(“t1.staticInt=”+t1.staticInt);

System.out.println(“TestAttribute.staticInt=”+TestAttribute.staticInt);

System.out.println(“t1.nonStaticInt=”+t1.nonStaticInt);

}

}

上例的執行結果為:

t.staticInt=0TestAttribute.staticInt=0 

t.nonStaticInt=0

對靜態變數和例項變數分別+1

t1.staticInt=1

TestAttribute.staticInt=1

t1.nonStaticInt=0

從上例可以看出,靜態變數只有一個,被類擁有,所有的物件都共享這個靜態變數,而例項物件是與具體物件相關的。需要注意的是,與C++語言不同的是,在Java語言中,不能在方法體中定義static變數。

(2)static成員方法

與變數類似,Java類同時也提供了static方法與非static方法。static方法是類的方法,不需要建立物件就可以被呼叫,而非static方法是物件的方法,只有物件被創建出來後才可以被使用。

static方法中不能使用this和super關鍵字,不能呼叫非static方法,只能訪問所屬類的靜態成員變數和成員方法,因為當static方法被呼叫的時候,這個類的物件可能還沒被建立,即使已經被建立了,也無法確定呼叫哪個物件的方法。同理,static方法也不能訪問非static型別的變數。

static一個很重要的用途是實現單例模式。單例模式的特點是該類只能有一個例項,為了實現這一功能,必須隱藏類的建構函式,即把建構函式宣告為private,並提供一個建立物件的方法,由於構造物件被宣告為private,外界無法直接建立這個型別的物件,只能通過該類提供的方法來獲取類的物件,要達到這樣的目的只能把建立物件的方法宣告為static。程式示例如下所示。

class Singleton{private static Singleton  instance = null; 

private Singleton (){}

public static Singleton  getInstance() {

if( instance == null ) {

instance = new Singleton ();

}

return instance;

}

}

用public修飾的static變數和方法本質上都是全域性的,如果在static變數前用private修飾,則表示這個變數可以在類的靜態程式碼塊或者類的其它靜態成員方法中使用,但是不能在其它類中通過類名來直接引用。

(3)static程式碼塊

static程式碼塊(靜態程式碼塊)在類中是獨立於成員變數和成員函式的程式碼塊。它不在任何一個方法體內,JVM在載入類的時候會執行static程式碼塊,如果有多個static程式碼塊,JVM將會按順序來執行。static程式碼塊經常被用來初始化靜態變數。需要注意的是,這些static程式碼塊只會被執行一次。如下例所示。

public class Test {private static int a; 

static {

Test.a = 4;

System.out.println(a);

System.out.println(“static block is called”);

}

public static void main(String[] args) {

}

}

程式執行結果為:

4static block is called

(4)static內部類

static內部類是指被宣告為static的內部類,它可以不依賴於外部類例項物件而被例項化,而通常的內部類需要在外部類例項化後才能例項化。靜態內部類不能與外部類有相同的名字,不能訪問外部類的普通成員變數,只能訪問外部類中的靜態成員和靜態方法(包括私有型別)。如下例所示。

public class Outer {static int n =5; 

static class Inner {

void accessAttrFromOuter(){

System.out.println(“Inner:Outer.n=”+n);

}

}

public static void main(String[] args){

Outer.Inner nest = new Outer.Inner();

nest.accessAttrFromOuter();

}

}

程式執行結果為:

Inner:Outer.n=5

需要注意的是,只有內部類才能被定義為static。

引申:

(1)什麼是例項變數?什麼是區域性變數?什麼是類變數?什麼是final 變數?

例項變數:變數歸物件所有,只有在例項化物件後才可以。每當例項化一個物件時,會建立一個副本並初始化,如果沒有顯示初始化,會初始化一個預設值。各個物件中的例項變數互不影響。

區域性變數:在方法中定義的變數,在使用前必須初始化。

類變數:用static可修飾的屬性;變數歸類所有,只要類被載入,這個變數就可以被使用(類名.變數名)。所有例項化的物件共享類變數。

final變數:表示這個變數為常量,不能被修改。

(2)static與final結合使用表示什麼意思?

static常與final關鍵字結合使用,用來修飾成員變數與成員方法,有點類似於“全域性常量”。對於變數,如果使用static final修飾,則表示一旦賦值,就不可修改,並且通過類名可以訪問。對於方法,如果使用static final修飾,則表示方法不可覆蓋,並且可以通過類名直接訪問。

常見筆試題:

public class Test {public static int testStatic() { 

static final int i = 0;

System.out.println(i++);

}

public static void main(String args[]) {

Test test = new Test();

test.testStatic();

}

輸出結果是什麼?

A:0                    B:1                            C:2                            D:編譯失敗

答案:D。在Java語言中,不能在成員函式內部定義static變數。

出自:http://www.360jobhunting.com/?p=92

相關推薦

Java程式設計師面試筆試Static關鍵字哪些作用

static關鍵字主要有兩種作用:第一,只想為某特定資料型別或物件分配單一的儲存空間,而與建立物件的個數無關。第二,希望某個方法或屬性與類而不是物件關聯在一起,也就是說,在不建立物件的情況下就可以通過類來直接呼叫方法或使用類的屬性。具體而言,static在Java語言中主要有

Java程式設計師面試筆試

網站 更多書籍點選進入>> CiCi島 下載 電子版僅供預覽及學習交流使用,下載後請24小時內刪除,支援正版,喜歡的請購買正版書籍 電子書下載(皮皮雲盤-點選“普通下載”) 購買正版 封頁 編輯推薦 ★在這裡,眾多知名企業面試

Java程式設計師面試筆試刷題總結~16

    雖然申請部落格已經有一段時間了,卻是第一次寫部落格,有點激動,不知道該寫些什麼,剛好大三老學姐正值找實習工作之際,每天都會刷一點題,現在在看Java程式設計師面試筆試寶典一書,剛好把裡面的題每天總結5道,寫在部落格裡,一來自我督促,保持每天都會刷題,二來自我加深印象,

Java基礎知識《Java程式設計師面試筆試》--關鍵字

一、break 和 goto        1、Java如何跳出多重迴圈:在多重迴圈外面加標誌public class Break{     public static void main(String[] args){         out:         for(in

Java基礎知識《Java程式設計師面試筆試》--基本型別與運算

一、Java的八種資料型別    1、八種基本資料型別為:int、short、byte、long、char、float、double、boolean(String不是基本資料型別);    2、int 4位元組,取值範圍約為 負21億4千7百萬 到 21億4千7百萬    3

程式設計師求職道(《程式設計師面試筆試》)如何回答演算法設計問題?

程式設計師面試中,很多演算法設計問題,都是歷年來各家企業的“炒現飯”,不管求職者以前對演算法知識學習得是否紮實,理解得是否深入,只要面試前買本《程式設計師面試筆試寶典》(備註:編者早前編寫的一本書,機械工業出版社出版),學習上一段時間,牢記於心,應付此類題目完全沒有問題,但遺

Java程式面試筆試volatile什麼作用

在由Java語言編寫的程式中。有時候為了提高程式的執行效率,編譯器會自己主動對其進行優化,把經常被訪問的變數快取起來,程式在讀取這個變數的時候有可能會直接從快取(比如暫存器)中來讀取這個值。而不會去記憶體中讀取。這樣做的一個優點是提高了程式的執行效率,但當遇到多執行緒程式設

程式設計師求職道(《程式設計師面試筆試》)快樂程式設計的好習慣哪些

這一點錯,那一點錯,錯到一起就是大錯。——《我是特種兵之利刃出鞘》程式設計是一項聰明人玩的遊戲,它既是對智力的考驗,也是對習慣的考驗,智力的好壞取決於父母的基因,人們無從左右,但習慣的好壞卻是可以不斷培養。一項由美國芝加哥大學國家研究組織進行的綜合社會調查,公佈了“十大最痛苦

《PHP程式設計師面試筆試》——如何巧妙地回答面試官的問題?

如何巧妙地回答面試官的問題? 本文摘自《PHP程式設計師面試筆試寶典》 所謂“來者不善,善者不來”,程式設計師面試中,求職者不可避免地需要回答面試官各種“刁鑽”、犀利的問題,回答面試官的問題千萬不能簡單地回答“是”或者“不是”,而應該具體分析“是”或者“不是”的理由。 回答面試官的問題是一門很深的學問。

《PHP程式設計師面試筆試》——如何回答演算法設計問題?

  如何巧妙地回答面試官的問題?   本文摘自《PHP程式設計師面試筆試寶典》   程式設計師面試中的很多演算法設計問題,都是歷年來各家企業的“炒現飯”,不管求職者以前對演算法知識掌握得是否紮實,理解得是否深入,只要面試前買本《程式設計師面試筆試寶典》,應付此類題目完全

《PHP程式設計師面試筆試》——如何回答快速估算類問題?

如何巧妙地回答面試官的問題? 本文摘自《PHP程式設計師面試筆試寶典》 有些大企業的面試官,總喜歡出一些快速估算類問題,對他們而言,這些問題只是手段,不是目的,能夠得到一個滿意的結果固然是他們所需要的,但更重要的是通過這些題目可以考查求職者的快速反應能力以及邏輯思維能力。由於求職者平時準備的時候可能對此類

《PHP程式設計師面試筆試》——如何回答非技術性問題?

如何巧妙地回答面試官的問題? 本文摘自《PHP程式設計師面試筆試寶典》 評價一個人的能力,除了專業能力,還有一些非專業能力,如智力、溝通能力和反應能力等,所以在IT企業招聘過程的筆試、面試環節中,並非所有的內容都是C/C++/Java、資料結構與演算法及作業系統等專業知識,也包括其他一些非技術類的知識,如

《PHP程式設計師面試筆試》——如何回答技術性的問題?

如何巧妙地回答面試官的問題? 本文摘自《PHP程式設計師面試筆試寶典》 程式設計師面試中,面試官會經常詢問一些技術性的問題,有的問題可能比較簡單,都是歷年的面試、筆試真題,求職者在平時的複習中會經常遇到。但有的題目可能比較難,來源於Google、Microsoft等大企業的題庫或是企業自己為了招聘需要設計

《PHP程式設計師面試筆試》——如何應對面試官的“激將法”語言?

如何巧妙地回答面試官的問題? 本文摘自《PHP程式設計師面試筆試寶典》 “激將法”是面試官用以淘汰求職者的一種慣用方法,它是指面試官採用懷疑、尖銳或咄咄逼人的交流方式來對求職者進行提問的方法。例如,“我覺得你比較缺乏工作經驗”“我們需要活潑開朗的人,你恐怕不合適”“你的教育背景與我們的需求不太適合”“你的

《PHP程式設計師面試筆試》——如何應對自己不會回答的問題?

如何巧妙地回答面試官的問題? 本文摘自《PHP程式設計師面試筆試寶典》 在面試的過程中,對面試官提出的問題求職者並不是都能回答出來,計算機技術博大精深,很少有人能對計算機技術的各個分支學科瞭如指掌。而且拋開技術層面的問題,在面試那種緊張的環境中,回答不上來的情況也容易出現。面試過程中遇到自己不會回答的問題

《PHP程式設計師面試筆試》——什麼是職場暗語?

本文摘自《PHP程式設計師面試筆試寶典》 文末有該書電子版下載。 隨著求職大勢的變遷發展,以往常規的面試套路因為過於單調、簡明,已經被眾多“面試達人”們挖掘出了各種“破解祕訣”,形成了類似“求職寶典”的各類“面經”。面試官們也紛紛升級面試模式,為求職者們製作了更為隱蔽、間接、含混的面試題目,讓那些早已流傳

《PHP程式設計師面試筆試》——在被企業拒絕後是否可以再申請?

如何巧妙地回答面試官的問題? 本文摘自《PHP程式設計師面試筆試寶典》 很多企業為了能夠在一年一度的招聘季節中,提前將優秀的程式設計師鎖定到自己的麾下,往往會先下手為強。他們通常採取的措施有兩種:一是招聘實習生;二是多輪招聘。很多人可能會擔心,萬一面試時發揮不好,沒被企業選中,會不會被企業接入黑名單,從此

《PHP程式設計師面試筆試》——如果面試問題曾經遇見過,是否要告知面試官?

如何巧妙地回答面試官的問題? 本文摘自《PHP程式設計師面試筆試寶典》 面試中,大多數題目都不是憑空想象出來的,而是有章可循,只要求職者肯花時間,耐得住寂寞,複習得當,基本上在面試前都會見過相同的或者類似的問題(當然,很多知名企業每年都會推陳出新,這些題目是很難完全複習到位的)。所以,在面試中,求職者曾經

我的新書——《PHP程式設計師面試筆試

你好,是我琉憶。 一個文藝的PHP開發工程師。 很榮幸能夠在這裡帶來我的第一本新書——《PHP程式設計師面試筆試寶典》。 一、創作過程 《PHP程式設計師面試筆試寶典》是我的第一本書,從寫作到出來總共經歷了一整年的時間。它就像我的孩子一樣,十分的努力去創作,也十分的愛惜,創作實際用了

贈送 4 本《 PHP 程式設計師面試筆試

《 PHP 程式設計師面試筆試寶典》歷時一年,由機械工業出版社出版,在 2018 年 11 月問世。全書共八個章節,涉及 面試筆試經驗技巧、PHP 基礎知識、PHP 進階知識,PHP 面向物件、PHP 設計模式、mysql 的優化進階知識等,根據最近 3 年常考的 PHP 面試真題彙集成的 PHP 面試知識點