下面是我對靜態變量、常量和方法的一些理解,因爲是學生所以不那麼專業,有問題希望大家提出糾正!
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() 方法就是實例方法,同一個類中的不同對象使用了同一個實例方法後的結果是不一樣的,就像對每個圓求面積,我們用的是相同的方法,但每個圓有着不一樣的面積,實例方法就是這樣,它會隨着它的對象而有所改變,它是創建了對象之後才隨之出現的。
希望我的一些拙見可以對大家有點點幫助!