一篇文章帶你了解Java中的static關鍵字和靜態變量、靜態方法
一、static關鍵字
使用static修飾的變量和方法分別稱為類變量(或稱靜態變量)和類方法(或稱靜態方法),沒有使用static修飾的變量和方法分別稱為實例變量和實例方法。
二、靜態變量
1.什么是靜態變量
使用static關鍵字修飾成員變量,這個變量叫做靜態變量。
2.例如多個圓形對象,那每個圓形對象都有自己的半徑(radius)和圓周率(PI),因為圓周率是一個固定的常數3.141596,不用每個圓形對象各自擁有。圓周率(PI)作為共享的,每個圓形對象的半徑可能是不一樣的。
3.如何使用靜態變量
例如:
- //圓形類
- public class Ball {
- public double radius;//圓的半徑
- static double PI=3.141956;//圓周率
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Ball b1=new Ball();//創建第一個圓形對象
- Ball b2=new Ball();//創建第二個圓形對象
- Ball.PI=3.141596;//靜態變量賦值
- b1.radius=5;//給第一個圓形的半徑賦值
- b2.radius=8;//給第一個圓形的半徑賦值
- System.out.println("第一個圓形對象的圓周率:"+b1.PI+" "+"半徑為:"+b1.radius);//打印第一個圓形的圓周率和半徑
- System.out.println("第二個圓形對象的圓周率:"+b2.PI+" "+"半徑為:"+b2.radius);//打印第二個圓形的圓周率和半徑
- }
- }
輸出的結果是:
第一個圓形對象的圓周率:3.141956 半徑為:5.0
第二個圓形對象的圓周率:3.141956 半徑為:8.0
上面的代碼中,在Ball類中定義了一個靜態變量PI,用來表示圓周率它是作為所有實例的所共享,因為這個圓周率(PI)是靜態變量可以直接使用Ball.PI的方式調用,也可以使用實例化對象調用,b1.PI。第一個圓形對象和第二個圓形對象的PI屬性均為3.141596。
三、靜態方法
1.什么是靜態方法
靜態變量和方法可以在不創建對象的情況下進行訪問。靜態方法在類的定義方法前面加static就叫做靜態方法。
2.靜態方法的訪問格式同靜態變量一樣
- 類名.方法名
3.怎么使用靜態方法
- public class Ball01 {
- public double radius;//圓的半徑
- public static double PI=3.141596;//圓周率
- //角度轉徑度
- public static double toRadius(double angdeg){
- return angdeg*(Ball01.PI/180);
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- //Ball01 b1=new Ball01();//創建一個圓的對象
- System.out.print(Ball01.toRadius(100));//調用對象的靜態方法
- }
- }
輸出的結果是:
- 1.745331111111111
在上面代碼中,在Ball01類定義了一個靜態的方法toRadius()角度轉徑度,通過對象實例化調用對象的靜態方法。一個靜態方法只能訪問static修飾的成員,因為沒有被static修飾的成員首先需要創建對象才能訪問,而在靜態方法調用可以不用創建對象。
四、靜態代碼塊
1.什么是靜態代碼塊
靜態代碼塊是使用一個大括號{}包圍很多行的代碼,并用static關鍵字修飾的代碼。
2.隨著類的加載而執行,而且只執行一次。一般是使用靜態代碼塊來對類成員變量進行初始化。
3.靜態代碼塊和非靜態代碼塊的寫法
靜態代碼塊:
- 靜態代碼塊:
- static{
- }
- 非靜態代碼塊:
- {
- }
4.怎么使用靜態代碼塊
例如:
- class Person3{
- static String name;
- //靜態代碼塊
- static{
- name="李華";
- System.out.println("Person3類的靜態代碼執行...");
- }
- }
- public class test {
- //靜態代碼塊
- static{
- System.out.println("測試類的靜態代碼執行...");
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Person3 p1=new Person3();//創建第一個Person3對象
- Person3 p2=new Person3();//創建第二個Person3對象
- }
- }
運行的結果是:
- 測試類的靜態代碼執行...
- Person3類的靜態代碼執行...
我們從運行的結果可以看出,兩個靜態代碼塊都被執行。首先是加載類test,在加載類的同時加載靜態代碼塊,然后執行主程序main()。在main方法中創建兩個Person3對象,兩次實例化對象后,靜態代碼只執行一次,就說明了隨著類的加載而執行,而且只執行一次。
五、總結
本文主要介紹了static關鍵字、靜態變量、靜態方法、靜態代碼塊。
使用static修飾的變量和方法分別稱為類變量和類方法,沒有使用static修飾的變量和方法分別稱為實例變量和實例方法。
靜態變量是使用static關鍵字修飾成員變量,如何使用靜態變量案例理解這個用法。靜態方法是在類的定義方法前面加static,通過一個怎么去使用靜態方法案例幫助理解。
靜態代碼塊是使用一個大括號{}包圍很多行的代碼,并用static關鍵字修飾的代碼。希望通過本文的學習,對你有所幫助!
本文轉載自微信公眾號「Java進階學習交流」,可以通過以下二維碼關注。轉載本文請聯系Java進階學習交流公眾號。