類必須先定義才能使用。類是創(chuàng)建對象的模板,創(chuàng)建對象也叫類的實(shí)例化。
下面通過一個(gè)簡單的例子來理解Java中類的定義:
1
2
3
4
5
6
7
8
9
10
11
12
|
public class Dog{ String name; int age; void bark(){ // 汪汪叫 System.out.println( "汪汪,不要過來" ); } void hungry(){ // 饑餓 System.out.println( "主人,我餓了" ); } } |
對示例的說明:
1
2
3
4
|
public 是類的修飾符,表明該類是公共類,可以被其他類訪問。修飾符將在下節(jié)講解。 class 是定義類的關(guān)鍵字。 Dog 是類名稱。 name、age 是類的成員變量,也叫屬性;bark()、hungry() 是類中的函數(shù),也叫方法。 |
一個(gè)類可以包含以下類型變量:
- 局部變量:在方法或者語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中,方法結(jié)束后,變量就會(huì)自動(dòng)銷毀。
- 成員變量:成員變量是定義在類中、方法體之外的變量。這種變量在創(chuàng)建對象的時(shí)候?qū)嵗ǚ峙鋬?nèi)存)。成員變量可以被類中的方法和特定類的語句訪問。
- 類變量:類變量也聲明在類中,方法體之外,但必須聲明為static類型。static 也是修飾符的一種,將在下節(jié)講解。
構(gòu)造方法
在類實(shí)例化的過程中自動(dòng)執(zhí)行的方法叫做構(gòu)造方法,它不需要你手動(dòng)調(diào)用。構(gòu)造方法可以在類實(shí)例化的過程中做一些初始化的工作。
構(gòu)造方法的名稱必須與類的名稱相同,并且沒有返回值。
每個(gè)類都有構(gòu)造方法。如果沒有顯式地為類定義構(gòu)造方法,Java編譯器將會(huì)為該類提供一個(gè)默認(rèn)的構(gòu)造方法。
下面是一個(gè)構(gòu)造方法示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class Dog{ String name; int age; // 構(gòu)造方法,沒有返回值 Dog(String name1, int age1){ name = name1; age = age1; System.out.println( "感謝主人領(lǐng)養(yǎng)了我" ); } // 普通方法,必須有返回值 void bark(){ System.out.println( "汪汪,不要過來" ); } void hungry(){ System.out.println( "主人,我餓了" ); } public static void main(String arg[]){ // 創(chuàng)建對象時(shí)傳遞的參數(shù)要與構(gòu)造方法參數(shù)列表對應(yīng) Dog myDog = new Dog( "花花" , 3 ); } } |
運(yùn)行結(jié)果:
1
|
感謝主人領(lǐng)養(yǎng)了我 |
說明:
- 構(gòu)造方法不能被顯示調(diào)用。
- 構(gòu)造方法不能有返回值,因?yàn)闆]有變量來接收返回值。
創(chuàng)建對象
對象是類的一個(gè)實(shí)例,創(chuàng)建對象的過程也叫類的實(shí)例化。對象是以類為模板來創(chuàng)建的。
在Java中,使用new關(guān)鍵字來創(chuàng)建對象,一般有以下三個(gè)步驟:
聲明:聲明一個(gè)對象,包括對象名稱和對象類型。
實(shí)例化:使用關(guān)鍵字new來創(chuàng)建一個(gè)對象。
初始化:使用new創(chuàng)建對象時(shí),會(huì)調(diào)用構(gòu)造方法初始化對象。
例如:
1
2
|
Dog myDog; // 聲明一個(gè)對象 myDog = new Dog( "花花" , 3 ); // 實(shí)例化 |
也可以在聲明的同時(shí)進(jìn)行初始化:
1
|
Dog myDog = new Dog( "花花" , 3 ); |
訪問成員變量和方法
通過已創(chuàng)建的對象來訪問成員變量和成員方法,例如:
1
2
3
4
5
6
|
// 實(shí)例化 Dog myDog = new Dog( "花花" , 3 ); // 通過點(diǎn)號(hào)訪問成員變量 myDog.name; // 通過點(diǎn)號(hào)訪問成員方法 myDog.bark(); |
下面的例子演示了如何訪問成員變量和方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public class Dog{ String name; int age; Dog(String name1, int age1){ name = name1; age = age1; System.out.println( "感謝主人領(lǐng)養(yǎng)了我" ); } void bark(){ System.out.println( "汪汪,不要過來" ); } void hungry(){ System.out.println( "主人,我餓了" ); } public static void main(String arg[]){ Dog myDog = new Dog( "花花" , 3 ); // 訪問成員變量 String name = myDog.name; int age = myDog.age; System.out.println( "我是一只小狗,我名字叫" + name + ",我" + age + "歲了" ); // 訪問方法 myDog.bark(); myDog.hungry(); } } |
運(yùn)行結(jié)果:
1
2
3
4
|
感謝主人領(lǐng)養(yǎng)了我 我是一只小狗,我名字叫花花,我 3 歲了 汪汪,不要過來 主人,我餓了 |
Java類的基本運(yùn)行順序
我們以下面的類來說明一個(gè)基本的 Java 類的運(yùn)行順序:
1
2
3
4
5
6
7
8
9
10
11
12
|
public class Demo{ private String name; private int age; public Demo(){ name = "微學(xué)苑" ; age = 3 ; } public static void main(String[] args){ Demo obj = new Demo(); System.out.println(obj.name + "的年齡是" + obj.age); } } |
基本運(yùn)行順序是:
- 先運(yùn)行到第 9 行,這是程序的入口。
- 然后運(yùn)行到第 10 行,這里要 new 一個(gè)Demo,就要調(diào)用 Demo 的構(gòu)造方法。
- 就運(yùn)行到第 5 行,注意:可能很多人覺得接下來就應(yīng)該運(yùn)行第 6 行了,錯(cuò)!初始化一個(gè)類,必須先初始化它的屬性。
- 因此運(yùn)行到第 2 行,然后是第 3 行。
- 屬性初始化完過后,才回到構(gòu)造方法,執(zhí)行里面的代碼,也就是第 6 行、第 7 行。
- 然后是第8行,表示 new 一個(gè)Demo實(shí)例完成。
- 然后回到 main 方法中執(zhí)行第 11 行。
- 然后是第 12 行,main方法執(zhí)行完畢。
作為程序員,應(yīng)該清楚程序的基本運(yùn)行過程,否則糊里糊涂的,不利于編寫代碼,也不利于技術(shù)上的發(fā)展。