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

Java基礎(chǔ)教程之static五大應(yīng)用場景

 更新時間:2019年06月30日 10:17:56   作者:工匠初心  
這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)教程之static五大應(yīng)用場景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

static和final是兩個我們必須掌握的關(guān)鍵字。不同于其他關(guān)鍵字,他們都有多種用法,而且在一定環(huán)境下使用,可以提高程序的運(yùn)行性能,優(yōu)化程序的結(jié)構(gòu)。上一個章節(jié)我們講了final關(guān)鍵字的原理及用法,本章節(jié)我們來了解一下static關(guān)鍵字原理及其用法。

一. static特點(diǎn)

static是一個修飾符,通常用于修飾變量和方法,如開發(fā)過程中用到的字典類數(shù)據(jù)都會用到static來修飾,工具類方法,如Dateutils,Stringutils這類工具方法也會用到static來修飾,那么除了這兩種最常用的場景外,是否還有其他場景呢,答案是:有的,總共五種:

  1. static變量
  2. static方法
  3. static代碼塊
  4. static內(nèi)部類
  5. static包內(nèi)導(dǎo)入

static修飾的變量、方法、代碼塊、內(nèi)部類在類加載期間就已經(jīng)完成初始化,存儲在Java Heap(JDK7.0之前存儲在方法區(qū))中靜態(tài)存儲區(qū),因此static優(yōu)于對象而存在。

static修飾的成員(變量、方法)被所有對象所共享,也叫靜態(tài)變量或靜態(tài)方法,可直接通過類調(diào)用(也建議通過類調(diào)用)。

二. static 變量

static變量隨著類的加載而存在,隨著類的消失而消失,當(dāng)類被加載時,就會為靜態(tài)變量在Java Heap中分配內(nèi)存空間,可以通過【類.變量名】和【對象.變量名】的方式調(diào)用,建議直接使用【類.變量名】的方式,

public class Person {
 private String name;

 private static int eyeNum;

 public static int legNum = 2;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public static int getEyeNum() {
  return eyeNum;
 }

 public static void setEyeNum(int eyeNum) {
  Person.eyeNum = eyeNum;
 }
}
public static void main(String[] args) {
 Person person = new Person();
 person.setEyeNum(25);

 Person person1 = new Person();
 person1.setEyeNum(28);
 System.out.println(person.getEyeNum());//28
 System.out.println(person1.getEyeNum());//28
 
 int legNum = person.legNum;
 System.out.println(legNum);//2
}

從上面的例子可以看出靜態(tài)變量是對所有對象共享,一個對象對其值的改動,直接就會造成另一個對象取值的不同。

什么時候使用static變量?

作為共享變量使用,通常搭配final關(guān)鍵字一起使用,比如我們常用的字典類數(shù)據(jù);

private static final String GENERAL_MAN = "man";

減少對象的創(chuàng)建,比如在類開頭的部分,定義Logger方法,用于異常日志采集

private static Logger LOGGER = LogFactory.getLoggger(MyClass.class);

始終返回同一變量,比如我們的單例模式。

三. static 方法

靜態(tài)方法只能訪問靜態(tài)成員(靜態(tài)變量、靜態(tài)方法),而非靜態(tài)方法既可訪問靜態(tài)方法也可訪問非靜態(tài)方法;因?yàn)殪o態(tài)成員優(yōu)于對象而存在,因此無法調(diào)用和對象相關(guān)的關(guān)鍵字,如this,super,無法通過關(guān)鍵字訪問對象資源。

public class Person {
 private String name; 
 private static int eyeNum; 
 public static int legNum = 2; 
 public String getName() {
  return name; 
 } 
 public void setName(String name) {
  this.name = name; 
 } 
 public static int getEyeNum() {
  System.out.println(name);//編譯出錯,name不可用
  return eyeNum;
 } 
 public static void setEyeNum(int eyeNum) {
  Person.eyeNum = eyeNum;  
  this.name = "";//編譯出錯,this不可用
 }
}

什么時候使用static方法?

static方法一般用于與當(dāng)前對象無法的工廠方法、工具方法。如Math.sqrt(),Arrays.sort(),StringUtils.isEmpty()等。

