標籤:this關鍵字 his border nbsp 技術 接受 stat xxx 技術分享
一、匿名對象
(1)沒有名字的對象
(2)應用情境
A:調用方法,僅僅只調用一次的時候。
class Car{ //描述屬性。顏色,輪胎數。 String color; int number; //描述行為。 void run() { System.out.println(color+":"+number); }}class CarDemo{ public static void main(String[] args) { //採用匿名對象調用方法 new Car().run(); new Car().run(); }}
B:可以作為實際參數傳遞。
class Student { public void show() { System.out.println("我愛學習"); }}class StudentDemo { public void method(Student s) { s.show(); }}class NoNameDemo { public static void main(String[] args) { //帶名字的調用 Student s = new Student(); s.show(); s.show(); System.out.println("--------------"); //匿名對象 //new Student(); //匿名對象調用方法 new Student().show(); new Student().show(); //這裡其實是重新建立了一個新的對象 System.out.println("--------------"); //匿名對象作為實際參數傳遞 StudentDemo sd = new StudentDemo(); //Student ss = new Student(); //sd.method(ss); //這裡的s是一個實際參數 //匿名對象 sd.method(new Student()); //在來一個 new StudentDemo().method(new Student()); }}
二、基本類型和參考型別作為參數傳遞的區別
1、基本類型作為參數傳遞(main方法中值不變)
|
class Demo
{
public static void main(String[] args)
{
int x = 4;
show(x);
System.out.println("x="+x);//4
}
public static void show(int x)
{
x = 5;
}
} |
|
說明:
基本類型作為參數傳遞時,其實就是將基本類型變數x空間中的值複製了一份傳遞給調用的方法show(),當在show()方法中x接受到了複製的值,再在show()方法中對x變數進行操作,這時只會影響到show中的x。當show方法執行完成,彈棧後,程式又回到main方法執行,main方法中的x值還是原來的值。
2、引用參數作為值傳遞
說明:
當引用變數作為參數傳遞時,這時其實是將引用變數空間中的記憶體位址(引用)複製了一份傳遞給了show方法的d引用變數。這時會有兩個引用同時指向堆中的同一個對象。當執行show方法中的d.x=6時,會根據d所持有的引用找到堆中的對象,並將其x屬性的值改為6,show方法彈棧。由於是兩個引用指向同一個對象,不管是哪一個引用改變了引用的所指向的對象的中的值,其他引用再次使用都是改變後的值。
三、封裝
(1)隱藏實現細節,提供公用的訪問方式
(2)好處:
A:隱藏實現細節,提供公用的訪問方式
B:提高代碼的複用性
C:提高代碼的安全性
(3)設計原則
把不想讓外界知道的實現細節給隱藏起來,提供公用的訪問方式
(4)private是封裝的一種體現。
封裝:類,方法,private修飾成員變數
(5)使用setXXX(),getXXX()對外提供
四、構造方法
(1)作用:用於對對象的資料進行初始化
(2)格式:
A:方法名和類名相同
B:沒有傳回值類型,連void都不能有
C:沒有傳回值
修飾符 構造方法名(參數列表){
}
/* 構造方法: 給對象的資料進行初始化 格式: A:方法名與類名相同 B:沒有傳回值類型,連void都沒有 C:沒有具體的傳回值*/class Student { private String name; //null private int age; //0 public Student() { System.out.println("這是構造方法"); }}class ConstructDemo { public static void main(String[] args) { //建立對象 Student s = new Student(); System.out.println(s); //[email protected] }}
思考題:構造方法中可不可以有return語句呢?
可以。而是我們寫成這個樣子就OK了:return;
其實,在任何的void類型的方法的最後你都可以寫上:return;
(3)構造方法的注意事項
A:如果我們沒寫構造方法,系統將提供一個預設的無參構造方法
B:如果我們給出了構造方法,系統將不再提供預設構造方法
如果這個時候,我們要使用無參構造方法,就必須自己給出。
推薦:永遠手動自己給出無參構造方法。
C:一個類中可以有多個建構函式,多個建構函式是以重載的形式存在的
D:建構函式中也是有return語句的,用於結束初始化動作。
E:建構函式是可以被private修飾的,作用:其他程式無法建立該類的對象
(4)給成員變數賦值的方式
A:setXxx()
B:帶參構造方法
(5)一般方法和構造方法的區別
建構函式在對象建立時就執行了,而且只執行一次。
一般函數是在對象建立後,需要使用時才被對象調用,並可以被多次調用。
思考:
有了建構函式之後可以對對象的屬性進行初始化,那麼還需要對應的set和get方法嗎?
需要相應的set和get方法,因為對象在建立之後需要修改和訪問相應的屬性值時在,這時只能通過set或者get方法來操作。
五、this關鍵字
(1)代表當前類的引用對象
記住:哪個對象調用方法,該方法內部的this就代表那個對象
(2)調用其他建構函式的語句必須定義在建構函式的第一行,原因是初始化動作要最先執行。
java學習筆記 --- 物件導向2