版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
面向?qū)ο蟪绦蛟O(shè)計(jì)
期末考試范圍
面向?qū)ο蟛糠譃橹?/p>
Chapter8,10,11,13,14
時(shí)間2小時(shí),英文題目,熟記每章后面的英文術(shù)語(KeyTerms)
變量和方法
變量、方法,如:
〃變量的申明:數(shù)據(jù)類型變量名
inta;
〃方法的申明:返回類型方法名(參數(shù)列表){語句}
intadd(inta,intb){…}
voidsetParameter(inta,intb){…}
注意大小寫
main方法
main方法是一個(gè)特殊的方法,是程序運(yùn)行的入口
main方法的形式是固定的。
publicstaticvoidmain(String[]args){//Stringargs[]
inta=10;
intb=12;
intsum=a+b;
}
Java程序構(gòu)成
Java是一種完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,程序中不允許單獨(dú)出現(xiàn)任
何方法
類是構(gòu)成Java程序的基本單位,也就是說,前面出現(xiàn)的變量、方法
都必須申明在類的內(nèi)部。這些變量和方法稱為類的成員變量(屬性,
Attribute)和成員方法(Method),統(tǒng)稱為類的成員(Member)。
一個(gè)Java程序可以包含多個(gè)類,這些類可以封裝在不同的包中
Java類
申明類的語法規(guī)則
修飾符class類名{
變量的申明〃成員變量(屬性)
方法的申明〃成員方法
}
申明成員變量和申明成員方法的次序無關(guān)
一個(gè)類可以同時(shí)申明多個(gè)成員變量和成員方法,也可以不申明任何變
量或者方法,這些都是合法的。
在方法的內(nèi)部也可以申明變量,這樣的變量稱為局部變量。
Java類舉例
publicclassPerson{
〃屬性:name、age>gender
〃方法:setName
〃方法:getName
}
Java程序舉例
綜合以上知識(shí),我們將前面的main方法申明為類Test的一個(gè)成員:
publicclassTest{
publicstaticvoidmain(String[]args){
inta=10;〃變量a是一個(gè)局部變量
intb=12;
intsum=a+b;
習(xí)慣:類名首字母大寫,變量/方法名首字母小寫
數(shù)據(jù)類型
簡單數(shù)據(jù)類型:如int
類也是一種數(shù)據(jù)類型,稱為引用數(shù)據(jù)類型(復(fù)雜數(shù)據(jù)類型,reference
type)o因此以下變量和方法的申明都是正確的:
inta=10;
Personp;
Testb;
PersongetPerson(){---}
我們有時(shí)候也將類稱為類型,如變量p的類型為Person類型,注意:
這時(shí)候程序中必須已經(jīng)申明了Person類,否則將產(chǎn)生錯(cuò)誤。
Java程序舉例
classPerson{}
publicclassTest{
publicstaticvoidmain(---){
inta=10;〃變量a是一個(gè)局部變量
intb=12;
intsum=a+b;
Personp;
)
)
該Java程序由Person和Test兩個(gè)類構(gòu)成
自定義類和預(yù)定義類
Java已經(jīng)預(yù)先定義了很多類,這些類稱為預(yù)定義類
如:String
與此相對(duì)應(yīng),由我們自己定義的類則稱為自定義類,如前面的Person
類和Test類
如前面所說,類是一種數(shù)據(jù)類型。因此,無論是預(yù)定義類還是自定義
類,在程序中我們都可以用它們來申明變量的數(shù)據(jù)類型、或者作為方
法的返回類型。
Java類舉例
publicclassPerson{
Stringname;
intage;
publicvoidsetName(Stringstr){…}
publicStringgetName(){returnname;}
}
Java源程序
源程序保存在后綴名為Java的文件中。
一個(gè)Java源文件可以同時(shí)包含多個(gè)類的申明,但是其中最多只能有
一個(gè)用public修飾的類,即公有類。
源文件的名稱必須和公有類的名稱相一致,包括大小寫
舉例:Hello.java
publicclassHello
(
publicstaticvoidmain(Stringargs[])
(
System.out.println(HelloWorld!);
)
}
對(duì)象的創(chuàng)建
對(duì)象是類的實(shí)例
假設(shè)程序中申明了Person類,那么我們就可以在程序的任何地方創(chuàng)
建任意的Person類的實(shí)例,即Person類型的對(duì)象
對(duì)象創(chuàng)建的語法形式:
new類名(…);〃括號(hào)中是否有參數(shù),要依據(jù)構(gòu)造方法
比如:newPerson();
Person類
publicclassPerson{
Stringname;
intage;
publicvoidsetAge(inta){
age=a;
}
publicintgetAge(){
returna;
}
}
對(duì)象的存在形式
對(duì)象存在于內(nèi)存(堆,heap)
0x3A080x3A5C
name
age
對(duì)象的引用
對(duì)象由相應(yīng)類型的變量引用,如:
Personpl=newPerson();
Personp2=newPerson();
0x3A5C
對(duì)象的操作
語法形式:對(duì)象成員,如:
pl.setAge(18);
p2.setAge(29);
0X3A5C
必須是對(duì)象.成員,不能是類.成員,除非該成員是static修飾的
Person.setAge(20),Error
關(guān)于方法調(diào)用
如方法有返回類型,則必須使用return語句,返回的值必須與返回類
型匹配
void返回類型可以沒有return語句,也可以包含一個(gè)沒有值的return
語句
publicclassPerson{
intage;
publicvoidsetAge(inta){
age=a;
return;
}
}
構(gòu)造方法(Constructor)
Java中的每個(gè)類都有構(gòu)造方法,構(gòu)造方法具有和類名相同的名稱(包
括大小寫),而且無任何返回值(包括void)。
構(gòu)造方法一般對(duì)成員變量賦一些初值;如果一個(gè)類沒有聲明構(gòu)造方法,
Java自動(dòng)為該類生成一個(gè)默認(rèn)的無參的構(gòu)造方法,并且該默認(rèn)構(gòu)造方
法的內(nèi)容為空。即,Java類可以通過兩種方式獲得構(gòu)造方法
使用系統(tǒng)默認(rèn)的無參構(gòu)造方法
顯式定義一個(gè)或多個(gè)構(gòu)造方法
一旦顯式定義了構(gòu)造方法,系統(tǒng)不再提供默認(rèn)構(gòu)造方法
一個(gè)類至少有一個(gè)構(gòu)造方法,可以有多個(gè)構(gòu)造方法,根據(jù)參數(shù)的不同
決定執(zhí)行哪一個(gè)(重載)
Person類
publicclassPerson{
Stringname;
intage;
publicPerson(){}〃構(gòu)造方法
publicvoidsetAge(inta){age=a;}
publicintgetAge(){returna;}
)
引用數(shù)據(jù)類型
8種基本數(shù)據(jù)類型
intlongshortbooleanchardoublefloatbyte
除此以外的數(shù)據(jù)類型稱為引用類型
引用類型數(shù)據(jù)以對(duì)象的形式存在
引用類型變量的值是某個(gè)對(duì)象的句柄(對(duì)象在內(nèi)存中的地址),而不是
對(duì)象本身
聲明引用類型變量時(shí),系統(tǒng)只為該變量分配引用空間,并未創(chuàng)建一個(gè)
具體的對(duì)象,引用類型可賦值為null
類中的變量
屬性變量(成員變量):在方法體外定義的變量,是類的成員,可以是
基本類型、引用類型甚至是類本身,只要對(duì)象存在其屬性變量就存在。
作用域:類。
局部變量:在方法體內(nèi)定義的變量,也稱為stackvariable,作用域:
方法。方法執(zhí)行時(shí)存在,方法執(zhí)行完畢后消失
局部變量在使用前必須進(jìn)行初始化,而屬性變量可以不需要顯式進(jìn)行
初始化,因?yàn)樵趧?chuàng)建對(duì)象時(shí)會(huì)進(jìn)行默認(rèn)的初始化。
舉例:MyDate類
publicclassMyDate{
privateintday=12;
privateintmonth=6;
privateintyear=1900;
publicMydate(intd,intm,inty){
year=y;
month=m;
day=d;
}
publicvoiddisplay(){
System.out.println(year+"/"+month+"/"+day);
}
publicstaticvoidmain(String[]args){
MyDatem;
m=newMyDate(22,9,2001);
m.display();
}
)
對(duì)象的構(gòu)造和初始化(1)
為引用類型變量分配引用空間MyDatem;
mnull
創(chuàng)建新對(duì)象-首先為新對(duì)象分配內(nèi)存空間,并進(jìn)行屬性(實(shí)例變量)的
默認(rèn)初始化,new
day
mnullmonth
year
對(duì)象的構(gòu)造和初始化(2)
Java引用類型成員變量默認(rèn)初始化原則
成員變量類型取值
byte0
short0
int0
long0L
char*\u0000,
float0.0F
double0.00
booleanfalse
所有引用類型null
對(duì)象的構(gòu)造和初始化(3)
進(jìn)行屬性(成員變量)的顯式初始化,顯式初始化取值來自于類的定義
中屬性聲明部分
privateintday=12;
privateintmonth=6;
privateintyear=1900;
day
m|null|month
year
對(duì)象的構(gòu)造和初始化(4)
執(zhí)行構(gòu)造方法
publicMydate(inty,intm,intd){
year=y;
month=m;
day=d;
}
newMyDate(22,9,2001);
mnull
對(duì)象的構(gòu)造和初始化(5)
為引用類型變量m賦值
m=newMyDate(22,9,2001);
m0x3a478b
封裝類
Java編程語言提供wrapper類來操作作為對(duì)象的原始數(shù)據(jù)元素。
每個(gè)Java原始數(shù)據(jù)類型在java.lang包中具有相應(yīng)的wrapper類。
使用wrapper類的示例:
intpint=420;
Integerwlnt=newInteger(plnt);
//thisiscalledboxing
intp2=Value();
//thisiscalledunboxing
自動(dòng)裝箱與開箱
Integer(]intArray={newInteger(2)rabE-llnteger[)intArray={2,3};
newInteger(4),newInteger(3));
(a)(b)
Integeri=3;
不僅限于Integer,所有wrapper類都可以
Object[]o={3,false};〃合法
轉(zhuǎn)換
Integerintegerobject=lnteger.valueOf("12");
intnumber=Integer.parselnt("12");
注:lnteger.parselnt("xyz")編譯時(shí)沒問題,但運(yùn)行時(shí)會(huì)異常
訪問權(quán)限(Permission)
Public;Protected;缺省(default);private
ModifierAccessedAccessedAccessedAccessed
onmeirbei'sfromthefromthefromafromadifferent
inaclasssameclasssamepackagesubclasspackage
publicMMM
protectedMM—
defaultMM——
privateM———
數(shù)組
數(shù)組由一組相同類型的元素構(gòu)成
元素的個(gè)數(shù)稱為數(shù)組的長度,通過數(shù)組下標(biāo)訪問元素,下標(biāo)0代表第一
個(gè)元素
數(shù)組是一個(gè)對(duì)象,數(shù)組類型屬于引用數(shù)據(jù)類型,可賦值為null.
數(shù)組的申明和創(chuàng)建
?數(shù)組的申明
inta[];或intQa;
Pointp[];或PointOp;
?數(shù)組對(duì)象必須通過new關(guān)鍵字創(chuàng)建
數(shù)組的初始化
intoa={1,2,3,4,5};
PointQp={StringQusers={
newPoint(1,1),“John”,
newPoint(2,2)“Mary”
};};
參數(shù)傳遞1
基本變量傳值,引用變量傳地址
classMyDate{
privateintday;
privateintmonth;
privateintyear;
publicMyDate(intd,intm,inty){
day=d;month=m;year=y;
)
publicvoidsetDay(intd){day=d;}
publicvoidsetMonth(intm){month=m;}
publicvoidsetYear(inty){year=y;}
publicintgetDay(){returnday;}
publicintgetMonth(){returnmonth;}
publicintgetYear(){returnyear;}
publicvoiddisplay(){
System.out.println(day+"-"+month+"-"+year);
)
)
參數(shù)傳遞2
基本變量傳值,引用變量傳地址
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
MyDatedl=newMyDate(7,7,1970);
MyDated2=newMyDate(l,1,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
}
publicvoidchangel(inti){i=1234;}
publicvoidchange2(MyDateb){b=newMyDate(22,2,2004);}
publicvoidchange3(MyDateb){b.setDay(22);}
}
參數(shù)傳遞演示1
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
BirthDatedl=newBirthDate(7/7/1970);
BirthDated2=newBirthDate(l,l,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
)
publicvoidchangel(inti){i=1234;}
publicvoidchange2(BirthDateb){b=newBirthDate(22,2/2004);}
publicvoidchange3(BirthDateb){b.setDay(22);}
}
參數(shù)傳遞演示2
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
BirthDatedl=newBirthDate(7,7,1970);
BirthDated2=newBirthDate(lzl,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
}
publicvoidchangel(inti){i=1234;}
publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);}
publicvoidchange3(BirthDateb){b.setDay(22);}
}
Jr.
棧內(nèi)1存-.
___r)
d23547521
dl587934\
main〈..
date——x9——\
[ex|1109251■-1970J
十處內(nèi)存狀態(tài)
參數(shù)傳遞演示3
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
BirthDatedl=newBirthDate(7,7,1970);
BirthDated2=newBirthDate(l,1,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
}
publicvoidchangel(inti){i=1234;}
publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);}
publicvoidchange3(BirthDateb){b.setDay(22);}
}
參數(shù)傳遞演示4
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
BirthDatedl=newBirthDate(7,7,1970);
BirthDated2=newBirthDate(l,1,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
)
publicvoidchangel(inti){i=1234;}
publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);}
publicvoidchange3(BirthDateb){b.setDay(22);}
}
參數(shù)傳遞演示5
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
BirthDatedl=newBirthDate(7,7,1970);
BirthDated2=newBirthDate(l,1,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
}
publicvoidchangel(inti){i=1234;}
publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);}
publicvoidchange3(BirthDateb){b.setDay(22);}
}
參數(shù)傳遞演示6
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
BirthDatedl=newBirthDate(7,7,1970);
BirthDated2=newBirthDate(l,1,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
}
publicvoidchangel(inti){i=1234;}
publicvoidchange2(BirthDateb){bnew
BirthDate(22,2z2004);}
publicvoidchange3(BirthDateb){b.setDay(22);}
)
參數(shù)傳遞演示7
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
BirthDatedl=newBirthDate(7,7,1970);
BirthDated2=newBirthDate(l,1,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
}
publicvoidchangel(inti){i=1234;}
publicvoidchange2(BirthDateb){b=new
BirthDate(22,2,2004);}
publicvoidchange3(BirthDateb){b.setDay(22);}
)
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
BirthDatedl=newBirthDate(7,7,1970);
BirthDated2=newBirthDate(l,l,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
}
publicvoidchangel(inti){i=1234;}
publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);}
publicvoidchange3(BirthDateb){b.setDay(22);}
}
參數(shù)傳遞演示9
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
BirthDatedl=newBirthDate(7,7,1970);
BirthDated2=newBirthDate(l,1,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
}
publicvoidchangel(inti){i=1234;}
publicvoidchange2(BirthDateb){b=newBirthDate(22,272004);}
publicvoidchange3(BirthDateb){b.setDay(22);}
參數(shù)傳遞演示10
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
BirthDatedl=newBirthDate(7,7,1970);
BirthDated2=newBirthDate(lzl,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
}
publicvoidchangel(inti){i=1234;}
publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);}
publicvoidchange3(BirthDateb){b.setDay(22);}
)
參數(shù)傳遞演示11
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
intdate=9;
BirthDatedl=newBirthDate(7,7,1970);
BirthDated2=newBirthDate(Ll,2000);
ex.changel(date);
ex.change2(dl);
ex.change3(d2);
System.out.println("date="+date);
dl.display();
d2.display();
)
publicvoidchangel(inti){i=1234;}
publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);}
publicvoidchange3(BirthDateb){b.setDay(22);}
}
靜態(tài)方法
以static關(guān)鍵字申明的方法就稱為靜態(tài)方法,也稱為類方法
對(duì)于靜態(tài)方法,可以由類直接調(diào)用,當(dāng)然,也可以通過對(duì)象進(jìn)行調(diào)用
靜態(tài)變量
一個(gè)由static關(guān)鍵字修飾的變量,就稱為靜態(tài)變量,也稱為類變量,(請對(duì)
照實(shí)例變量)
如果一個(gè)類變量的訪問級(jí)別為public,那么可以通過類直接訪問該靜
態(tài)變量
靜態(tài)變量是多個(gè)對(duì)象間共享的
方法的重載
在同一個(gè)類中可以定義多個(gè)同名方法--方法重載
publicclassPrintStream{
publicvoidprintln(inti){.......}
publicvoidprintln(floatf){.......}
publicvoidprintln(Strings){.......}
)
重載方法的參數(shù)列表必須不同
重載方法的返回值類型可以相同,也可以不同
構(gòu)造方法重載
構(gòu)造方法重載舉例:
publicclassProject{
publicProject(){.......}
publicProject(Stringcode){.......}
publicProject(Stringcode,Stringname){.......}
}
構(gòu)造方法重載,參數(shù)列表必須不同
可以在構(gòu)造方法的第一行使用this關(guān)鍵字調(diào)用其它(重載的)構(gòu)造方法
關(guān)鍵字this
指代當(dāng)前對(duì)象自身
publicclassProject{
privateStringproj_code="";
privateStringproj_name="";
publicvoidsetName(Stringname){
j_name=name;〃等價(jià)于proj_name=name
}
}
publicclassTest{
publicstaticvoidmain(Stringargs[]){
Projectproj_l=newProject();proj_l.setName("abc");
〃this是proj_l
Projectproj_2=newProject();proj_2.setName("xyz");
//this是proj_2
}
}
publicvoidsetName(Stringproj_name){
j_name=proj_name;〃解決了變量的命名沖突和
不確定性問題
}
調(diào)用重載的構(gòu)造方法
publicclassProject{
privateStringproj_code=
privateStringproj_name=
publicProject(Stringcode){
}
publicProject(){
this("abc");〃this必須是方法中的第一條語句
)
}
this指代當(dāng)前對(duì)象,可以returnthis
this可以調(diào)用重載的構(gòu)造方法,但不能直接用this初始化對(duì)象,new
this。是非法的
類的繼承
類繼承語法規(guī)則
<modifier>class<name>[extends<superclass>]
(
<declarations>
)
Object類是所有Java類的最高層父類
Java只支持單繼承,不允許多重繼承
一個(gè)子類只能有一個(gè)父類
一個(gè)父類可以繼承出多個(gè)子類
publicclassPerson{
publicStringname;
publicintage;
publicDatebirthDate;
publicStringgetlnfo(){...}
}
為描述和處理學(xué)生信息,定義類Student
publicclassStudent{
publicStringname;
publicintage;
publicDatebirthDate;
publicStringschool;
publicStringgetlnfo(){...}
}
通過繼承,簡化Student類的定義
publicclassPerson{
publicStringname;
publicintage;
publicDatebirthDate;
publicStringgetlnfo(){...}
}
publicclassStudentextendsPerson{
publicStringschool;
}
方法的重寫/覆蓋
在子類中可以根據(jù)需要對(duì)從父類中繼承來的方法進(jìn)行改造--方法的
重寫
重寫方法必須和被重寫方法具有相同的方法名稱、參數(shù)列表和返回值
類型
重寫方法不能使用比被重寫方法更嚴(yán)格的訪問權(quán)限
構(gòu)造方法不能被重寫,只能通過super調(diào)用
方法重寫舉例
publicclassPerson{
protectedStringname;
protectedintage;
protectedDatebirthDate;
publicStringgetlnfo(){
return"Name:"+name+"\n"+"age:"+age;
)
}
publicclassStudentextendsPerson{
protectedStringschool;
publicStringgetlnfo(){
return"Name:"+name+"\nage:"+age+"\nschool:"+
school;
}
}
關(guān)鍵字super
在Java類中使用super來引用父類的成分
super可用于訪問父類中定義的屬性
super可用于調(diào)用父類中定義的成員方法
super可用于在子類構(gòu)造方法中調(diào)用父類的構(gòu)造方法
super的追溯不僅于直接父類
關(guān)鍵字super舉例
publicclassPerson{
protectedStringname;
protectedintage;
protectedDatebirthDate;
publicStringgetlnfo(){
return"Name:"+name+"\n"+"age:"+age;
}
}
publicclassStudentextendsPerson{
protectedStringschool;
publicStringgetlnfo(){
〃調(diào)用父類的方法
returnsuper.getlnfo()+"\nschool:"+school;
}
}
調(diào)用父類構(gòu)造方法
在子類的構(gòu)造方法中可使用super(argument」ist)語句調(diào)用父類的構(gòu)造
方法,super語句必須是構(gòu)造方法的第一條語句
如果子類的構(gòu)造方法中沒有顯示地調(diào)用父類構(gòu)造方法,也沒有使用
this關(guān)鍵字調(diào)用重載的其它構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用父類無參數(shù)的
構(gòu)造方法
如果子類構(gòu)造方法中既未顯式調(diào)用父類構(gòu)造方法,而父類中又沒有無
參的構(gòu)造方法,則編譯出錯(cuò)
在子類中,不能通過父類的構(gòu)造方法名調(diào)用父類的構(gòu)造方法,只能通
過super關(guān)鍵字
調(diào)用父類構(gòu)造方法舉例
1publicclassPerson{
2
3privateStringname;
4privateintage;
5privateDatebirthDate;
6
7publicPerson(Stringname,intage,Dated){
8=name;
9this.age=age;
10this.birthDate=d;
11}
12publicPerson(Stringname,intage){
13this(name,age,null);
14}
15publicPerson(Stringname,Dated){
16this(namez30,d);
17}
18publicPerson(Stringname){
19thisfname,30);
20)
21//……
22}
1publicclassStudentextendsPerson{
2privateStringschool;
3
4publicStudent(Stringname,intage,Strings){
5super(name,age);
6school=s;
7}
8publicStudent(Stringname,Strings){
9super(name);
10school=s;
11}
12publicStudent(Strings){//編譯出錯(cuò):nosuper。
super();
13school=s;
14)
15}
不能通過this關(guān)鍵字去初始化父類的屬性,只能通過super利用父類
的構(gòu)造方法去初始化父類的屬性,不能通過父類構(gòu)造方法名調(diào)用父類
構(gòu)造方法
1publicclassStudentextendsPerson{
2privateStringschool;
3
4publicStudent(Stringname,intage,Strings){
5=name;this.age=age//error
6school=s;
7)
8publicStudent(Stringname,Strings){
9Pernson(name);//error
10school=s;
11)
12publicStudent(Strings){//編譯出錯(cuò):nosuper。
super();
13school=s;
14}
15}
多態(tài)(1)
多態(tài)--在Java中,子類的對(duì)象可以替代父類的對(duì)象使用
一個(gè)對(duì)象只能有一種確定的數(shù)據(jù)類型
一個(gè)引用類型變量可能指向(引用)多種不同類型的對(duì)象,父類的引用
變量可以指向子類實(shí)例,反之不成立
Personp=newStudent();
Objecto=newPerson();
o=newStudent();
Object[]o={newPerson。,newStudent()};
Students=newPerson()//error
多態(tài)(2)
一個(gè)引用類型變量如果聲明為父類的類型,但實(shí)際引用的是子類對(duì)象,
那么該變量就不能再訪問子類中添加的屬性和方法
Studentm=newStudent();
m.school="pku";〃合法
Persone=newStudent();
e.school="pku";〃非法
publicclassPerson{publicintgetlnfo(){}}
Objecto=newPerson();
o.getlnfo()〃非法
動(dòng)態(tài)綁定/虛方法調(diào)用
正常的方法調(diào)用
Persone=newPerson();e.getlnfo();
Studente=newStudent();e.getlnfo();
動(dòng)態(tài)綁定(多態(tài)情況下)
Persone=newStudent();
e.getlnfo();〃此時(shí)調(diào)用的是Student類中定義的getInfo方法
Person[]a={newPerson。,newStudent()}
Person[0].getlnfo()〃調(diào)用Person類中的方法
Person[l].getlnfo()〃調(diào)用Student類中的方法
編譯時(shí)類型和運(yùn)行時(shí)類型
多態(tài)性應(yīng)用舉例(1)
同類收集(homogenouscollections)
MyDate[]m=newMyDate[2];
m[0]=newMyDate(22,12,1964);
m[l]=newMyDate(22,1,1964);
異類收集(heterogeneouscollections)
Person[]p=newPerson[3];
p[0]=newStudent();
p[l]=newPerson();
p[2]=newGraduate();
多態(tài)性應(yīng)用舉例(2)
方法聲明的參數(shù)類型為父類類型,可以使用子類的對(duì)象作為實(shí)參調(diào)用
該方法
publicclassTest{
publicvoidmethod(Persor)e){
//……
e.getlnfo();
)
publicstaticvoidmain(Stirngargs[]){
Testt=newTest();
Studentm=newStudent();
t.method(m);
}
}
instanceof操作符
publicclassPersonextendsObject{,?,}
publicclassStudentextendsPerson{,,,}
publicclassGraduateextendsPerson{,,,}
Personp=newStudent();
pinstanceofStudent;//true
因此從(pinstanceofStudent)不能推斷p被聲明為Student類型
publicvoidmethodl(Persone){
if(einstanceofStudent){
//處理Student類型及其子類類型對(duì)象
}elseif(einstanceofGraduate){
〃處理Graduate類型及其子類類型對(duì)象
}else{
〃處理Person類型對(duì)象
}
)
==操作符與equals方法
publicbooleanequals(Objectobj){
return(this==obj);
}
Object中的equals。方法利用==實(shí)現(xiàn)
Persona=newPerson();Personb=a;b.equals(a)==true;
基本類型使用==時(shí)比較值;引用類型使用==時(shí)僅比較地址;
如果想要比較引用類型不同實(shí)例的值(內(nèi)容),必須重寫equals方法
舉例
publicbooleanequals(Objecto){
if(oinstanceofCircle){
returnradius==((Circle)o).radius;
)
else
returnfalse;
}
Circlea=newCircle(a);
Circleb=newCircle(ulv);
a!=b和a.equals(b)==true同時(shí)成立
toString。方法
任何Java類都是Object的子類
Object定義了一個(gè)toString()方法,它返回一個(gè)實(shí)例(對(duì)象)所屬類的名
稱@該對(duì)象在內(nèi)存的地址;
System.out.println(person);
等價(jià)于System.out.println(person.toStringO);
同樣:"Person:"+person;
等價(jià)于"Person:"+person.toString();
抽象類
在有些情況下,可以暫時(shí)不實(shí)現(xiàn)類的某個(gè)成員方法,這時(shí)可以用
abstract關(guān)鍵字修飾類、以及相應(yīng)的方法。
以abstract修飾的類稱為抽象類,以abstract修飾的方法稱為抽象方
法
不能對(duì)抽象類直接進(jìn)行實(shí)例化。在子類中可以實(shí)現(xiàn)父類的抽象方法,
只有子類實(shí)現(xiàn)(覆蓋)了父類所有的抽象方法,那么才能創(chuàng)建子類的對(duì)
象,否則子類仍然是一個(gè)抽象類,也就是說也需要用關(guān)鍵字abstract
修飾
抽象類也可以不包含任何抽象方法,但抽象方法必須在抽象類(或接
口)中
最終類
final修飾的類是最終類,不能被繼承,如String,Math
final修飾的方法不能被重寫/覆蓋
有關(guān)final變量的說明:
final變量是常量
可僅設(shè)置一次final變量,但是賦值可獨(dú)立于聲明而發(fā)生,這稱之為
空final變量。即,如果final變量不在其聲明中被初始化;其初始
化被延遲:
空final實(shí)例變量必須在構(gòu)造方法中被賦值。
空final局部變量可在方法的主體內(nèi)隨時(shí)被設(shè)置。
它僅可設(shè)置一次。
接口
聲明接口
[public]interface(接口名〉[extends(父接口>]{
[public][static][final]〈數(shù)據(jù)類型>(變量>=<值>;
[public][abstract](數(shù)據(jù)類型><方法名>([<參數(shù)>]);
}
聲明實(shí)現(xiàn)接口的類implements
Java類只支持單繼承,但是可以實(shí)現(xiàn)多個(gè)接口
接口的特點(diǎn):
接口以及接口中成員的訪問權(quán)限都是public
接口中的成員方法都是公有的、抽象的
接口中所有的方法都必須被實(shí)現(xiàn)接口的類覆蓋
接口中的成員變量都是常量,聲明時(shí)必須賦值
接口不能被實(shí)例化
Java異常
錯(cuò)誤(Error):JVM系統(tǒng)內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況
違例(Exception):其它因編程錯(cuò)誤或偶然的外在因素導(dǎo)致的一般性問
題,例如:對(duì)負(fù)數(shù)開平方根;訪問null;試圖讀取不存在的文件;網(wǎng)絡(luò)連
接中斷;
Java異常舉例
publicclassSamplel{
publicstaticvoidmain(String[]args){
Stringfriends[]={"lisa",''bily","kessy"};
for(inti=0;i<5;i++)
System.out.println(friends[i]);
System.out.println("\nthisistheend");
}
}
Java異常類層次
常見異常
RuntimeException
錯(cuò)誤的類型轉(zhuǎn)換
數(shù)組下標(biāo)越界
空指針訪問
lOExeption
從一個(gè)不存在的文件中讀取數(shù)據(jù)
越過文件結(jié)尾繼續(xù)讀取
連接一個(gè)不存在的URL
異常處理機(jī)制
Java程序的執(zhí)行過程中如出現(xiàn)異常,會(huì)自動(dòng)生成一個(gè)異常類對(duì)象,該
異常對(duì)象將被提交給Java運(yùn)行時(shí)系統(tǒng),這個(gè)過程稱為拋出(thro
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024牛肉供應(yīng)鏈優(yōu)化與物流配送合同
- 二零二五年鮑魚海鮮產(chǎn)品進(jìn)出口合同2篇
- 2025年度中小企業(yè)財(cái)務(wù)輔導(dǎo)與融資對(duì)接服務(wù)合同3篇
- 2025年工藝品FOB出口合同標(biāo)準(zhǔn)范本2篇
- 2024年相機(jī)設(shè)備采購正式協(xié)議樣本
- 2024特定事項(xiàng)補(bǔ)充協(xié)議范本版B版
- 2025年度淋浴房安全檢測與安裝服務(wù)合同4篇
- 2025年環(huán)保型小區(qū)車棚租賃與充電樁建設(shè)合同3篇
- 2025年度綠色生態(tài)園林景觀項(xiàng)目苗木采購合同樣本3篇
- 2025年度消防設(shè)施設(shè)備安全性能評(píng)估合同3篇
- 軟件項(xiàng)目應(yīng)急措施及方案
- 2025河北邯鄲經(jīng)開國控資產(chǎn)運(yùn)營管理限公司招聘專業(yè)技術(shù)人才5名高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年民法典知識(shí)競賽考試題庫及答案(共50題)
- 2025老年公寓合同管理制度
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊 期末綜合卷(含答案)
- 2024中國汽車后市場年度發(fā)展報(bào)告
- 鈑金設(shè)備操作培訓(xùn)
- 感染性腹瀉的護(hù)理查房
- 天津市部分區(qū)2023-2024學(xué)年高二上學(xué)期期末考試 物理 含解析
- 水利工程招標(biāo)文件樣本
- 第17課 西晉的短暫統(tǒng)一和北方各族的內(nèi)遷(說課稿)-2024-2025學(xué)年七年級(jí)歷史上冊素養(yǎng)提升說課稿(統(tǒng)編版2024)
評(píng)論
0/150
提交評(píng)論