四. static 代碼塊

static代碼塊相對于static變量和static方法來說使用不是那么廣泛,但也算是比較常見的用法了,static代碼塊在加載一個類的時候最先執(zhí)行,且只執(zhí)行一次。

public static Map<String, String> timeTypes;
static {
 timeTypes = new HashMap<>();
 timeTypes.put("year", "年");
 timeTypes.put("quarter", "季");
 timeTypes.put("month", "月");
 timeTypes.put("day", "日");
 System.out.println("初始化1");
}
public static void main(String[] args) {
 System.out.println("初始化2");
}

執(zhí)行結(jié)果是:

初始化1;

初始化2;

什么時候使用static代碼塊?

一般在進(jìn)行初始化操作時,比如讀取配置文件信息,獲取當(dāng)前服務(wù)器參數(shù)等

五. static內(nèi)部類

定義一個內(nèi)部類,加上static,就成為了一個static內(nèi)部類,static只能修飾內(nèi)部類,不能修飾頂級類,靜態(tài)內(nèi)部類在業(yè)務(wù)應(yīng)用系統(tǒng)開發(fā)中使用的不多。

public class StaticCouter {
 private String str0 = "hi"; //非靜態(tài)變量 
 private static String str1 = "hello"; //靜態(tài)變量 
 static class StaticInnerClass{//靜態(tài)內(nèi)部類
  public void getMessage(){
   System.out.println(str0);//編譯出錯
   System.out.println(str1);
  }
 } 
 class NormalInnerClass{//非靜態(tài)內(nèi)部類
  public void getMessage(){
   System.out.println(str0);
   System.out.println(str1);
  }
 }
}

靜態(tài)內(nèi)部類與非靜態(tài)內(nèi)部類有何異同?

靜態(tài)內(nèi)部類 非靜態(tài)內(nèi)部類
不需要有指向外部類的引用 必須通過外部類的new關(guān)鍵字引用
可定義普通變量和方法,也可定義靜態(tài)變量和方法 可定義普通變量和方法,不可定義靜態(tài)變量和方法
可以調(diào)用外部類的靜態(tài)成員,不能調(diào)用外部類的普通成員 可調(diào)用外部類的普通成員和靜態(tài)成員

public static void main(String[] args) {
 //創(chuàng)建靜態(tài)內(nèi)部類實(shí)例 
 StaticInnerClass staticInnerClass = new StaticInnerClass(); 
 //調(diào)用靜態(tài)內(nèi)部類方法 
 staticInnerClass.getMessage(); 
 //創(chuàng)建靜態(tài)內(nèi)部類實(shí)例 
 StaticCouter.StaticInnerClass staticInnerClass1 = new staticCouter.StaticInnerClass(); 
 //調(diào)用靜態(tài)內(nèi)部類方法
 staticInnerClass1.getMessage();
 //創(chuàng)建普通內(nèi)部類實(shí)例
 StaticCouter.NormalInnerClass normalInnerClass = new StaticCouter().new NormalInnerClass();
 //調(diào)用普通內(nèi)部類方法
 normalInnerClass.getMessage();
}

六. static包內(nèi)導(dǎo)入

這個概念不太好理解,舉個例子

public static void main(String[] args) {
 int[] arra = {1,4,5,7};
 Arrays.sort(arra);
 Arrays.asList(arra);
 Arrays.fill(arra, 6);
}

static包導(dǎo)入目的就是去掉重復(fù)的Arrays類名調(diào)用

通過在頂部引入

import static java.util.Arrays.*

即可把Arrays類中所有的靜態(tài)變量,方法,內(nèi)部類等都引入當(dāng)前類中,調(diào)用時直接調(diào)用sort(arra),asList(arra),

java5后引入的,不常用,調(diào)用類方法時會比較簡單,但可讀性不好,慎用。

七. 總結(jié)

