Java--static關鍵字

含淚咬牙學習的第七天
今天總結static關鍵字,個人認爲還是比較重要

static關鍵字

用於修飾成員(成員變量和成員函數)

特點
  • 隨着類的加載而加載
  • 優先於對象存在
  • 被所有對象所共享
  • 可以直接被類名調用
注意
  • 靜態方法只能訪問靜態成員
  • 靜態方法中不可以寫this / super 關鍵字
  • 主函數是靜態的
  • 非靜態成員既可以訪問非靜態成員也可以訪問靜態成員(例:就像下列代碼中show()方法就不能被static所修飾,因爲輸出語句中的name和age包含this關鍵字)

內存運行圖
在這裏插入圖片描述
圖解:

  1. 在main函數進棧前代碼區和靜態代碼區就已經存在
  2. 然後main函數進棧,實例化對象s1
  3. s1指向堆裏的一部分空間,存放了類中的name和age,並且可以指向靜態代碼區
  4. s1.show()方法進棧執行,
  5. 執行完畢彈棧
  6. 實例化對象s2
  7. 與s1相同,s2指向堆裏另一部分空間,並且,s2可以指向同一靜態代碼區
  8. s2.show()方法進棧執行,
  9. 執行完畢彈棧
  10. 10.main函數執行完畢彈棧

靜態方法的調用還可以直接類名加屬性名,不用再通過對象

package com.b;

class Student{ 
    static String school="CSDN";       //被static所修飾   靜態變量 
	int age;
	String name;                      //成員變量
	Student(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public void show(){
		System.out.println(name+",來自"+school+","+age+"歲");
	}

}
public class Demo5 {
	public static void main(String[] args)
	{
		Student s1=new Student("zs",20);
		s1.show();
		Student s2=new Student("ls",21);
		s2.show();
		System.out.println(s1.school);             //對象 訪問方式
		System.out.println(Student.school);        //類名 訪問方式
	}
}

成員變量與靜態變量的區別

1.存儲位置不同

  • 成員變量 在堆內存中存儲(對象有特有的數據)
  • 靜態變量 在靜態靜態代碼區存儲(所有對象共享數據)

2.調用方式不同

  • 成員變量 通過對象來調用
  • 靜態變量 可以通過對象,也可以通過類名來調用

3.生命週期不同

  • 成員變量 隨對象的產生而產生,隨對象消失而消失
  • 靜態變量 隨類的產生而產生,隨類的消失而消失

4.別名不同

  • 成員變量 --實例變量
  • 靜態變量 --類變量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章