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

詳解static 和 final 和 static final區(qū)別

 更新時間:2019年04月09日 10:14:13   作者:HA_Tinker  
這篇文章主要介紹了static 和 final 和 static final區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

眾所周知,static 是靜態(tài)修飾關鍵字:可以修飾變量,程序塊,方法,類。

1.修飾變量。

得知:如果static修飾的是變量,則JVM會將將其分配在內(nèi)存堆上,該變量就與對象無關,所有對該變量的引用都指向同一個地址。

因此我們使用該變量的時候,直接指明類的靜態(tài)變量,當然修飾符必須 public

public class StaticBean {
   public static String A = "A";
 }

使用方式

 public static void main(String[] args) throws Exception{
    System.out.println(StaticBean.A);
  }

2.修飾程序塊,猜猜輸出結果是什么?。

public class BaseTest {
  
  static{
    System.out.println("B");
  }

  public static void main(String[] args) throws Exception{
    System.out.println("A");
  }
}

結論:JVM就會優(yōu)先加載靜態(tài)塊中代碼,因此會優(yōu)先輸出B,static 修飾代碼塊,這主要用于系統(tǒng)初始化。

B
A

3.修飾方法:在外部調(diào)用靜態(tài)方法時,可以使用"類名.方法名"的方式,也可以使用"對象名.方法名"的方式。而實例方法只有后面這種方式。也就是說,調(diào)用靜態(tài)方法可以無需創(chuàng)建對象,靜態(tài)方法在訪問本類的成員時,只允許訪問靜態(tài)成員,而不允許訪問實例成員變量和實例方法。

public class StaticBean {
  public static String A = "A";
  public String D;
  public static void getMessage(){
    System.out.println(A);
    System.out.println(D);
  }
}

上面代碼,哪句是錯誤的,很顯然。

System.out.println(D);

4.修飾類。在我們的熟知之中,static 修飾符一般用于修飾變量,程序塊,方法,但是什么時候使用static來修飾類呢?

內(nèi)部類。如果在外部類聲明為static,程序會編譯都不會過。

內(nèi)部類特點如下:

  1. 1.不持有外部類的引用(普通內(nèi)部類持有)
  2. 2.可以直接創(chuàng)建實例,不需要先創(chuàng)建外部類(普通內(nèi)部類需要)
  3. 3.可以有靜態(tài)成員變量、方法(普通內(nèi)部類不行)和非靜態(tài)成員變量、方法
  4. 4.只可以直接訪問外部類靜態(tài)成員,不可以直接訪問外部類的非靜態(tài)成員(普通內(nèi)部類可以),需要通過傳入外部類引用的方式才能訪問
  5. 5.加載一個類時,其內(nèi)部類不會同時被加載。一個類被加載,當且僅當其某個靜態(tài)成員(靜態(tài)域、構造器、靜態(tài)方法等)被調(diào)用時發(fā)生

那就很簡單引出,什么時候會使用靜態(tài)內(nèi)部類呢? 我們來看下以下一個例子

public class Outer {
  private int i = 0;

  public Outer() {
    i++;
    System.out.println("=====init Outer "+i+"====");

  }

  public static Outer getInstance(){
    return Inner.INSTANCE;
  }
  //靜態(tài)內(nèi)部類
  public static class Inner{
    private static final Outer INSTANCE = new Outer();
  }
}

調(diào)用方

public class BaseTest {
  public static void main(String[] args) throws Exception{
    for(int i = 0; i < 1000;i++) {
      Outer.getInstance();
    }
  }
}

輸出結果:

=====init Outer 1====

 我們總結下:

由于 INSTANCE 是常量,因此只能賦值一次;它還是靜態(tài)的,因此隨著內(nèi)部類一起加載,這種也是單例懶漢模式的一種實現(xiàn)方式,同時保證了線程安全。

final 關鍵字可以用來修飾類,方法和變量

1.修飾類

表示該類不允許被繼承,final類中的成員方法都會被隱式的指定為final方法。

public final class FinalBean {

  public void test(){

  }
}

2.修飾方法

表示該方法不能被重寫,一個類的private方法會隱式的被指定為final方法。

以下例子SunFinalBean的test方法報錯。

public class FinalBean {

  public final void test(){

  }

  public class SunFinalBean extends FinalBean{
    public void test(){
      
    }
  }
}

3.修飾變量

表示該變量必須初始化,且值不能改變。如果是基本類型則值不能改變,如果是引用類型,則引用地址不能改變,但是這個引用所指向的對象里面的內(nèi)容還是可以改變的。

 猜猜看,以下那句通不過編譯器編譯。

public class FinalBean {
  private final int i = 0;
  private final int j;
  private final String name = "";

