最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA面試題 static關鍵字詳解

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

問題

面試官Q(mào)1:請說說static關鍵字,你在項目中是怎么使用的?

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

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

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

案例說明

①修飾成員變量

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

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

從上圖中可以看出,f1、f2和f3三個變量引用的對象分別存儲在內(nèi)存中堆區(qū)域的不同地址中,所以他們之間相互不會干擾。對象的成員屬性都在這了,由每個對象自己保存。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

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

第 1 步:加載類

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

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

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

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

②修飾成員方法

static的另一個作用,就是修飾成員方法。相比于修飾成員屬性,修飾成員方法對于數(shù)據(jù)的存儲上面并沒有多大的變化,因為我們從上面可以看出,方法本來就是存放在類的定義當中的(方法區(qū))。static修飾成員方法最大的作用,就是可以使用"類名.方法名"的方式操作方法,避免了先要new出對象的繁瑣和資源消耗,我們可能會經(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)代碼塊是在類加載期間運行的代碼塊,由于類只加載一次,所以靜態(tài)代碼塊只執(zhí)行一次!靜態(tài)代碼塊用途很常見,一般用來在類加載以后初始化一些靜態(tài)資源時候使用。如:加載配置文件等

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論

七台河市| 和田市| 宁武县| 介休市| 时尚| 马山县| 进贤县| 西丰县| 林西县| 长海县| 尼勒克县| 清远市| 崇左市| 寿阳县| 绿春县| 江川县| 东阿县| 内丘县| 隆德县| 葫芦岛市| 集贤县| 公主岭市| 乌拉特前旗| 延庆县| 莱阳市| 台中市| 杭锦后旗| 徐汇区| 鹤岗市| 水城县| 永州市| 湘潭市| 呼图壁县| 准格尔旗| 天镇县| 忻城县| 始兴县| 台前县| 长治市| 三河市| 铜陵市|