static是java中很常用的一個關(guān)鍵字,使用場景也很多,本文主要介紹了它的五種用法,static變量,static方法,static代碼塊,static內(nèi)部類,static包內(nèi)導(dǎo)入,若有不對之處,請批評指正,望共同進(jìn)步,謝謝!

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Java多線程 ReentrantReadWriteLock原理及實(shí)例詳解

    Java多線程 ReentrantReadWriteLock原理及實(shí)例詳解

    這篇文章主要介紹了Java多線程 ReentrantReadWriteLock原理及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 關(guān)于IDEA無法預(yù)覽Markdown文件的解決思路

    關(guān)于IDEA無法預(yù)覽Markdown文件的解決思路

    在IntelliJ IDEA中,有時Markdown文件無法預(yù)覽可能是因?yàn)槲募P(guān)聯(lián)設(shè)置不正確或配置信息錯誤,首先,檢查IDE的File Types設(shè)置,確保.md和.markdown后綴已正確注冊,其次,對照官方配置信息,調(diào)整Markdown設(shè)置
    2024-09-09
  • java 排序算法之希爾算法

    java 排序算法之希爾算法

    這篇文章主要介紹了java 排序算法之希爾排序,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Mybatis 返回值類型和參數(shù)傳遞的配置方法

    Mybatis 返回值類型和參數(shù)傳遞的配置方法

    在 MyBatis 中,返回值類型和參數(shù)傳遞是 Mapper 接口中至關(guān)重要的兩個方面,正確理解和使用它們可以幫助我們高效、準(zhǔn)確地進(jìn)行數(shù)據(jù)庫操作,接下來通過本文給大家介紹Mybatis 返回值類型和參數(shù)傳遞的配置方法,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Springboot pom項(xiàng)目間接依賴包版本與預(yù)期不符原因解決分析

    Springboot pom項(xiàng)目間接依賴包版本與預(yù)期不符原因解決分析

    這篇文章主要介紹了Springboot pom項(xiàng)目間接依賴包版本與預(yù)期不符原因解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Spring Cloud詳解實(shí)現(xiàn)聲明式微服務(wù)調(diào)用OpenFeign方法

    Spring Cloud詳解實(shí)現(xiàn)聲明式微服務(wù)調(diào)用OpenFeign方法

    這篇文章主要介紹了Spring Cloud實(shí)現(xiàn)聲明式微服務(wù)調(diào)用OpenFeign方法,OpenFeign 是 Spring Cloud 家族的一個成員, 它最核心的作用是為 HTTP 形式的 Rest API 提供了非常簡潔高效的 RPC 調(diào)用方式,希望對大家有所幫助。一起跟隨小編過來看看吧
    2022-07-07
  • java編寫Http服務(wù)器下載工具

    java編寫Http服務(wù)器下載工具

    這篇文章主要介紹了java編寫Http服務(wù)器下載工具的方法,工具很簡單,功能也很簡單,代碼就更簡潔了,卻非常實(shí)用,有需要的小伙伴參考下吧。
    2015-03-03
  • Java實(shí)現(xiàn)簡單酒店管理系統(tǒng)

    Java實(shí)現(xiàn)簡單酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Springboot 讀取 yml 配置文件里的參數(shù)值

    Springboot 讀取 yml 配置文件里的參數(shù)值

    本文主要介紹了Springboot 讀取 yml 配置文件里的參數(shù)值,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 詳解SpringBoot實(shí)現(xiàn)JPA的save方法不更新null屬性

    詳解SpringBoot實(shí)現(xiàn)JPA的save方法不更新null屬性

    直接調(diào)用原生Save方法會導(dǎo)致null屬性覆蓋到數(shù)據(jù)庫,使用起來十分不方便。本文詳細(xì)的介紹了如何解決這個問題,非常具有實(shí)用價值,需要的朋友可以參考下
    2018-12-12

最新評論

永丰县| 渭南市| 大渡口区| 镇坪县| 山东省| 始兴县| 盐池县| 石台县| 谷城县| 长沙市| 卫辉市| 六安市| 松溪县| 灵璧县| 蚌埠市| 临漳县| 麻江县| 北流市| 诸城市| 沙雅县| 西平县| 板桥市| 贵定县| 康平县| 龙州县| 和林格尔县| 巴林左旗| 和政县| 和平县| 肇源县| 宁强县| 汉源县| 长子县| 徐州市| 饶平县| 黄陵县| 玛曲县| 唐山市| 乌拉特前旗| 阳山县| 百色市|