国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彰化市| 萝北县| 赤水市| 惠来县| 沙坪坝区| 昌都县| 濉溪县| 珠海市| 蒲江县| 南乐县| 咸丰县| 自贡市| 武强县| 东辽县| 安远县| 镇平县| 和静县| 南城县| 四川省| 德庆县| 珠海市| 邵东县| 新昌县| 东至县| 肥西县| 景泰县| 沁阳市| 铜川市| 天祝| 濉溪县| 南京市| 济源市| 资源县| 蓝山县| 兴仁县| 岳西县| 远安县| 察隅县| 莎车县| 宁晋县| 定远县|