數(shù)組
- 定義數(shù)組的語(yǔ)法格式
數(shù)組元素類(lèi)型[] 數(shù)組型變量名 或 數(shù)組元素類(lèi)型 數(shù)組型變量名[] - 一位數(shù)組
一個(gè)數(shù)組可以包含多個(gè)元素,所含的元素?cái)?shù)目被稱(chēng)為數(shù)組的長(zhǎng)度,數(shù)組中也可以沒(méi)有任何元素,此時(shí)稱(chēng)為空數(shù)組。因此,在創(chuàng)建數(shù)組的時(shí)候,需要給出組成數(shù)組的元素?cái)?shù)目。(Java中的數(shù)組只能分配動(dòng)態(tài)存儲(chǔ)空間,一旦被創(chuàng)建,無(wú)法改變其數(shù)組長(zhǎng)度。如果要在程序運(yùn)行的過(guò)程中擴(kuò)展數(shù)組的長(zhǎng)度,就應(yīng)該使用數(shù)組列表。)
一位數(shù)組創(chuàng)建的語(yǔ)法格式(舉個(gè)栗子):
intArray = new int【100】
或 char[] name = new char[300] - 二維數(shù)組
定義:
數(shù)組元素類(lèi)型[][] 數(shù)組型變量名
或 數(shù)組元素類(lèi)型 數(shù)組型變量名[][]
或 數(shù)組元素類(lèi)型[] 數(shù)組型變量名[]
創(chuàng)建:
new 數(shù)組元素類(lèi)型[行數(shù)][列數(shù)];intArray = new int[10][5];
或 int[][] intArray = new int[][];
String類(lèi)
- String不屬于8中基本數(shù)據(jù)類(lèi)型
- 定義String類(lèi)對(duì)象之后,沒(méi)有引用任何一個(gè)字符串,就應(yīng)該賦予null
- new String()和new String(“”)都是申明一個(gè)新的空字符串,是空串不是null
- 常量池(constant pool)指的是在編譯期被確定,并被保存在已編譯的.class文件中的一些數(shù)據(jù)。它包括了關(guān)于類(lèi)、方法、接口等中的常量,也包括字符串常量。
例題:
設(shè)有以下代碼:
String s1 = "123";
String s2 = "123";
String s3 = new String("123");
則表達(dá)式s1==s2和s1 == s3 的值分別是(**true**)(**false**)
解釋?zhuān)簊1和s2中的”123”都是字符串常量,它們?cè)诰幾g期就被確定了,是常量池中“123”的一個(gè)引用
用new String() 創(chuàng)建的字符串不是常量,不能在編譯期就確定,所以new String() 創(chuàng)建的字符串不放入常量池中,它們有自己的地址空間。
類(lèi)與對(duì)象
- 類(lèi)與對(duì)象的區(qū)別
對(duì)象是客觀世界存在的具體實(shí)體,具有明確定義的狀態(tài)和行為。
類(lèi)是一組具有共同特性的所有對(duì)象成員的集合,它是一個(gè)抽象的概念 - 類(lèi)的聲明
1.[修飾符]class 類(lèi)名
2.訪(fǎng)問(wèn)控制符,抽象類(lèi)控制符,最終類(lèi)說(shuō)明符
public:后續(xù)定義的任何類(lèi)均可訪(fǎng)問(wèn)
private:僅能被類(lèi)自身的內(nèi)部函數(shù)成員函數(shù)訪(fǎng)問(wèn),其它任何類(lèi)都不能直接訪(fǎng)問(wèn)
protected:同private,但能被繼承類(lèi)受保護(hù)的成員訪(fǎng)問(wèn),不能被私有成員訪(fǎng)問(wèn)。
abstract不僅用于類(lèi)的聲明,也適用于對(duì)象。當(dāng)用于類(lèi)的聲明時(shí),該類(lèi)不能創(chuàng)建對(duì)象。
final 適用于類(lèi)的聲明,變量或者方法。當(dāng)用于類(lèi)的聲明時(shí),該類(lèi)不能有子類(lèi)。
- 類(lèi)中的成員方法
類(lèi)中的成員方法主要承擔(dān)對(duì)象的外部接口任務(wù)。
成員方法的重載,是指在同一個(gè)類(lèi)中,同一個(gè)名稱(chēng)的成員方法被多次定義的現(xiàn)象
public void setTime(int h,int m ,int s){
hour = (h<0)?0 : h % 24;
minute = (m<0)?0 : m % 60;
second = (s<0)?0 : s % 60;
}
public void setTime(String time){
hour = Intrger.praseInt(time.substring(0,1));
hour = (h<0)?0 : h % 24;
minute = Intrger.praseInt(time.substring(3,4));
minute = (m<0)?0 : m % 60;
second = Intrger.praseInt(time.substring(6,7));
}
構(gòu)造方法:構(gòu)造類(lèi)對(duì)象的時(shí)候使用的成員方法,主要作用是初始化成員變量,因此不需要返回任何值。Java中規(guī)定,構(gòu)造方法不允許返回任何值。構(gòu)造方法可以重載。構(gòu)造方法的具體定義格式為: [修飾符] 類(lèi)名(參數(shù)列表)
子類(lèi)構(gòu)造方法的定義與執(zhí)行:
在Java程序中,子類(lèi)不負(fù)責(zé)調(diào)用父類(lèi)中帶參數(shù)的構(gòu)造方法。在創(chuàng)建子類(lèi)對(duì)象的時(shí)候需要在構(gòu)造方法中利用super()調(diào)用弗雷德構(gòu)造方法,以便能夠?qū)母割?lèi)繼承過(guò)來(lái)的成員變量初始化。
父類(lèi):
public class Shape{
public Shape (int color,int height){
this.color = color;
}
}
子類(lèi):
public class Rectangle extends Shape{
public Rectangle(int color,int height,int width){
super(color,height);
this.width = width;
}
}
-
類(lèi)的靜態(tài)成員
在類(lèi)中定義成員變量是,如果在訪(fǎng)問(wèn)特性修飾符之后加上static修飾符就成為靜態(tài)變量。例如:
public static int staticMember;
靜態(tài)成員變量只在加載類(lèi)時(shí)創(chuàng)建一個(gè)副本,無(wú)論將來(lái)創(chuàng)建同一個(gè)類(lèi)的多少個(gè)對(duì)象都將共享同一個(gè)副本。因此,靜態(tài)成員變量與類(lèi)共存亡,而與具體的對(duì)象無(wú)關(guān)(因此,稱(chēng)之為類(lèi)變量)。靜態(tài)成員方法:在外部調(diào)用靜態(tài)方法是,可使用“類(lèi)名.方法名”的形式,也可以使用“對(duì)象名.方法名的形式。而實(shí)例化方法就只有后面這種形式。調(diào)用靜態(tài)方法可以無(wú)需創(chuàng)建對(duì)象;靜態(tài)方法在訪(fǎng)問(wèn)本類(lèi)的成員時(shí),只允許訪(fǎng)問(wèn)靜態(tài)成員(即靜態(tài)成員變量和靜態(tài)方法)不能訪(fǎng)問(wèn)非靜態(tài)的成員變量。
繼承與多態(tài)
類(lèi)成員方法的重載與覆蓋
成員方法的重載:指在子類(lèi)中定義與父類(lèi)中同名的成員方法,但參數(shù)列表不同,在子類(lèi)與父類(lèi)之間重載成員方法,或者在一個(gè)類(lèi)中定義多個(gè)同名的成員方法,但他們的參數(shù)列表不同,在一個(gè)類(lèi)中重載成員方法。
成員方法的覆蓋
子類(lèi)通過(guò)方法的覆蓋可以隱藏繼承的方法,方法覆蓋是指子類(lèi)中定義一個(gè)方法,并且這個(gè)方法的名字,返回類(lèi)型,參數(shù)列表與從父類(lèi)繼承的方法完全相同。
注意:
1.子類(lèi)的方法不能縮小父類(lèi)方法的訪(fǎng)問(wèn)權(quán)限
2.子類(lèi)的方法不能拋出比父類(lèi)更多的異常
3.父類(lèi)的靜態(tài)方法不能被子類(lèi)覆蓋為非靜態(tài)方法
4.父類(lèi)的私有方法不能被子類(lèi)覆蓋
多態(tài)性的實(shí)現(xiàn)
在Java中,多態(tài)性是指不同的類(lèi)對(duì)象調(diào)用同一個(gè)簽名的成員方法是將執(zhí)行不同代碼段的現(xiàn)象。
具體實(shí)現(xiàn)方式:首先,在子類(lèi)中覆蓋父類(lèi)的某個(gè)成員方法,然后,定義父類(lèi)的對(duì)象引用,并由他引用創(chuàng)建的子類(lèi)對(duì)象。當(dāng)在調(diào)用成員方法時(shí),根據(jù)實(shí)際引用的對(duì)象類(lèi)型最終調(diào)用哪個(gè)方法。
實(shí)現(xiàn)動(dòng)態(tài)行需要具備的兩個(gè)條件:
多態(tài)性作用于子類(lèi)對(duì)象,它是依賴(lài)于類(lèi)層次結(jié)構(gòu)中的一項(xiàng)功能。
具有多態(tài)性的成員方法必須同時(shí)包含在父類(lèi)與子類(lèi)中,且對(duì)應(yīng)的成員方法簽名完全一致,即子類(lèi)覆蓋父類(lèi)的成員方法。
抽象類(lèi)
在Java語(yǔ)言中,用抽象類(lèi)表示概念性的事物,用類(lèi)表示可實(shí)例化的實(shí)體類(lèi)別。
定義格式: [修飾符] abstract class 抽象類(lèi)名……{}
抽象類(lèi)體中的成員方法既可以是抽象方法(不完整的成員方法,只能在不能被實(shí)例化的抽象類(lèi)中出現(xiàn)),也可以是普通的成員方法。
注意:
抽象類(lèi)主要用于派生子類(lèi),且在子類(lèi)中實(shí)現(xiàn)抽象類(lèi)中的所有抽象方法。如果在 子類(lèi)中沒(méi)有實(shí)現(xiàn)全部的抽象方法,則必須繼續(xù)將沒(méi)有被實(shí)現(xiàn)的方法聲明稱(chēng)抽象方法,此時(shí)的子類(lèi)仍然需要聲明為抽象類(lèi)。
static、private、final修飾符不能用于修飾抽象方法。