Java類的實例:創建類,成員方法的聲明和調用
(轉自:http://c.biancheng.net/view/940.html)
1 創建一個學生類,需求描述
創建一個表示學生的實體類 Student,其中有學生姓名、性別和年齡信息。要求使用屬性來表示學生信息,最終編寫測試代碼。
- 定義:定義一個名為 Student 的類。代碼如下:
- 屬性:在類中通過屬性定義學生、性別和年齡,代碼如下:
- public class Student {
- public String Name; // 學生姓名
- public int Age; // 學生年齡
- private boolean Sex; // 學生性別
- }
- public class Student {
- // 學生類
- }
在上述代碼中將學生性別屬性 Sex 設置為 private 作用域。為了對該屬性進行獲取和設置,還需要編寫 isSex 和 setSex 方法。代碼如下:
- public boolean isSex() {
- return Sex;
- }
- public void setSex(boolean sex) {
- this.Sex = sex;
- }
在 Student 類中添加 main() 方法,然后創建兩個學生類的實例,並輸出學生信息。最終代碼如下:
- public static void main(String[] args) {
- Student zhang = new Student(); // 創建第一個實例
- zhang.Name = "張子同";
- String isMan = zhang.isSex() ? "女" : "男";
- System.out.println("姓名:" + zhang.Name + "性別:" + isMan + "年齡:" + zhang.Age);
- Student li = new Student(); // 創建第二個實例
- li.Name = "李子文";
- li.Sex = true;
- li.Age = 15;
- 10. String isWoman = li.isSex() ? "女" : "男";
- 11. System.out.println("姓名:" + li.Name + "性別:" + isWoman + "年齡:" + li.Age);
12. }
new: 使用 new關鍵字 加上 構造方法,來創建一個對象. Student zhang 的意思是,在內存中分配一個變量,名字叫zhang,這個變量是Student類型的;后半部分,new Student(); 這就是new關鍵字和構造方法來創建一個對象, Student()是構造方法的名字。
意思就是說,把這個對象在內存中的地址 賦值 給變量zhang,這就是Java中引用概念,zhang就叫做引用,或者叫引用變量,或者直接叫變量,沒問題,都是它; zhang的值就是一個內存地址,或者叫引用地址。
13. Student zhang = new Student(); // 創建一個實例
輸出結果如下:
姓名:張子同性別:男年齡:0
姓名:李子文性別:女年齡:15
由輸出結果可以看到,在第一個實例 zhang 中由於僅設置了 Name 屬性的值,所以 boolean 類型的 Sex 默認使用值 false,int 類型的 Age 默認使用值 0。第二個實例 li 同時設置了這三個屬性的值。
2 成員方法的聲明和調用
聲明成員方法可以定義類的行為,行為表示一個對象能夠做的事情或者能夠從一個對象取得的信息。類的各種功能操作都是用方法來實現的,屬性只不過提供了相應的數據。一個完整的方法通常包括方法名稱、方法主體、方法參數和方法返回值類型。
成員方法一旦被定義,便可以在程序中多次調用,提高了編程效率。聲明成員方法的語法格式如下:
- public class Test {
- [public|private|protected][static]<void|return_type><method_name>([paramList]) {
- // 方法體
- }
- }
即:
public class 類名 {
public 返回值類型 方法名 (傳遞的參數類型 參數名稱) {
// 方法體
}
}
上述代碼中一個方法包含 4 部分:方法的返回值、方法名稱、方法的參數和方法體。其中 retum_type 是方法返回值的數據類型,數據類型可以是原始的數據類型,即常用的 8 種數據類型,也可以是一個引用數據類型,如一個類、接口和數組等。
除了這些,一個方法還可以沒有返回值,即返回類型為 void,像 main() 方法。method_name 表示自定義的方法名稱,方法的名稱首先要遵循標識符的命名約定,除此之外,方法的名稱第一個單詞的第一個字母是小寫,第二單詞的第一個字母是大寫,依此類推。
paramList 表示參數列表,這些變量都要有自己的數據類型,可以是原始數據類型,也可以是復雜數據類型,一個方法主要依靠參數來傳遞消息。方法主體是方法中執行功能操作的語句。
例 1 為上一節創建的學生類 Student 添加一個可以返回學生信息字符串的方法。代碼如下:
- public class Student {
- public StringBuffer printInfo(Student st) {
- StringBuffer sb = new StringBuffer();
- sb.append("學生姓名:"+st.Name+"\n 學生年齡:"+st.Age+"\n 學生性別:"+st.isSex());
- return sb;
- }
- }
上述代碼創建了一個名稱為 printInfo 的方法,其返回值類型為 StringBuffer(引用數據類型)。該方法需要傳遞一個 Student 類型的參數,最后需要將一個 StringBuffer 類型的數據返回。
1)成員方法的返回值
若方法有返回值,則在方法體中用 return 語句指明要返回的值
return 表達式
或者
return (表達式)
表達式可以是常量、變量、對象等。表達式的數據類型必須與聲明成員方法時給出的返回值類型一致。
2)形參、實參及成員方法的調用
一般來說,可以通過以下方式來調用成員方法:
methodName({paramList})
關於方法的參數,經常會提到形參與實參,形參是定義方法時參數列表中出現的參數,實參是調用方法時為方法傳遞的參數。
例 2
下面 returnMin() 方法中的 m 和 n 是形參,調用 returnMin() 方法時的 x 和 y 是實參。
- public int returnMin(int m,int n) {
- return Math.min(m,n); // m和n是形參
- }
- public static void main(String[] args) {
- int x = 50;
- int y = 100;
- Test t = new Test();
- int i = t.returnMin(x,y); // x和y是實參
- System.out.println(i);
- }
public static void main(String[] args) {
}
viod: 在c語言中有四種數據類型,里面居然有空類型。有一類函數,調用后並不需要向調用者返回函數值, 這種函數可以定義為“空類型”。其類型說明符為void。
在java中只有兩種數據類型,即基本數據類型和引用數據類型。Void - java.lang 中的 類Void 類是一個不可實例化的占位符類,它保持一個對代表 Java 關鍵字 void 的 Class 對象的引用。你可以把void理解成一個特殊的數據類型也可以理解成一個方法的修飾符。
Void是一個類,void就是一個占位符(void返回值為空)
//確定類型
publicclass
Test
{
public
static
void
main(String[]
args)
{
System.out.println(Void.class);
System.out.println(void.class);
}
}
//基本使用
publicclass
Test
{
//返回void,return可有可無
public
void
a1()
{
return;
}
//必須且只能返回null
public
Void
a2()
{
return
null;
}
}
方法的形參和實參具有以下特點:
- 形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在方法內部有效,方法調用結束返回主調方法后則不能再使用該形參變量。
- 實參可以是常量、變量、表達式、方法等,無論實參是何種類型的量,在進行方法調用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值、輸入等辦法使實參獲得確定值。
- 實參和形參在數量、類型和順序上應嚴格一致,否則會發生“類型不匹配” 的錯誤。
- 方法調用中發生的數據傳送是單向的,即只能把實參的值傳送紿形參,而不能把形參的值反向地傳送給實參。因此在方法調用過程中,形參的值發生改變,而實參中的值不會變化。
例 3
下面的示例演示了調用 add() 方法前后形參 x 的變化。
- public int add(int x) {
- x += 30;
- System.out.println("形參 x 的值:"+x);
- return x;
- }
- public static void main(String[] args) {
- int x = 150;
- System.out.println("調用 add() 方法之前 x 的值:"+x);
- Test t = new Test();
- int i = t.add(x);
- System.out.println("實參 x 的值:"+x);
- System.out.println("調用 add() 方法的返回值:"+i);
- }
運行上述程序,輸出結果如下:
調用 add() 方法之前 x 的值:150
形參 x 的值:180
實參 x 的值:150
調用 add() 方法的返回值:180
從輸出結果可以看出,形參 x 值的改變,並沒有影響實參 x。
在調用成員方法時應注意以下 4 點:
- 對無參成員方法來說,是沒有實際參數列表的(即沒有 paramList),但方法名后的括號不能省略。
- 對帶參數的成員方法來說,實參的個數、順序以及它們的數據類型必須與形式參數的個數、順序以及它們的數據類型保持一致,各個實參間用逗號分隔。實參名與形參名可以相同,也可以不同。
- 實參也可以是表達式,此時一定要注意使表達式的數據類型與形參的數據類型相同,或者使表達式的類型按 Java 類型轉換規則達到形參指明的數據類型。
- 實參變量對形參變量的數據傳遞是“值傳遞”,即只能由實參傳遞給形參,而不能由形參傳遞給實參。程序中執行到調用成員方法時,Java 把實參值復制到一個臨時的存儲區(棧)中,形參的任何修改都在棧中進行,當退出該成員方法時,Java 自動清除棧中的內容。
方法體中的局部變量
在方法體內可以定義本方法所使用的變量,這種變量是局部變量。它的生存期與作用域是在本方法內,也就是說,局部變量只能在本方法內有效或可見,離開本方法則這些變量將被自動釋放。
在方法體內定義變量時,變量前不能加修飾符。局部變量在使用前必須明確賦值,否則編譯時會出錯。另外,在一個方法內部,可以在復合語句(把多個語句用括號{}括起來組成的一個語句稱復合語句)中定義變量,這些變量只在復合語句中有效。