計(jì)算機(jī)二級(jí)JAVA考點(diǎn)解析
Java看起來(lái)設(shè)計(jì)得很像C++,但是為了使語(yǔ)言小和容易熟悉,設(shè)計(jì)者們把C++語(yǔ)言中許多可用的特征去掉了,這些特征是一般程序員很少使用的。下面是關(guān)于計(jì)算機(jī)二級(jí)JAVA考點(diǎn)解析,希望大家認(rèn)真閱讀!
類是Java語(yǔ)言面向?qū)ο缶幊痰幕驹兀x了一個(gè)對(duì)象的結(jié)構(gòu)和行為。在Java程序里,你要表達(dá)的概念封裝在某個(gè)類里。一個(gè)類定義了一個(gè)對(duì)象的結(jié)構(gòu)和它的功能接口,功能接口稱為成員函數(shù)。當(dāng)Java程序運(yùn)行時(shí),系統(tǒng)用類的定義創(chuàng)建類的實(shí)例,類的實(shí)例是真正的對(duì)象。類定義的一般形式如下:
classclassnameextendssuperclassname{typeinstance-variable1;typeinstance-variable2;.................................typeinstance-variableN;typemethodname1(parameter-list){method-body;}typemethodname2(parameter-list){method-body;}....................................................typemethodnameN(parameter-list){method-body;}}
這里,classname和superclassname是合法的標(biāo)識(shí)符。關(guān)鍵詞extends用來(lái)表明classname是superclassname派生的子類。有一個(gè)類叫做Object,它是所有Java類的根。如果你想定義Object的直接子類,你可以省略extends子句,編譯器會(huì)自動(dòng)包含它。下面是一個(gè)簡(jiǎn)單的類的定義。classUniversity{}
5.1對(duì)象實(shí)例
類名可以作為變量的類型來(lái)使用,如果一個(gè)變量的類型是某個(gè)類,那么它將指向這個(gè)類的實(shí)例,稱為對(duì)象實(shí)例。所有對(duì)象實(shí)例和它們的類型(某個(gè)類?copy;的子類的實(shí)例都是相容的。就象可以把byte型的值賦給int型的變量一樣,你可以把Object的子類的任何實(shí)例賦給一個(gè)Object型的變量。一個(gè)實(shí)例是類模板的單獨(dú)的拷貝,帶有自己的稱為實(shí)例變量的數(shù)據(jù)集。每個(gè)實(shí)例也可以作為一個(gè)對(duì)象。當(dāng)你定義一個(gè)變量的類型是某個(gè)類時(shí),它的缺省值是null,null是Object的一個(gè)實(shí)例。對(duì)象null沒(méi)有值,它和整數(shù)0不同。下面這個(gè)例子中,聲明變量u的類型是類University。Universityu;這里,變量u的值是null。
5.2實(shí)例變量
Java通過(guò)在類定義的大括號(hào)里聲明變量來(lái)把數(shù)據(jù)封裝在一個(gè)類里。這里的變量稱為實(shí)例變量。下面的例子定義了一個(gè)叫做University的類,它有兩個(gè)實(shí)例變量:name和city。classUniversity{Stringname,city;}
5.3new操作符
操作符new用來(lái)生成一個(gè)類的實(shí)例,下面這個(gè)例子生成了類University的一個(gè)實(shí)例,存放在變量u中。
Universityu=newUniversity();在此例中,變量u指向這個(gè)對(duì)象,但并不真正包含這個(gè)對(duì)象。你可以用多個(gè)變量指向同一個(gè)對(duì)象。下面的例子中,創(chuàng)建了一個(gè)University的對(duì)象,但創(chuàng)建了兩個(gè)指向它的變量。
Universityu=newUniversity();Universityu2=u;
對(duì)u2所指向的對(duì)象的任何改動(dòng)都會(huì)對(duì)u所指向的對(duì)象起作用,因?yàn)樗鼈兪峭粋(gè)對(duì)象。對(duì)u和u2的賦值只是把它們指向這個(gè)對(duì)象,既沒(méi)有分配內(nèi)存,也沒(méi)有復(fù)制這個(gè)對(duì)象的任何部分。對(duì)u的再賦值只是簡(jiǎn)單地去掉了u和原來(lái)對(duì)象的聯(lián)系,并不影響對(duì)象本身,下面的例子說(shuō)明了這種情況。
Universityu=newUniversity();Universityu2=u;u=null;
盡管u被賦值為null,u2仍指向原來(lái)由操作符new創(chuàng)建的對(duì)象。在前面的例子里,我們生成了一個(gè)對(duì)象并且指向了它兩次。這就允許兩個(gè)變量改變同一個(gè)對(duì)象。創(chuàng)建一個(gè)新的對(duì)象時(shí),可直接對(duì)它的實(shí)例變量賦值。每個(gè)對(duì)象都有它所屬類的實(shí)例變量的拷貝,每個(gè)對(duì)象的實(shí)例變量都是和其他對(duì)象的實(shí)例變量分離的,所以改變一個(gè)對(duì)象的實(shí)例變量不會(huì)影響其他對(duì)象的實(shí)例變量。下面的例子創(chuàng)建了兩個(gè)University的對(duì)象,并對(duì)它們分別賦值:classTwoUniversity{publicstaticvoidmain(Stringargs[]){Universityu1=newUniversity();Universityu2=newUniversity();u1.name=\"北?copy;大學(xué)\";u1.city=\"北?copy;\";u2.name=\"清華大學(xué)\";u2.city=\"北?copy;\";System.out.println(\"大學(xué):\"+u1.name+\"城市:\"+u1.city);System.out.println(\"大學(xué):\"+u2.name+\"城市:\"+u2.city);}}這個(gè)例子創(chuàng)建了兩個(gè)University的對(duì)象,并且對(duì)它們的name、city分別賦了不同的值,這說(shuō)明這兩個(gè)對(duì)象是真正分離的。下面是該程序運(yùn)行后的輸出結(jié)果。C:\\>javaTwoUniversity大學(xué):北?copy;大學(xué)城市:北?copy;大學(xué):清華大學(xué)城市:北?copy;
5.4點(diǎn)(.?copy;操作符點(diǎn)(.?copy;操作符用來(lái)接收一個(gè)對(duì)象的實(shí)例變量和成員函數(shù)。下面是用點(diǎn)操作符來(lái)接收實(shí)例變量的一般形式。objectreference.variablename
這里objectreference是一個(gè)對(duì)象實(shí)例,variablename是這個(gè)對(duì)象里你想接收的實(shí)例變量。下面的程序段說(shuō)明了怎樣用點(diǎn)操作符來(lái)給實(shí)例變量賦值。
u.name=\"北?copy;大學(xué)\";u.city=\"北?copy;\";下面說(shuō)明怎樣用點(diǎn)操作符來(lái)得到實(shí)例變量的值。System.out.println(\"大學(xué):\"+u.name+\"城市:\"+u.city);通過(guò)向類University里加入一個(gè)成員函數(shù)main,我們創(chuàng)建了一個(gè)完整的例子,它使用了new操作符來(lái)創(chuàng)建一個(gè)University,用點(diǎn)操作符來(lái)賦值,然后打印結(jié)果。classUniversity{Stringname,city;publicstaticvoidmain(Stringargs[]){Universityu=newUniversity();u.name=\"北?copy;大學(xué)\";u.city=\"北?copy;\";System.out.println(\"大學(xué):\"+u.name+\"城市:\"+u.city);}}
運(yùn)行這個(gè)程序后,就會(huì)得到下面的結(jié)果。C:\\>javaUniversity大學(xué):北?copy;大學(xué)城市:北?copy;
5.5成員函數(shù)定義
成員函數(shù),是類的功能接口,是類定義里的一個(gè)子程序,在類的定義里和實(shí)例變量處于同一級(jí)別。你必須通過(guò)一個(gè)類的實(shí)例來(lái)調(diào)用成員函數(shù)。成員函數(shù)可以不用點(diǎn)操作符而直接使用實(shí)例變量。成員函數(shù)帶有輸入?yún)?shù),具有
某種類型的返回值。成員函數(shù)定義的一般形式如下:typemethodname(formal-parameter-list){method-body;}這里type指的是成員函數(shù)的返回值的類型,如果沒(méi)有返回值,就用無(wú)值(void?copy;類型。methodname可以是任何合法的標(biāo)識(shí)符,但不能與當(dāng)前的類名相同。formal-parameter-list是用逗號(hào)分隔的類型、標(biāo)識(shí)符對(duì)的序列。如果沒(méi)有參數(shù),括號(hào)里就是空的。還是用我們的University的例子,下面的成員函數(shù)用來(lái)初始化兩個(gè)實(shí)例變量。成員函數(shù)是在類的大括號(hào)?reg;內(nèi)定義的,和實(shí)例變量所處的范圍相同。classUniversity{Stringname,city;voidinit(Stringa,Stringb){name=a;city=b;}}
注意,我們這里直接給name和city賦值,而沒(méi)有象以前那樣用u1.name。這是因?yàn)槊總(gè)成員函數(shù)都在類的個(gè)別實(shí)例內(nèi)執(zhí)行。我們創(chuàng)建的類的實(shí)例具有它自己的實(shí)例變量,所以成員函數(shù)可直接使用它們。
5.6成員函數(shù)調(diào)用
可以用點(diǎn)(.?copy;操作符來(lái)調(diào)用一個(gè)類的實(shí)例的成員函數(shù)。成員函數(shù)調(diào)用的一般形式如下:objectreference.methodname(parameter-list);這里,objectreference是指向某個(gè)對(duì)象的變量,methodname是objectreference所屬類的一個(gè)成員函數(shù),parameter-list是用逗號(hào)分隔的變量或表達(dá)式的序列,它們要與該成員函數(shù)的定義的參數(shù)個(gè)數(shù)及類型匹配。在這個(gè)例子里,我們可以對(duì)任何University對(duì)象調(diào)用成員函數(shù)init來(lái)給name和city賦值。下面的程序段說(shuō)明了怎樣完成這個(gè)工作。Universityu=newUniversity();u.init(\"北?copy;大學(xué)\",\"北?copy;\");這個(gè)例子創(chuàng)建了University的一個(gè)實(shí)例,存放在u中。通過(guò)點(diǎn)操作符來(lái)調(diào)用這個(gè)實(shí)例的init成員函數(shù),把\"北?copy;大學(xué)\"和\"北?copy;\"分別傳遞給參數(shù)a和b。在init成員函數(shù)內(nèi)部,name和city直接指向u所指向的對(duì)象的實(shí)例變量。把name賦值為\"北?copy;大學(xué)\",city賦值為\"北?copy;\",然后返回。在這個(gè)例子里,init被定義為無(wú)值(void?copy;返回類型。在進(jìn)行這個(gè)成員函數(shù)調(diào)用后,u指向這個(gè)name值和city值改變了的University對(duì)象。
5.7thisJava有一個(gè)特殊的實(shí)例值叫this,它用來(lái)在一個(gè)成員函數(shù)內(nèi)部指向當(dāng)前的對(duì)象。在前面的例子里,我們調(diào)用u.init,一?copy;進(jìn)入init成員函數(shù)內(nèi)部,this就會(huì)指向u所指向的對(duì)象。在Java里,在同一個(gè)范圍定義兩個(gè)相同名字的局部變
量是不可以的。有趣的是,局部變量、成員函數(shù)的參數(shù)可以和實(shí)例變量的名字相同。前面我們沒(méi)有用name和city作為成員函數(shù)init的參數(shù)名字,因?yàn)檫@樣它們?cè)诔蓡T函數(shù)的范圍里就把實(shí)例變量name和city隱藏了,即name指向參數(shù)name,隱藏了實(shí)例變量name。this讓我們可以直接指向?qū)ο蟊旧。下面是另一個(gè)版本的init,用name和city作為參數(shù)名字,用this來(lái)接收當(dāng)前對(duì)象的實(shí)例變量。
voidinit(Stringname,Stringcity){this.name=name;this.city=city;}下面是帶有新的init初始成員函數(shù)的TwoUniversity例子。classUniversity{Stringname,city;voidinit(Stringname,Stringcity){this.name=name;this.city=city;}}classTwoUniversityInit{publicstaticvoidmain(Stringargs[]){Universityu1=newUniversity();Universityu2=newUniversity();u1.init(\"北?copy;大學(xué)\",\"北?copy;\");u2.init(\"清華大學(xué)\",\"北?copy;\");System.out.println(\"大學(xué):\"+u1.name+\"城市:\"+u1.city);system.out.println(\"大學(xué):\"+u2.name+\"城市:\"+u2.city);}}
5.8構(gòu)造函數(shù)(Constructor)
每創(chuàng)建一個(gè)類的實(shí)例都去初始化它的所有變量是乏味的。如果一個(gè)對(duì)象在被創(chuàng)建時(shí)就完成了所有的初始工作,將是簡(jiǎn)單的和簡(jiǎn)潔的。因此,Java在類里提?copy了一個(gè)特殊的成員函數(shù),叫做構(gòu)造函數(shù)(Constructor?copy;。一個(gè)構(gòu)造函數(shù)是對(duì)象被創(chuàng)建時(shí)初始對(duì)象的成員函數(shù)。它具有和它所在的類完全一樣的名字。一?copy;定義好一個(gè)構(gòu)造函數(shù),創(chuàng)建對(duì)象時(shí)就會(huì)自動(dòng)調(diào)用它。構(gòu)造函數(shù)沒(méi)有返回類型,即使是void類型也沒(méi)有。這是因?yàn)橐粋(gè)類的構(gòu)造函數(shù)的返回值的類型就是這個(gè)類本身。構(gòu)造函數(shù)的任務(wù)是初始一個(gè)對(duì)象的內(nèi)部狀態(tài),所以用new操作符創(chuàng)建一個(gè)實(shí)例后,立刻就會(huì)得到一個(gè)清楚、可用的對(duì)象。下面這個(gè)例子里,用構(gòu)造函數(shù)取代了成員函數(shù)init。
classUniversity{Stringname,city;University(Stringname,Stringcity)
{this.name=name;this.city=city;}}classUniversityCreate{publicstaticvoidmain(Stringargs[]){Universityu=newUniversity(\"北?copy;大學(xué)\",\"北?copy;\");System.out.println(\"大學(xué):\"+u.name+\"城市:\"+u.city);}}new語(yǔ)句中類名后的參數(shù)是傳給構(gòu)造函數(shù)的。
5.9成員函數(shù)重載
對(duì)于幾個(gè)意義相近的成員函數(shù),有時(shí)使用相同的名字便于理解。因此,Java語(yǔ)言實(shí)現(xiàn)了成員函數(shù)重載,即可以創(chuàng)建幾個(gè)名字相同、參數(shù)不同的成員函數(shù)。成員函數(shù)重載提?copy;了Java的多態(tài)行為。下面的例子用到了重載。classUniversity{Stringname,city;University(Stringname,Stringcity){this.name=name;this.city=city;}University(){name=\"北?copy;大學(xué)\";city=\"北?copy;\";}}
classUniversityCreateAlt{publicstaticvoidmain(Stringargs[]){Universityu=newUniversity();System.out.println(\"大學(xué):\"+u.name+\"城市:\"+u.city);}}
這個(gè)例子創(chuàng)建了一個(gè)University對(duì)象,調(diào)用了第二個(gè)構(gòu)造函數(shù)。下面是它的運(yùn)行結(jié)果。
C:\\>javaUniversityCreateAlt大學(xué):北?copy;大學(xué)城市:北?copy;一個(gè)構(gòu)造函數(shù)可以調(diào)用另一個(gè)構(gòu)造函數(shù)來(lái)創(chuàng)建實(shí)例。例如:
classUniversity{Stringname,city;University(Stringname,Stringcity)
{this.name=name;this.city=city;}University(){this(\"北?copy;大學(xué)\",\"北?copy;\");}}
第二個(gè)構(gòu)造函數(shù)調(diào)用了第一個(gè)構(gòu)造函數(shù)來(lái)完成實(shí)例的初始化。你也可以用重載來(lái)創(chuàng)建一般的成員函數(shù)。下面這個(gè)例子里有University類的兩個(gè)版本的samecity成員函數(shù)。samecity判斷一個(gè)大學(xué)是否在一個(gè)城市里或一個(gè)大學(xué)和另一個(gè)大學(xué)是否在同一個(gè)城市里。一個(gè)成員函數(shù)用city作參數(shù),另一個(gè)用University對(duì)象作參數(shù)。
classUniversity{Stringname,city;University(Stringname,Stringcity)
{this.name=name;this.city=city;}booleansamecity(Stringcity){if
(city.equals(this.city))returntrue;elsereturnfalse;}boolean
samecity(Universityu){returnsamecity(u.city);}}
classUniversityCity{publicstaticvoidmain(Stringargs[]){String
city=\"上海\";Universityu1=newUniversity(\"北?copy;大學(xué)\",\"
北?copy;\");Universityu2=newUniversity(\"清華大學(xué)\",\"北?copy;\");
System.out.println(\"u1=\"+u1.name+\",\"+u1.city);
System.out.println(\"u2=\"+u2.name+\",\"+u2.city);
System.out.println(\"city=\"+city);
System.out.println(\"u1.samecity(u2)=\"+u1.samecity(u2));
System.out.println(\"u1.samecity(city)=\"+u1.samecity(city));}}
下面是該程序的運(yùn)行結(jié)果。
C:\\>javaUniversityCityu1=北?copy;大學(xué),北?copy;u2=清華大學(xué),北?copy;city=上海u1.samecity(u2)=trueu1.samecity(city)=false
5.10繼承
第二個(gè)基本的面向?qū)ο髾C(jī)制是繼承。繼承是關(guān)于有層次關(guān)系的類?reg;間的概念。一個(gè)類的后代可以繼承它的祖先的所有變量和成員函數(shù),就象創(chuàng)建自己的一樣。一個(gè)類的直接父親叫做它的超類(superclass?copy;。一?copy;你創(chuàng)建了一個(gè)象University這樣的類,創(chuàng)建它的子類是很簡(jiǎn)單的。一個(gè)類的子類是它的繼承了實(shí)例變量和成員函數(shù)的特殊的版本。在這個(gè)例子里,我們把University類派生為含有叫做country的第三個(gè)元素的子類。
classUniversityWorldextendsUniversity{Stringcountry;UniversityWorld(Stringname,Stringcity,Stringcountry){this.name=name;this.city=city;this.country=country;}UniversityWorld(){this(\"北?copy;大學(xué)\",\"北?copy;\",\"中國(guó)\");}}
關(guān)鍵詞extends用來(lái)表示我們要?jiǎng)?chuàng)建University的子類。name和city不需再在UniversityWorld中進(jìn)行聲明,因?yàn)樗鼈兪菑腢niversity中繼承的。Java允許在UniversityWorld中聲明變量name和city,但這會(huì)隱藏University中的name和city,是與使用子類的目的相矛盾的,應(yīng)當(dāng)避免。在UniversityWorld的實(shí)例中name、city和country的地位是一樣的。
5.11super在UniversityWorld的例子里,有一段代碼和它的超類University的重復(fù),這段代碼是初始化name和city的,this.name=name;this.city=city;就象在University例子中用this指向第一個(gè)構(gòu)造函數(shù)一樣,在Java里有另一個(gè)變量叫做super,它直接指向超類的構(gòu)造函數(shù)。下面這個(gè)例子用super來(lái)初始化變量name和city,然后打印出這個(gè)對(duì)象的內(nèi)容。
classUniversityWorldextendsUniversity{Stringcountry;UniversityWorld(Stringname,Stringcity,Stringcountry){super(name,city);//調(diào)用了構(gòu)造函數(shù)University(name,city)this.country=country;}publicstaticvoidmain(Stringargs[]){UniversityWorldu=newUniversityWorld(\"北?copy;大學(xué)\",\"北?copy;\",\"中國(guó)\");System.out.println(\"大學(xué):\"+u.name+\"城市:\"+u.city+\"國(guó)家:\"+u.country);}}
【計(jì)算機(jī)二級(jí)JAVA考點(diǎn)解析】相關(guān)文章:
關(guān)于計(jì)算機(jī)二級(jí)JAVA考點(diǎn)解析07-14
2017年計(jì)算機(jī)二級(jí)JAVA考點(diǎn)解析08-03
2017年計(jì)算機(jī)二級(jí)C語(yǔ)言考點(diǎn)解析08-27
計(jì)算機(jī)二級(jí)java上機(jī)試題題庫(kù)07-13
計(jì)算機(jī)二級(jí)Java考試及答案201706-11
計(jì)算機(jī)二級(jí)C語(yǔ)言考點(diǎn)盤點(diǎn)07-28
計(jì)算機(jī)二級(jí)考試MSOffice核心考點(diǎn)08-26