Java——static關鍵字總結(含義、定義屬性或方法、使用時機)

      網友投稿 932 2025-04-01

      目錄


      1、聲明static屬性

      2、聲明static方法

      3、分析主方法

      3、static應用案例

      1、聲明static屬性

      static關鍵字,主要描述全局的概念,利用該屬性可以定義屬性和方法,但是90%情況下很少直接編寫static。

      現在假設定義一個只描述中國人的類,類中包含:姓名、年齡、國家,按之前的概念設計如下:

      protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      Person perA = new Person("張三",10);

      Person perB = new Person("李四",20);

      Person perC = new Person("王五",10);

      System.out.println(perA.getInfo());

      System.out.println(perB.getInfo());

      System.out.println(perC.getInfo());

      }

      class Person{

      private String name;

      private int age;

      String country = "中華人民共和國"; //該屬性暫時不封裝

      public Person(String name, int age) {

      this.name = name;

      this.age = age;

      }

      public String getInfo(){

      return "姓名:"+this.name+",年齡:"+this.age+",國家:"+this.country;

      }

      }

      以上代碼很簡單,但是分析內存關系時就會發現問題:

      以上紅色標記的是重復的信息,在對象數量少的情況下沒什么問題,但是在數據量大的情況下要修改屬性信息,比如20億,20億對象要修改country屬性,那是巨大的操作量~對整個代碼 的維護很不友好。

      Java——static關鍵字總結(含義、定義屬性或方法、使用時機)

      造成以上問題的根源主要是:類中的普通屬性是每一個對象獨自擁有的,這樣的設計不符號當前的環境,最好是將country設置為公共屬性,所有對象都共享此屬性,這時就可以通過static關鍵字實現。

      【舉例】:使用static關鍵字實現

      protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      Person perA = new Person("張三",10);

      Person perB = new Person("李四",20);

      Person perC = new Person("王五",10);

      perA.country = "中國-唐朝";

      System.out.println(perA.getInfo());

      System.out.println(perB.getInfo());

      System.out.println(perC.getInfo());

      }

      class Person{

      private String name;

      private int age;

      static String country = "中國"; //該屬性暫時不封裝

      public Person(String name, int age) {

      this.name = name;

      this.age = age;

      }

      public String getInfo(){

      return "姓名:"+this.name+",年齡:"+this.age+",國家:"+this.country;

      }

      }

      由以上結果可知,修改了一個對象的屬性后,所有對象的屬性都一起更改,這樣的屬性稱為公共屬性,該屬性必須通過static關鍵字定義,對于公共屬性的內容保存不會在堆棧中,而是保存在全局數據區中,所有的方法保存在全局代碼區之中。內存分析如下:

      但是有這樣一個問題,既然static屬于全局屬性,那么由一個對象進行修改很明顯不合適,最好的做法是利用所有對象的一個最高代表進行操作,即類。對于static定義的屬性可以由類.屬性直接調用。這是比較標準的操作:

      Person.country = "中國-唐朝";

      此時類中存在static和非static屬性:

      所有的普通屬性都是在對象實例化的時候進行內存分配;

      而static可以在沒有實例化對象產生的情況下直接使用。

      System.out.println(Person.country);

      Person.country = "中國-北宋";

      System.out.println(Person.country);

      System.out.println(new Person("張三",20).getInfo());

      由以上操作可知,雖然static屬性定義在類中,但它是完全獨立的,不受對象實例化的控制。

      大多數情況下類的設計都會使用非static屬性,只有表示公共 屬性或與類實例化無關的情況下才會考慮使用static。

      2、聲明static方法

      利用static定義的屬性可以直接通過類名稱進行訪問,static也可以用于方法的定義上,這個方法也同樣可以由類名稱直接進行調用。

      【舉例】:定義static方法

      class Person{

      private String name;

      private int age;

      private static String country = "中華人民共和國"; //該屬性暫時不封裝

      public Person(String name, int age) {

      this.name = name;

      this.age = age;

      }

      public String getInfo(){

      return "姓名:"+this.name+",年齡:"+this.age+",國家:"+this.country;

      }

      public static String getCountry() {

      return country;

      }

      public static void setCountry(String country) {

      Person.country = country;

      }

      }

      static的方法依然不受實例化的限制,所以可以直接由類名稱直接調用。但是此類的方法就存在有兩種了:static與非static,兩者之間的訪問就會出現問題,有如下語法規定:

      所有非static方法可以直接調用此類中的static方法或static屬性。

      static方法不能直接調用此類中的非static方法或非static屬性。

      什么時候使用static方法】:

      類設計過程中,90%都使用非static方法;

      若類中沒有任何屬性,此類不需要定義普通方法,只需要定義static方法(比如開發中常用的自定義工具類,無需實例化對象,無需開辟無用的內存空間);

      3、分析主方法

      最早講解方法定義的時候,實際上給出了兩種方案:

      某方法定義在主類中,由主方法直接調用,格式:public static 返回值類型 方法名稱(){};

      某方法定義在子類中,由實例化對象直接調用,格式:public 返回值類型 方法名稱(){};

      實際開發中,主類基本不會寫太多方法,大部分方法都會封裝在類中。

      Java中的主方法是最長的:

      static:執行類的時候輸入:"java 類名稱",表示由類直接調用;

      void:主方法是程序的起點,無返回值;

      main:系統定義好的方法名稱;

      String args[]:表示程序執行時的輸入參數,初始化輸入參數。

      3、static應用案例

      static在一些系統類庫中大量出現,這些可能是因為定義static方法所導致。本次重點看static屬性,該屬性的一個最好的特點是公共屬性,所有對象均可以對其進行修改。

      【舉例】:實現一個對象個數的統計

      所有新的實例化對象產生時都會調用構造方法,可以在其中增加一個統計功能。

      protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      new Person();

      new Person();

      }

      class Person{

      private static int count = 0;

      public Person() {

      System.out.println("對象個數:"+count++);

      }

      }

      【舉例】:為屬性自動命名

      protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      System.out.println(new Person().getName());

      System.out.println(new Person("張三").getName());

      }

      class Person{

      private static int count = 0;

      private String name;

      public Person(){

      this("無名氏-"+count++);

      }

      public Person(String name) {

      this.name = name;

      }

      public String getName() {

      return name;

      }

      public void setName(String name) {

      this.name = name;

      }

      }

      4、總結

      1)類的設計過程中,首先可以不去考慮static屬性或方法;

      2)使用static方法,大部分情況下有兩種可能性:

      希望不受類實例化的控制;

      類中沒有普通屬性;

      作于202004061520,已歸檔

      ———————————————————————————————————

      本文為博主原創文章,轉載請注明出處!

      若本文對您有幫助,輕抬您發財的小手,關注/評論//,就是對我最大的支持!

      祝君升職加薪,鵬程萬里!

      Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:辦公室oa管理系統(1分鐘之前已更新)
      下一篇:如何做一個表格并打印出來(怎么做一個表格打印出來)
      相關文章
      亚洲欧洲日本精品| 亚洲国产精品lv| 国产AV无码专区亚洲AV男同| 亚洲精品国产摄像头| 久久国产亚洲精品无码| 久久精品国产亚洲| 国产成人亚洲精品青草天美| 亚洲精品国产精品乱码不卡√| 国产中文在线亚洲精品官网| 亚洲片一区二区三区| 国产成人亚洲精品无码AV大片| 亚洲av永久无码| 国产成人亚洲毛片| 亚洲av成人一区二区三区在线观看 | 亚洲AV无码一区二区三区电影| 亚洲人成色77777在线观看| 亚洲综合精品第一页| 亚洲国产成人AV在线播放| 久久久久亚洲AV无码去区首| 韩国亚洲伊人久久综合影院| 国产亚洲美女精品久久| 亚洲av午夜成人片精品电影| 亚洲日韩中文字幕日韩在线| 亚洲老妈激情一区二区三区| 亚洲AV永久无码精品一百度影院 | 亚洲小说区图片区另类春色| 亚洲日本乱码在线观看| 亚洲国产精品一区二区成人片国内 | yy6080亚洲一级理论| 相泽亚洲一区中文字幕| 亚洲精品V欧洲精品V日韩精品 | 国产亚洲欧美在线观看| 亚洲精品久久久www| 自拍偷自拍亚洲精品被多人伦好爽 | 久久精品国产亚洲av日韩| 亚洲乱码中文字幕小综合| 亚洲精品无码专区久久| mm1313亚洲精品无码又大又粗| 久久久久亚洲AV无码专区桃色| 国产V亚洲V天堂A无码| 亚洲视频免费在线看|