比如有各種各樣的汽車,有轎車、貨車、面包車等,這些機(jī)動(dòng)車輛都可以被認(rèn)為是對(duì)象,如果讓我們用一個(gè)詞去概括它們(就是抽象的過(guò)程)那是什么呢?是汽車,它們都可以被稱為汽車(所以說(shuō),類是對(duì)象的抽象)。汽車這個(gè)概念是我們跟據(jù)不同的汽車抽象出來(lái)的,它能包括馬路上所有的機(jī)動(dòng)車輛,那么汽車這個(gè)概念就可以針對(duì)我們java中的類,它并不是具體指哪一輛汽車,也不是具體指那一種汽車,它是一個(gè)統(tǒng)稱(模板)它具有一定的內(nèi)容(屬性的集合),比如說(shuō),必須動(dòng)力驅(qū)動(dòng)、有車輪等屬性,如果想讓一個(gè)對(duì)象被稱為是汽車,你必須滿足這些屬性(類是模板),如果是馬拉的車,那就不能叫汽車了。這就是Java中類概念的內(nèi)涵。
現(xiàn)在我們已經(jīng)抽象出一個(gè)類——汽車類,汽車有不同的牌子,有不同的顏色,不同的形狀,我們稱每一輛具體的汽車為汽車類的一個(gè)實(shí)例,從汽車類到具體汽車的過(guò)程被稱為實(shí)例化的過(guò)程,又稱為類(汽車類)的實(shí)例化。在Java中一個(gè)類的實(shí)例化是通過(guò)關(guān)鍵字“new”來(lái)進(jìn)行的。
比如說(shuō)我們現(xiàn)在聲明一個(gè)汽車類:
public class Car
{
……
}
進(jìn)著進(jìn)行一個(gè)類的實(shí)例化:
new Car();
一個(gè)類的實(shí)例是針對(duì)一個(gè)具體的對(duì)象的,它是一些具體屬性的集合,
設(shè)計(jì)自己的類
下面設(shè)計(jì)一個(gè)自己的類,我們的目的是做一個(gè)小型的學(xué)生管理系統(tǒng),既然是學(xué)生管理系統(tǒng),我們必須要擁有學(xué)生類,下面我們就開(kāi)始設(shè)計(jì)一個(gè)學(xué)生類。
需求分析:
1、 對(duì)于一個(gè)學(xué)生類(class Student),作為整個(gè)系統(tǒng)最核心的類,我們希望它能包括學(xué)生公有的基本信息:學(xué)生姓名、學(xué)號(hào)、性別、出生年月、專業(yè)、籍貫等。
2、 做為學(xué)生類的實(shí)例,我們希望能通過(guò)設(shè)置或訪問(wèn)來(lái)修改這些學(xué)生的不同信息。
public class StudentTest
{
public static void main(String[] args)
{
Student tom=new Student("Tom","20020410");
tom.setStudentSex("man");
tom.setStudentAddress("
System.out.println(tom.toString());
}
}
class Student
{
private String strName=""; //學(xué)生姓名
private String strNumber=""; //學(xué)號(hào)
private String strSex=""; //性別
private String strBirthday=""; //出生年月
private String strSpeciality=""; //專業(yè)
private String strAddress="";
public Student(String name,String number)
{
strName=name;
strNumber=number;
}
public String getStudentName()
{
return strName;
}
public String getStudentNumber()
{
return strNumber;
}
public void setStudentSex(String sex)
{
strSex=sex;
}
public String getStudentSex()
{
return strSex;
}
public String getStudentBirthday()
{
return strBirthday;
}
public void setStudentBirthday(String birthday)
{
strBirthday=birthday;
}
public String getStudentSpeciality()
{
return strSpeciality;
}
public void setStudentSpeciality(String speciality)
{
strSpeciality=speciality;
}
public String getStudentAddress()
{
return strAddress;
}
public void setStudentAddress(String address)
{
strAddress=address;
}
public String toString()
{
String information="學(xué)生姓名="+strName+",學(xué)號(hào)="+strNumber;
if(!strSex.equals(""))
information+=",性別="+strSex;
if(!strBirthday.equals(""))
information+=",出生年月="+strBirthday;
if(!strSpeciality.equals(""))
information+=",專業(yè)="+strSpeciality;
if(!strAddress.equals(""))
information+=",籍貫="+strAddress;
return information;
}
}
分析:
在程序中我們構(gòu)建了一個(gè)學(xué)生類的實(shí)例:
Student tom=new Student("Tom","20020410");
這樣的過(guò)程就是類的實(shí)例化的過(guò)程。tom是Student類實(shí)例的句柄,也就是我們所說(shuō)的對(duì)象句柄,在后面對(duì)對(duì)象所進(jìn)行的任何操作,都是通過(guò)操作對(duì)象句柄進(jìn)行的。我們通過(guò)關(guān)鍵字new生成Student類的一個(gè)實(shí)例,一個(gè)實(shí)例代表的是一個(gè)特定屬性的對(duì)象,我們生成的特定對(duì)象是學(xué)生:姓名是tom,學(xué)號(hào)是20020410的一個(gè)學(xué)生。
構(gòu)造器(構(gòu)造方法)
能過(guò)關(guān)鍵字new來(lái)生成對(duì)象的實(shí)例,是通過(guò)構(gòu)造器(constructor)來(lái)實(shí)現(xiàn)的。簡(jiǎn)單的說(shuō):構(gòu)造器是同類名相同的特殊方法。
public Student(Student name,String number)
{
strName=name;
strNumber=number;
}
當(dāng)構(gòu)造一個(gè)學(xué)生類的實(shí)例時(shí),學(xué)生類的構(gòu)造器就被啟動(dòng),它給實(shí)例字段賦值。
構(gòu)造器與方法的不同之處是:構(gòu)造器只能與關(guān)鍵字new一起使用,構(gòu)建新的對(duì)象。構(gòu)造器不能應(yīng)用于一個(gè)已經(jīng)存在的對(duì)象來(lái)重新設(shè)置實(shí)例字段的值。
構(gòu)造器的特點(diǎn):
1、 構(gòu)造器與類名相同(包括大小寫(xiě))
2、 一個(gè)類可有多個(gè)構(gòu)造器。
3、 構(gòu)造器可以有0個(gè)、1個(gè)或多個(gè)參數(shù)。
4、 構(gòu)造器沒(méi)的返回值,但不能用void修飾。
構(gòu)造器總是和new運(yùn)算符一起被調(diào)用。