  public FinalBean(){
    j = 1;
    this.name.concat("123");
    this.name = "123";
  }
}

這句,記住final的原理即可理解,那為什么this.name.concat("123");不會報錯呢,因為底層實現(xiàn)是返回一個新的String對象

this.name = "123";

那static final 一起用:

static修飾的屬性強調(diào)它們只有一個,final修飾的屬性表明是一個常數(shù)(創(chuàng)建后不能被修改)。static final修飾的屬性表示一旦給值,就不可修改,并且可以通過類名訪問。

static final也可以修飾方法,表示該方法不能重寫,可以在不new對象的情況下調(diào)用。

以上所述是小編給大家介紹的static 和 final 和 static final區(qū)別詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • 關于Java8新特性Optional類的詳細解讀

    關于Java8新特性Optional類的詳細解讀

    Optional類是一個容器類,它可以保存類型T的值,代表這個值存在?;蛘邇H僅保存null,表示這個值不存在,原來用 null 表示一個值不存在,現(xiàn)在Optional 可以更好的表達這個概念。并且可以避免空指針異常,需要的朋友可以參考下
    2023-05-05
  • Java中Array List與Linked List的實現(xiàn)分析

    Java中Array List與Linked List的實現(xiàn)分析

    這篇文章主要給大家介紹了關于Array List與Linked List實現(xiàn)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • Java對象比較之equals與hashCode詳解

    Java對象比較之equals與hashCode詳解

    這篇文章主要介紹了Java對象比較之equals與hashCode詳解,equals?方法和?hashCode?方法是?Object?類中的兩個基礎方法,它們共同協(xié)作來判斷兩個對象是否相等,需要的朋友可以參考下
    2023-12-12
  • 使用Java實現(xiàn)系統(tǒng)托盤功能的介紹(附源碼以及截圖)

    使用Java實現(xiàn)系統(tǒng)托盤功能的介紹(附源碼以及截圖)

    本篇文章介紹了,在Java中實現(xiàn)系統(tǒng)托盤功能的詳解,文中附源碼以及截圖介紹。需要的朋友參考下
    2013-05-05
  • Java代理模式詳細解析

    Java代理模式詳細解析

    這篇文章主要為大家詳細介紹了Java代理模式的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 布隆過濾器面試如何快速判斷元素是否在集合里

    布隆過濾器面試如何快速判斷元素是否在集合里

    這篇文章主要為大家介紹了布隆過濾器面試中如何快速判斷元素是否在集合里的完美回復,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • java編程之AC自動機工作原理與實現(xiàn)代碼

    java編程之AC自動機工作原理與實現(xiàn)代碼

    這篇文章主要介紹了java編程之AC自動機的有關內(nèi)容,涉及其應用場景,運行原理,運行過程,構造方法及Java中的實現(xiàn)代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java匯編源碼如何查看環(huán)境搭建

    Java匯編源碼如何查看環(huán)境搭建

    這篇文章主要介紹了如何在IntelliJ IDEA開發(fā)環(huán)境中搭建字節(jié)碼和匯編環(huán)境,以便更好地進行代碼調(diào)優(yōu)和JVM學習,首先,介紹了如何配置IntelliJ IDEA以方便查看Java字節(jié)碼文件,接著,詳細說明了如何下載和配置HSDIS插件,以便在IDEA中查看Java方法的匯編代碼
    2025-01-01
  • spring導入framework報紅問題

    spring導入framework報紅問題

    這篇文章主要介紹了spring導入framework報紅問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java中的CAS無鎖機制實現(xiàn)原理詳解

    Java中的CAS無鎖機制實現(xiàn)原理詳解

    這篇文章主要介紹了Java中的CAS無鎖機制實現(xiàn)原理詳解,無鎖機制,是樂觀鎖的一種實現(xiàn),并發(fā)情況下保證對共享變量值更改的原子性,CAS是Java中Unsafe類里面的方法,底層通過調(diào)用C語言接口,再通過cup硬件指令保證原子性,需要的朋友可以參考下
    2024-01-01

最新評論

黄陵县| 江门市| 门源| 浪卡子县| 建德市| 竹山县| 哈密市| 安平县| 安仁县| 霍林郭勒市| 福安市| 海安县| 阜南县| 桐城市| 嘉兴市| 榆社县| 肥乡县| 涿鹿县| 阿克| 双柏县| 芦山县| 宁陵县| 宜丰县| 香河县| 安顺市| 锡林郭勒盟| 定州市| 湖南省| 江达县| 大安市| 武冈市| 海原县| 绍兴市| 博罗县| 营口市| 招远市| 名山县| 文山县| 垣曲县| 永新县| 威远县|