【Java筆記】靜態變量、常量和方法

下面是我對靜態變量、常量和方法的一些理解,因爲是學生所以不那麼專業,有問題希望大家提出糾正!

 

import java.lang.Math;

public class Test{
	public static void main(String[] args){
		System.out.println("The number of circle is " + Circle.circleNumber);
		
		Circle circle1 = new Circle(4);
		System.out.println("circle1.radius = " + circle1.radius + "\tcircle1.circleNumber = " 
							+ circle1.circleNumber + "\tCircle.circleNumber = " + Circle.circleNumber
							+ "\tcircle1.getArea() = " + circle1.getArea());
		
		Circle circle2 = new Circle(2);
		System.out.println("circle2.radius = " + circle2.radius + "\tcircle1.circleNumber = " 
							+ circle2.circleNumber + "\tCircle.circleNumber = " + Circle.circleNumber
							+ "\tcircle2.getArea() = " + circle2.getArea());
	}
}

class Circle {
	double radius;
	static int circleNumber;
	
	Circle () {
		radius = 1.0;
		circleNumber ++;
	}
	
	Circle (double radius) {
		this.radius = radius;
		circleNumber ++;
	}
	
	double getArea() {
		return radius * radius * Math.PI;
	}
}

 

輸出結果是:

The number of circle is 0
circle1.radius = 4.0     circle1.circleNumber = 1     Circle.circleNumber = 1     circle1.getArea() = 50.26548245743669
circle2.radius = 2.0     circle1.circleNumber = 2     Circle.circleNumber = 2     circle2.getArea() = 12.566370614359172

 

與靜態相對的就是實例,實例是要依靠具體對象的,而靜態不需要。

 

首先是靜態變量

 

Circle 類有兩個變量,radius 是實例變量,circleNumber 就是靜態變量,聲明靜態變量只需要在前面加上修飾符 static 即可。

 

實例變量是要依靠具體的對象才能夠存在的,是被綁定到類的某個特定的實例,它是不能被同一個類的不同對象所共享的。例如,上面我們創建的 circle1 和 circle2 的 radius 是不相關的,是被儲存在不同內存位置的變量,在不同的對象中 radius 的值是不同的。

 

靜態變量是不需要依靠具體的對象存在的,即使沒有創建對象也是可以訪問的,例如,上面主方法的第一句輸出語句中就直接調用了 circleNumber 。

它是被同一個類的所有對象共享的,同個類的不同對象的 circleNumber 變量是儲存在同一個內存位置的,是相關的,修改同一個類中的某個對象的 circleNumber 的值會改變所有該類對象的 circleNumber  的值。例如,上面創建了 circle2 後自增 circleNumber ,屬於同一個類的 circle1 的circleNumber 也發生了改變。

靜態變量可以通過類名進行訪問(如:Circle.circleNumber)而實例變量不行,因爲實例變量是依靠具體對象存在的。

 

靜態常量也是被用一個類中的所有對象所共享的,在前面加上 final static 即可聲明爲靜態常量,final 是聲明常量的修飾符。

 

靜態方法也是不需要依靠具體對象而可以使用的,JAVA 中存在大量的靜態方法,我們使用的 Math 類中的所有方法都是靜態方法,你不需要創建 Math 對象就可以調用它的方法。

 

實例方法則不同,它是要依靠具體的對象的,如上面的 getArea() 方法就是實例方法,同一個類中的不同對象使用了同一個實例方法後的結果是不一樣的,就像對每個圓求面積,我們用的是相同的方法,但每個圓有着不一樣的面積,實例方法就是這樣,它會隨着它的對象而有所改變,它是創建了對象之後才隨之出現的。

 

希望我的一些拙見可以對大家有點點幫助!

發佈了34 篇原創文章 · 獲贊 28 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章