一、方法
方法是類或對象的行爲特徵的抽象,從功能上看,方法完全類似於傳統結構化程序設計裏的函數。Java中方法不能獨立存在,所有的方法必須定義在類裏。即方法要麼屬於類,要麼屬於對象。
如果一個方法使用了static
修飾,則該方法屬於類,否則屬於這個類的對象。
所有方法都必須使用“類.方法”或“對象.方法”的形式來調用。有人會問:同一個類中的不同方法相互調用的時候,不是可以直接調用嗎?注意:同一個類的一個方法調用另一個方法時,如果被調方法是普通方法,則默認使用this
作爲調用者;若是類方法(static
修飾),則默認使用類作爲調用者。也就是說,表面上某些方法可以被獨立執行,但實際上還是使用this
或類作爲調用者。
1、參數傳遞
與C/C++一樣,Java的參數傳遞都是形參。不同的是Java提供長度可變的參數傳遞, 方式是在最後一個形參的類型後加增加三點...
來表明該形參可以接受多個參數值,多個參數值將被當成數組傳入。下面給出一個程序示例:
public class Varargs {
public static void test(int a, String... books)
{
System.out.println(a);
for(String book: books)
System.out.println(book);
}
public static void main(String[] args)
{
test(2, "Java初學", "最優化");
}
}
2
Java初學
最優化
需注意:數組形式的形參可以處於形參列表的任意位置,但個數可變的形參只能處於形參列表的最後,也就是說,一個方法中最多隻能有一個長度可變的形參。
2、方法重載
Java允許同一個類裏定義多個同名方法,只要形參列表不同即可。如果同一個類裏面包含了兩個或兩個以上方法的方法名相同,則稱爲方法重載。
編譯的時候,雖然方法名相同,但因爲形參列表不同,因此係統可以將它們分開。舉個例子:
public class getMax {
public static int max(int a, int b)
{
return a > b ? a : b;
}
public static double max(double a, double b)
{
return a > b ? a : b;
}
public static void main(String[] args)
{
int t1 = max(1, 2);
System.out.println(t1);
double t2 = max(1.0, 2.0);
System.out.println(t2);
}
}
2
2.0
二、成員變量和局部變量
根據變量位置的不同,可以將變量分爲兩大類:成員變量和局部變量。成員變量指的是在類範圍裏定義的變量,也就是屬性;局部變量指的是在一個方法內定義的變量。需注意,Java類名一般有一個或者多個單詞組成,每個單詞首字母都需要大寫;變量名由一個或多個單詞組成,其中第一個單詞首字母小寫,其餘單詞首字母大寫。Java中變量可被劃分,如下圖:
類屬性從這個類準備階段起開始存在,直到系統完全銷燬這個類,類屬性的作用域與這個類的生存範圍相同;實例屬性則與類的某個對象的生存範圍相同。訪問方法可以用“類.類屬性”,“實例.實例屬性”或“實例.類屬性”。通過“實例.類屬性”訪問的不是這個實例的屬性,而是這個類的屬性,也就是說,如果通過一個實例修改了類屬性的值,這會導致該類的其他實例來訪問這個類屬性時也將獲得這個被修改過的值。舉個簡單的例子:
public class Variables {
public static int age = 20;
public void chage()
{
age++;
}
public static void main(String[] args)
{
Variables var = new Variables();
var.chage(); // 通過實例修改類屬性的值
System.out.println(age); // age=21, 類屬性的值被修改
}
}
所以,方法在大多數情況下不應該修改類屬性的值!!!
成員變量不需要顯示的初始化,系統會自動初始化的,但局部變量就不同了,方法局部變量和代碼塊局部變量必須指定初始值,否則不可以訪問它們。
Java允許局部變量與成員變量同名,如果方法裏的局部變量與成員變量同名,局部變量會覆蓋成員變量。若需要在方法中引用被覆蓋的成員變量,則可使用this
或類名作爲調用者來訪問成員變量。舉個例子:
public class Variables {
public int N = 1000;
public void test()
{
int N = 9;
int res = N * this.N;
System.out.println(res); // res=1000*9=9000
}
public static void main(String[] args)
{
Variables var = new Variables();
var.test();
}
}
需注意,在設計變量的時候,應儘可能縮小其作用範圍,這樣它在內存中停留的時間就越短,程序的運行性能就越好。能用代碼塊局部變量的地方,就堅決不要使用方法局部變量。