物件導向:
1.利用物件導向的語法,實現程式碼的拆分(資料儲存:物件的傳值)。
2.利用物件導向的語法,實現程式的結構處理(繼承,多型,介面,抽象類)。
3.用物件導向的程式設計方法,理解實現程式開發的框架和開發模式。
程式導向:程式碼與資料不相關,通過主函式確立
物件導向:在定義類的時候,資料程式碼關聯,把函式寫在類內,而不是主函式內,最終目標是類拿過來就能用
學籍資訊管理:(課上示例)
管理的資料:班級,學生,老師(授課,班主任)。
1.計算學生的考試成績,需要補考的人數。
2.計算出教師或學生的身高體重是否正常。
Java中的註釋:
單行(//註釋內容),多行(/*註釋內容*/):寫在類中,函式中。
文件註釋(/**文件註釋內容*/):定義在類中。有助於程式編寫(生成幫助文件 doc檔案,系統提示);
專案——>右鍵——>匯出(export)
Java中資料型別轉換方式:
基本資料型別之間轉換:自動轉換(值的大小小於被賦值變數大小),強制轉換(值的大小大於被賦值變數大小)。
複合資料型別之間轉換,或複合資料型別和基本資料型別之間轉換:使用資料型別轉換的函式。
Integer.toString();整型--->字串
Integer.parseInt();字串--->整型
Double.toString();浮點--->字串
Double.parseDouble();字串--->浮點
Java類的定義:公有的,預設的。
- 成員變數(屬性):資料儲存,資料結構維護。
- 訪問許可權:公有的,私有的,受保護的,預設的。
- 儲存方式:預設的(動態儲存),靜態儲存,只讀儲存,等。
動態儲存:預設的。在建立一個物件時,該成員變數,儲存堆區。且建立的每一個物件都獨立使用一塊記憶體空間。
對於此成員變數的訪問只能通過物件名。
靜態儲存:在定義成員變數時,加入static關鍵字。該成員變數在程式時,就已經儲存在全域性資料區,其建立不依賴於物件的建立。
故,靜態成員變數只有一個,被多個物件所共享。既可以通過物件名引用也可以通過類名引用(系統推薦通過類名)。
-
- 資料型別:
- 成員函式(方法):對本類中多定義的成員變數的相關的操作。
- 訪問許可權:公有的,私有的,受保護的,預設的。
- 儲存方式:預設的(動態儲存),靜態儲存,只讀儲存,抽象,同步等。
動態儲存:只能通過物件名稱來呼叫。
為動態成員變數服務的(一般都是寫操作動態成員變數的程式碼,當然在其中也可以出現靜態成員變數的訪問)。
靜態儲存:通過類名或物件名稱來呼叫(推薦使用類名)。
為靜態成員變數服務的(只能寫操作靜態成員變數的程式碼)。
-
- 函式的定義格式:返回值,函式名稱,引數列表:
函式在一般情況下,遵循先定義後使用的原則。
函式的定義:引數叫做形參(只能變數,接受資料。佔用記憶體空間)。
函式的呼叫:引數叫做實參(變數,常量,表示式,傳送資料的)。
因為變數的作用域不同,需要在主調函式向被調函式傳值時,需要通過引數。
引數的傳參的方式:
值傳遞:引數的資料型別為基本資料型別時,都是值傳遞。
地址傳遞:除了基本資料型別,都是地址傳遞。
在被調函式向主調函式返值時,需要通過引數的地址傳遞或函式的返回值。
-
- 函式重名:多型性。
1.不同類中同名函式:在呼叫時通過類名或物件名區分呼叫的函式具體哪個函式。
2.同一個類中同名函式:函式的過載。
函式的過載規則:函式名相同,但函式引數的型別,個數,順序,有一個不同。
編譯之前:
void aa();
int aa(int i);
int aa(char i);
String aa(int i,int j);
String aa(int a,int b);
String aa(int i,char j);
String aa(char a,int b);
編譯之後:
void aa();
int aaint(int i);
int aachar(char i);
String aaintint(int i,int j);
String aaintint(int a,int b);
String aaintchar(int i,char j);
String aacharint(char a,int b);
3.函式重寫:子類和父類中有同名函式,呼叫的是那個函式。
- 建構函式:一般情況下訪問許可權是public,沒有返回值,函式名稱必須和類名同名,引數可以任意設定,也有函式過載。(java中乜有拷貝建構函式和解構函式)
一個類可以存在多個建構函式,建構函式使用是在new建立一個物件時,自動呼叫的。某一個物件建立時,只能呼叫一個建構函式。
建構函式建立:
1.當在類中沒有為其指定一個建構函式時,系統會為其自動新增一個建構函式,這個建構函式就做預設建構函式(無引數,無程式碼)。
public 類名()
{
//預設建構函式
}
2.如果指定了類的建構函式,那麼其預設的建構函式,系統將不會自動建立。
3.建構函式不能顯示呼叫,它是new物件呼叫,作用是用來進行對物件的初始化賦值。
注意:建立一個物件時,先開闢記憶體空間,然後執行變數定義時賦值,最後才是執行建構函式賦值。
final 作用於成員變數時,這個成員變數代表只讀變數。只能在定義變數時,或建構函式中對其賦值一次。
如果定義變數時賦值,在建構函式中就不能再次賦值(賦值一次,在new物件時)。
this指標和this函式();
this指標:代表本物件的記憶體地址。
this函式:代表呼叫本類的其它建構函式。
類的定義習慣:
1.動態成員變數私有訪問許可權,通過get,set方法來進行操作。靜態成員變數直接定義公有的訪問許可權。
2.定義兩個建構函式(一個為無參建構函式,一個具有對該類所有成員變數進行初始化賦值引數的建構函式)
Ctrl +A ——>Ctrl + I(介面美化)
將很多行同時縮排:選中這些行 Tab(增加縮排) Shift+Tab (減少縮排)
類成員 定義為私有——>選中函式——>右鍵——>Source——>getandset (直接生成getName(),setName())
類的關係:組合(一個類包含另一個類,兩個類分別建立例項),繼承(一個類是另一個類功能擴充套件,只需要建立一個類例項)
類的組合:
public class A
{
public int i=10;
}
public class B
{
public A a=new A();
public int i=10;
}
public static void main(String arg[])
{
B b=new B();
b.a.i;
b.j;
}
類的繼承:
public class A
{
public int i=10;
}
public class B extends A
{
public int i=10;
}
public static void main(String arg[])
{
B b=new B();
b.i;
}
繼承特性:
1.繼承程式碼實現,繼承的儲存結構(和組合對比)。
2.Java中所有的類彼此之間都有繼承關係,所有類都繼承Object類,將其稱為基類。如果不手動設定一個類的父類,系統會預設其父類為Object類。
3.一個類只能有一個父類(單一的繼承),一個類可以有多個父介面(多重的繼承)。
4.在父類和子類同名成員變數。
建立子類物件,其會先將父類的成員變數都建立出來,然後在建立其自己的成員變數。同名時,兩個同名的成員變數分別佔用自己的記憶體空間。
物件名.成員變數、this.成員變數代表都是子類中的成員變數。在子類內部使用super.成員變數代表其父類同名成員變數。
注意:子類不能直接查詢其父類的父類的同名變數,需要通過其父類中轉。
5.super指標和super函式:super指標代表子物件中屬於父物件部分記憶體空間的地址。super函式代表呼叫其父類的成員函式。
如果在子類的夠著函式中沒有指定其呼叫其父類的哪一個建構函式,則系統預設呼叫父類的預設建構函式。否則,不再自動呼叫super函式。
6.建構函式中:this函式和super函式,只能出現一個,因為這個函式的使用規則,都必須寫在建構函式的第一行。
7.在父類和子類同名成員函式。。。。
靜態變數:存在於全域性資料區,不以來於物件的建立
//班級類中
public ststc String no;
//主函式中
TClass.no = "001";——>通過類名引用(系統推薦)
new TClass().no = "002";——>通過物件名引用
形參佔用記憶體(棧區,呼叫函式時即生成)
字串佔2塊記憶體,一是地址,二是內容 null和空字串是不同的
TClass() {no="";} 等價於 在外邊定義時private String no = null;
建立一個物件時,先開闢記憶體空間,然後執行變數定義時賦值,再執行建構函式(建構函式防止空指標異常)
Object java中的亞當夏娃,是所有類的父類
public class A {int i=10;}
public class B {int i=20;}
輸出 b.i = 20
記憶體空間仍然存在,只是被自雷覆蓋,記憶體結構如圖