程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java語言核心--面向對象之static關鍵字

java語言核心--面向對象之static關鍵字

編輯:關於JAVA
 

static關鍵字用處

  1.用於修飾成員變量和成員函數

  被修飾後的成員具有以下特點:

  1.隨著類的加載而加載

  2.優先於對象存在

  3.被所有對象所共享

  4.可以直接被類名調用

  使用注意

  1.靜態方法只能訪問靜態成員;非靜態方法也可以訪問靜態成員

  2.靜態方法中不可以寫this,super關鍵字

  主函數是靜態的

  實例變量(成員變量)和類變量(靜態變量)的區別

  1.生命周期不同

  成員變量隨著對象的創建而存在,隨著對象的回收而釋放;

  靜態變量隨著類的加載而存在隨著類的消失而消失

  2.調用方式不同

  成員變量只能被對象調用 

  靜態變量能被對象調用也能被類名調用(一般建議使用類名調用)

  3.別名不同

  成員變量也叫實例變量 

  靜態變量也叫類變量

  4.數據的存儲位置不同

  成員變量數據存儲在堆內存中的對象中,所以是對象的特有數據  

  靜態變量數據存儲在方法區(數據區或共享數據區)的靜態區中,所以也叫對象的共享數據

  內存圖解

  以下代碼在內存中的執行:

class Person{
  private String name;
  private int age;
  static String country = "CN";
  public Person(String name, int age){
  this.name = name;
  this.age = age;
  }
  public void show(){
  System.out.println(Person.country+":"+this.name+":"+this.age);
  }
  public static void method(){
  System.out.println(Person.country);
  }
  }
  class StaticDemo2{
  public static void main(String[] args){
  Person.method();
  Person p = new Person("java",20);
  p.show();
  }
  }

  內存圖解為:

static

  說明:

  1.當執行StaticDemo2這個類時,就會在方法區中創建一個屬於該類的區域,並且加載默認的構造函數,接著在StaticDemo2的靜態區中加載main方法。

  2.main方法進棧,並開始執行第一句代碼:Person.method(); 由於是類名的調用,虛擬機會在classpath環境變量下找Person類(沒有配置classpath則在當前目錄下找),找到後,就會把該類加載進方法區,同StaticDemo2也會分為靜態和非靜態區。

  3.要執行method方法,所以method方法進棧,運行 System.out.println(Person.country);代碼,輸出“CN”。return掉該方法後,該方法出棧。

  4.執行new Person對象的操作,該操作前上篇隨筆(構造函數中)已有分析,這裡不累述。

  5.執行完所有代碼後,main方法出棧。

  靜態代碼塊

  static {

  System.out.println("這是靜態代碼塊");

  }

  1.靜態代碼塊

  隨著類的加載而執行,並且執行一次。屬於類。

  2.作用

  用於給類進行初始化。比如像javaAPI提供的Math類,全部為靜態的方法,不允許創建對象,這個時候不能用構造 函數進行初始化,因為構造函數一般是給對象初始化,不能創建對象時不可使用。所以就要使用靜態代碼塊來進行一些初始化的操作。

  構造代碼塊

  不同於靜態代碼塊,是屬於類的代碼塊,如:

class Demo{
  {
  System.out.println("這是構造代碼塊");
  }
  //。。。
  }

  和對象有關

  可以給所有對象進行初始化,構造函數是給對應的對象進行針對性的初始化。

  每次創建對象時都會執行。靜態代碼塊是在類加載時執行一次。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved