国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

JAVA面試題 static關鍵字詳解

2024-05-06 16:53:20
字體:
來源:轉載
供稿:網友

問題

面試官Q1:請說說static關鍵字,你在項目中是怎么使用的?

static 關鍵字可以用來修飾:屬性、方法、內部類、代碼塊;

static 修飾的資源屬于類級別,是全體對象實例共享的資源;

使用 static 修飾的屬性,靜態屬性是在類的加載期間初始化的,使用類名.屬性訪問

案例說明

①修飾成員變量

package com.ant.param; public class StaticFieldDemo {  public static void main(String[] args) {   Foo f1 = new Foo();   Foo f2 = new Foo();   Foo f3 = new Foo();   System.out.println(f1.id + " " + f2.id + " " + f3.id );  } }class Foo{ int id;}

運行結果如下:

0 0 0

上面的代碼我們很熟悉,根據Foo構造出的每一個對象都是獨立存在的,保存有自己獨立的成員變量,相互不會影響,他們在內存中的示意如下:

JAVA,面試題,static,關鍵字

從上圖中可以看出,f1、f2和f3三個變量引用的對象分別存儲在內存中堆區域的不同地址中,所以他們之間相互不會干擾。對象的成員屬性都在這了,由每個對象自己保存。f1.id、f2.id、f3.id相當于“每個人一個水杯”。

我們對上面的代碼,做如下修改:

package com.ant.param; public class StaticFieldDemo {  public static void main(String[] args) {   Foo f1 = new Foo();   Foo f2 = new Foo();   Foo f3 = new Foo();   System.out.println(f1.id + " " + f2.id + " " +   f3.id + " " + Foo.i);  }}class Foo{ int id; static int i=0; public Foo(){  id = i++; }}運行結果如下:0 1 2 3

程序執行過程內存圖如下所示:

第 1 步:加載類

JAVA,面試題,static,關鍵字

static修飾的變量在類加載期間初始化,且在方法區中分配,屬于線程共享區,所有的對象實例共享一份數據。

第 2步:繼續加載類

JAVA,面試題,static,關鍵字

第 3步:繼續加載類

JAVA,面試題,static,關鍵字

最終加載結果如上述三個步驟

②修飾成員方法

static的另一個作用,就是修飾成員方法。相比于修飾成員屬性,修飾成員方法對于數據的存儲上面并沒有多大的變化,因為我們從上面可以看出,方法本來就是存放在類的定義當中的(方法區)。static修飾成員方法最大的作用,就是可以使用"類名.方法名"的方式操作方法,避免了先要new出對象的繁瑣和資源消耗,我們可能會經常在幫助類中看到它的使用:

package com.ant.param;  public class StaticFieldDemo {  private static void print(){   System.out.println("hello");  }  public static void main(String[] args) {   StaticFieldDemo.print();  }}

③修飾靜態代碼塊

靜態代碼塊是在類加載期間運行的代碼塊,由于類只加載一次,所以靜態代碼塊只執行一次!靜態代碼塊用途很常見,一般用來在類加載以后初始化一些靜態資源時候使用。如:加載配置文件等

package com.ant.param;  public class StaticBlockDemo {  public static void main(String[] args) {   Foo foo = new Foo();  } }  class Foo{ //代碼塊,在創建對象的時候執行,使用很少,和構造器差不多 {  System.out.println("創建對象了!"); } //靜態代碼塊,在類加載期間執行,用于加載配置文件或者其他信息等 static{  System.out.println("類加載了!"); } public Foo(){  System.out.println("調用了構造器!"); }}

靜態塊用法:將多個類成員放在一起初始化,使得程序更加規整,對理解對象的初始化過程非常關鍵;

在我的印象中,這些問題一般初中級Java工程師會被問到,都是很常規的面試題,您會了嗎?

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平凉市| 余庆县| 汉川市| 玉溪市| 海城市| 南开区| 天全县| 长治县| 余庆县| 广南县| 屏东市| 定兴县| 隆尧县| 德格县| 遂宁市| 东兰县| 积石山| 邢台市| 贵德县| 揭阳市| 揭东县| 新营市| 句容市| 千阳县| 永康市| 梓潼县| 石楼县| 海淀区| 通州市| 乐陵市| 卢氏县| 乐平市| 苍山县| 马公市| 化州市| 安化县| 耿马| 邵阳市| 平顶山市| 吉林省| 马龙县|