欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA面試題 static關(guān)鍵字詳解

 更新時(shí)間:2019年07月16日 08:34:07   作者:Java螞蟻  
這篇文章主要介紹了JAVA面試題 淺析Java中的static關(guān)鍵字,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

問(wèn)題

面試官Q(mào)1:請(qǐng)說(shuō)說(shuō)static關(guān)鍵字,你在項(xiàng)目中是怎么使用的?

static 關(guān)鍵字可以用來(lái)修飾:屬性、方法、內(nèi)部類、代碼塊;

static 修飾的資源屬于類級(jí)別,是全體對(duì)象實(shí)例共享的資源;

使用 static 修飾的屬性,靜態(tài)屬性是在類的加載期間初始化的,使用類名.屬性訪問(wèn)

案例說(shuō)明

①修飾成員變量

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;
}

運(yùn)行結(jié)果如下:

0 0 0

上面的代碼我們很熟悉,根據(jù)Foo構(gòu)造出的每一個(gè)對(duì)象都是獨(dú)立存在的,保存有自己獨(dú)立的成員變量,相互不會(huì)影響,他們?cè)趦?nèi)存中的示意如下:

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

我們對(duì)上面的代碼,做如下修改:

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++;
 }
}
運(yùn)行結(jié)果如下:
0 1 2 3

程序執(zhí)行過(guò)程內(nèi)存圖如下所示:

第 1 步:加載類

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

第 2步:繼續(xù)加載類

第 3步:繼續(xù)加載類

最終加載結(jié)果如上述三個(gè)步驟

②修飾成員方法

static的另一個(gè)作用,就是修飾成員方法。相比于修飾成員屬性,修飾成員方法對(duì)于數(shù)據(jù)的存儲(chǔ)上面并沒(méi)有多大的變化,因?yàn)槲覀儚纳厦婵梢钥闯?,方法本?lái)就是存放在類的定義當(dāng)中的(方法區(qū))。static修飾成員方法最大的作用,就是可以使用"類名.方法名"的方式操作方法,避免了先要new出對(duì)象的繁瑣和資源消耗,我們可能會(huì)經(jīng)常在幫助類中看到它的使用:

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

③修飾靜態(tài)代碼塊

靜態(tài)代碼塊是在類加載期間運(yùn)行的代碼塊,由于類只加載一次,所以靜態(tài)代碼塊只執(zhí)行一次!靜態(tài)代碼塊用途很常見(jiàn),一般用來(lái)在類加載以后初始化一些靜態(tài)資源時(shí)候使用。如:加載配置文件等

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

靜態(tài)塊用法:將多個(gè)類成員放在一起初始化,使得程序更加規(guī)整,對(duì)理解對(duì)象的初始化過(guò)程非常關(guān)鍵;

在我的印象中,這些問(wèn)題一般初中級(jí)Java工程師會(huì)被問(wèn)到,都是很常規(guī)的面試題,您會(huì)了嗎?

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript中的稀疏數(shù)組與密集數(shù)組[譯]

    JavaScript中的稀疏數(shù)組與密集數(shù)組[譯]

    一般來(lái)說(shuō),JavaScript中的數(shù)組是稀疏的,也就是說(shuō),數(shù)組中的元素之間可以有空隙,因?yàn)橐粋€(gè)數(shù)組其實(shí)就是一個(gè)鍵值映射.本文解釋了如何創(chuàng)建稀疏數(shù)組和不稀疏的數(shù)組
    2012-09-09
  • BootStrap Typeahead自動(dòng)補(bǔ)全插件實(shí)例代碼

    BootStrap Typeahead自動(dòng)補(bǔ)全插件實(shí)例代碼

    本文給大家介紹BootStrap Typeahead自動(dòng)補(bǔ)全插件的實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2016-08-08
  • javascript中的altKey 和 Event屬性大全

    javascript中的altKey 和 Event屬性大全

    本文給大家介紹javascript中的altkey和event屬性大全,涉及到altkey和event屬性語(yǔ)法定義及用法,本文介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2015-11-11
  • 微信小程序?qū)崿F(xiàn)簡(jiǎn)單文字跑馬燈

    微信小程序?qū)崿F(xiàn)簡(jiǎn)單文字跑馬燈

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)簡(jiǎn)單文字跑馬燈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • js multiple全選與取消全選實(shí)現(xiàn)代碼

    js multiple全選與取消全選實(shí)現(xiàn)代碼

    本文章總結(jié)了利用jquery與js實(shí)現(xiàn)multiple全選與取消全選代碼有需要參考的朋友可參考下
    2012-12-12
  • JavaScript防抖動(dòng)與節(jié)流處理

    JavaScript防抖動(dòng)與節(jié)流處理

    這篇文章介紹了JavaScript防抖動(dòng)與節(jié)流處理的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 總結(jié)JavaScript中布爾操作符||與&&的使用技巧

    總結(jié)JavaScript中布爾操作符||與&&的使用技巧

    這篇文章主要介紹了總結(jié)JavaScript中布爾操作符||與&&的使用技巧,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • js+canvas繪制五角星的方法

    js+canvas繪制五角星的方法

    這篇文章主要介紹了js+canvas繪制五角星的方法,涉及JavaScript調(diào)用canvas組件結(jié)合數(shù)學(xué)運(yùn)算繪制圖形的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • 基于JavaScript實(shí)現(xiàn)TAB標(biāo)簽效果

    基于JavaScript實(shí)現(xiàn)TAB標(biāo)簽效果

    js實(shí)現(xiàn)tab標(biāo)簽效果,在項(xiàng)目中經(jīng)常用到,今天抽點(diǎn)時(shí)間把我寫的js實(shí)現(xiàn)tab標(biāo)簽效果源碼分享給大家,對(duì)js tab標(biāo)簽代碼需要的朋友參考下
    2016-01-01
  • JavaScript適配器模式原理與用法實(shí)例詳解

    JavaScript適配器模式原理與用法實(shí)例詳解

    這篇文章主要介紹了JavaScript適配器模式原理與用法,結(jié)合具體實(shí)例形式詳細(xì)分析了JavaScript適配器模式概念、原理、使用方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03

最新評(píng)論