91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java基礎教程之static五大應用場景

發布時間:2020-10-13 02:57:17 來源:腳本之家 閱讀:146 作者:工匠初心 欄目:編程語言

前言

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

一. static特點

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

  1. static變量
  2. static方法
  3. static代碼塊
  4. static內部類
  5. static包內導入

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

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

二. static 變量

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

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
}

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

什么時候使用static變量?

作為共享變量使用,通常搭配final關鍵字一起使用,比如我們常用的字典類數據;

private static final String GENERAL_MAN = "man";

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

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

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

三. static 方法

靜態方法只能訪問靜態成員(靜態變量、靜態方法),而非靜態方法既可訪問靜態方法也可訪問非靜態方法;因為靜態成員優于對象而存在,因此無法調用和對象相關的關鍵字,如this,super,無法通過關鍵字訪問對象資源。

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方法一般用于與當前對象無法的工廠方法、工具方法。如Math.sqrt(),Arrays.sort(),StringUtils.isEmpty()等。

四. static 代碼塊

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

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

執行結果是:

初始化1;

初始化2;

什么時候使用static代碼塊?

一般在進行初始化操作時,比如讀取配置文件信息,獲取當前服務器參數等

五. static內部類

定義一個內部類,加上static,就成為了一個static內部類,static只能修飾內部類,不能修飾頂級類,靜態內部類在業務應用系統開發中使用的不多。

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

靜態內部類與非靜態內部類有何異同?

靜態內部類 非靜態內部類
不需要有指向外部類的引用 必須通過外部類的new關鍵字引用
可定義普通變量和方法,也可定義靜態變量和方法 可定義普通變量和方法,不可定義靜態變量和方法
可以調用外部類的靜態成員,不能調用外部類的普通成員 可調用外部類的普通成員和靜態成員

public static void main(String[] args) {
 //創建靜態內部類實例 
 StaticInnerClass staticInnerClass = new StaticInnerClass(); 
 //調用靜態內部類方法 
 staticInnerClass.getMessage(); 
 //創建靜態內部類實例 
 StaticCouter.StaticInnerClass staticInnerClass1 = new staticCouter.StaticInnerClass(); 
 //調用靜態內部類方法
 staticInnerClass1.getMessage();
 //創建普通內部類實例
 StaticCouter.NormalInnerClass normalInnerClass = new StaticCouter().new NormalInnerClass();
 //調用普通內部類方法
 normalInnerClass.getMessage();
}

六. static包內導入

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

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

static包導入目的就是去掉重復的Arrays類名調用

通過在頂部引入

import static java.util.Arrays.*

即可把Arrays類中所有的靜態變量,方法,內部類等都引入當前類中,調用時直接調用sort(arra),asList(arra),

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

七. 總結

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

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

林周县| 白城市| 门源| 宽城| 伽师县| 金平| 保康县| 景东| 商河县| 新源县| 杭州市| 威宁| 东辽县| 荣昌县| 大化| 吉水县| 天柱县| 彩票| 西青区| 泗阳县| 莱西市| 胶南市| 集贤县| 左权县| 唐山市| 大荔县| 拉孜县| 汕头市| 乾安县| 灵武市| 漳州市| 景宁| 封丘县| 绍兴县| 库尔勒市| 商水县| 三原县| 莆田市| 丁青县| 竹北市| 航空|