面向物件的基本特性
面向物件
面向物件:將功能封裝進物件,強調了具備功能的物件
面向過程:強調的是功能的行為
oop:繼承 封裝 多型
類之間的關係 關聯關係 本類中其他類的使用 繼承關係 繼承其他類 聚合關係
棧:物件的引用區域性變數 堆:new出來的東西(包含成員變數)
成員變數:定義在類裡 作用域內:類 修飾符 private protected 預設 public 宣告的時候不顯示值,不同的資料型別會有不同的預設初始化值,成員變數存放在堆中
區域性變數:方法內定義 作用域:方法體內 沒有修飾符,與所在的方法一致 一定要顯示的賦值,存放在棧中
方法的過載
方法名相同,引數的型別和引數個數不同,與是否是void or int等無關
面向物件程式設計的三條主線:
1.類以及類的構成成分:屬性 方法 構造器 程式碼塊 內部類
2.面向物件程式設計特徵:封裝性 繼承性 多型性 (抽象性)
3.其他的關鍵字 this super package import static final abstract interface
匿名類物件的使用
建立物件的時候是匿名的 new Cicle().show()
-
只需要一次呼叫類的物件時,可以考慮使用匿名的方式建立類的物件
-
特點:建立的匿名類的物件只能呼叫一次 說明:在堆中建立一個匿名物件,沒有物件的引用,一次呼叫後,在棧中沒有物件的引用,JVM認為是垃圾,啟動垃圾回收機制
可變形參的使用
public int sum(int i) {
return i;
}
public int sum(int i, int j) {
return i + j;
}
public int sum(int i, int j,int k) {
return i + j+k;
}
//等同於
public int sum(int ... i){
int sum = 0;
for (int j = 0; j < i.length; j++) {
sum+=i[j];
}
}
格式: 在方法的引數型別定義上,資料型別 … 引數名
可變個數形參的方法與同名的方法之間構成過載
可變個數的形參在呼叫時,個數從0開始,到無窮多個
方法的引數傳遞
1.形參 方法宣告時的引數
2.實參:呼叫方法時,實際傳遞的值
傳遞規則:java中引數傳遞機制,值傳遞機制
1.形參是基本資料型別的 將實參的值傳遞給形參
2.形參是引用資料型別的:將實參引用型別變數的值(對應的堆空間的物件實體的首地址值)傳遞給形參的引用型別變數
棧空間:
堆空間:
Test t = new Test(); //必須建立一個物件
int i=3;
int j=9;
t.swap(i,j);
//在棧空間建立了 ij 同時在棧空間建立了 ij 呼叫swap 只是改變了棧空間形參中ij的值
System.out.println("i:"+i+"j:"+j);
}
void swap(int i, int j)
{
int temp;
temp = i;
i = j;
j = temp;
}
對比
public class Test {
public static void main(String[] args) {
Test tt = new Test(); //棧中建立了tt引用
Sw s = new Sw();//棧中建立了s的引用 指向了堆中的 ij
System.out.println("i:" + s.i + "j:" + s.j);
tt.swap(s);
System.out.println("i:" + s.i + "j:" + s.j);
}
void swap(Sw swa) {
//交換了堆中的值
int temp;
temp = swa.i;
swa.i = swa.j;
swa.j = temp;
}
}
class Sw {
//在堆中建立了 i,j並賦值
int i = 9;
int j = 56;
}