1. 使用“private”關鍵字封裝。
·封裝屬性: private 數據類型 屬性名稱 = 默認值;
·封裝方法: private 返回值類型|void 方法名稱(參數列表)
2. 只要是屬性就必須封裝,被封裝的屬性通過setter 及 getter方法設置和取得,例如:name屬性,setter:setName(), getter; getName();
`方法名首字母小寫。
·取得屬性用getter(); 設置屬性用setter();
3. 在訪問本類中其他方法的時候,爲了保證此方法時本類中定義的,可以在方法前面加上 this 關鍵字:
this.方法() -> 調用本類方法
例子:
//創建一個類
class Person{
private String name; //私有屬性,外部不可以訪問
private int age; //私有屬性,外部不可以訪問
public void tell(){ //定義說話的方法
// System.out.println("My name is:" + name + ",My age is:" + age); //參數之間用加號
// System.out.println("My name is:" + getName() + ",My age is:" + getAge());
// 有的時候爲了明確表明此方法是在類中定義的,會在方法前面加一個關鍵字this
System.out.println("My name is:" + this.getName() + this.getAge());
}
//定義方法時外部可以間接訪問
public void setName(String n){ //方法的首字母小寫
name = n;
}
public void setAge(int a){ //定義setter方法的作用
if(a >= 0 && a <= 200){
age = a;
}else{
System.out.println("年齡小於0!!!");
};
}
public String getName(){
return name;
}
public int getAge(){ //方法的首字母小寫
return age;
}
};
//封裝
public class OODemo07{ //主類
public static void main(String args[]){
Person per = new Person();
per.setName("Jerry");
per.setAge(30); //age可以是隨便的數字所以無法知道是否有效
per.tell();
}
};
4. 關於類、對象
如果一個類包含了屬性和方法,那麼該類的每一個對象都具有自己的屬性,但無論一個類有多少個對象,這些對象共享同一個方法。
public class ReferenceTest
{
int a = 4;
public static void main(String[] args)
{
ReferenceTest rt = new ReferenceTest();
ReferenceTest rt1 = new ReferenceTest(); //new 出來的新的對象擁有自己獨立一份ReferenceTest類的屬性,共享ReferenceTest中的方法
ReferenceTest rt2 = new ReferenceTest();
rt1.a = 5; // 只改變a1保存的對象的地址的屬性
rt2.a = 6; // 只改變a2保存的對象的地址的屬性
System.out.println(rt.a); // 4
System.out.println(rt1.a); // 5
System.out.println(rt2.a); // 6
}
}
5. 什麼是引用類型(reference type):引用類型是用在對象上的。一個對象可以被多個引用所指向,但同一時刻,每個引用只能指向唯一的一個對象,如果一個對象被多個引用所指向,那麼無論那個引用對對象的屬性進行了修改,都會反應到其他的引用當中。
public class Person{ //定義Person類型
int age = 20;
public void change(Person person){ //change方法接受一個person類型變量
person = new Person();
person.age = 30;
}
public static void main(String []args){
Person person = new Person(); //將new出來的對象賦值給person引用數據類型
int age = person.age;
System.out.println(age); //Boolean默認值是false
person.change(person);
int age2 = person.age;
System.out.println(age2);
}
}
對象:new Person() 這個new出來的東西就是對象。而person是引用數據類型,用來保存生成對象時返回的地址。
引用數據類型:person是一個引用數據類型,裏面存放的是對象的地址。
例1:java的參數傳遞
public class ParamTest{
public static void main(String args[]){
Person person = new Person();//返回地址,保存到引用數據類型person變量中
person.change(person);//傳person保存的地址
int age = person.age;
System.out.println(age);
System.out.prinlnt("++++++++++++++++++++");
int i = 10;
person.change2(i);/將10這個實參的值傳遞過去,形參的改變對i的值沒有影響
System.out.println(i);
}
};
class Person{
int age = 20;
public void change(Person person){
person = new Person();
person.age = 30;
}
public void change2(int age){//形參的改變作用域僅在此方法域內有效
age = 40;
}
}
例2: java 參數傳遞,重要
public class ParamTest
{
public void changePoint(Point point) //將實參point0X001賦值給形參,此時的point還是0X001
{
point = new Point(); //到此步驟後,將新的對象地址0X002賦給了形參
point.x = 3; //此時的point存放的是0X002,操作的也是new Point()的新對象自己擁有的屬性
point.y = 4;
}
public static void main(String[] args)
{
ParamTest pt = new ParamTest();
Point point = new Point();
pt.changePoint(point); // 傳遞實參0X001
System.out.println(point.x);
System.out.println(point.y);
}
}
class Point
{
int x; //橫座標
int y; //縱座標
}
Java方法參數傳遞總結:對於 java 中的方法參數傳遞,無論傳遞的是原生數據類型還是引用數據類型,統一是傳值(pass by value)。對於引用數據類型保存的是對象的地址,在方法傳遞的時候也是把引用數據類型的值(地址)傳遞過去。
6. new 關鍵字在生產對象時按順序完成了三件事情:
a) 爲對象開闢內存空間。
b) 調用類的構造方法。
c) 將生成的對象的地址返回。
7. 聲明類類型的類成員變量
在一個類中可以聲明一個引用類型的成員變量。作用:可以通過本類中的引用類型訪問所引用類型所聲明的類中的屬性或方法。
例如:
//僞代碼
class Person{
String name;
Book book; //聲明Book類型變量book指向Book類
Person per = new Person();
per.book.getBook(); //操作Book類中的數據
}
class Book{
public String title;
public String getBook(Book book){
this.title = book;
}
}
範例:
在Node類中聲明一個Note2類型的變量next1,那麼next1存儲的是Node2類的引用,指向Node2這個類。將所有類實例化後,可以使用對象。的方式操作數據,所以可以通過next1訪問Node2類中的成員變量next2,因爲next2又是Node3類的引用,所以可以通過next2訪問Node3中的成員變量。(實際上next1 存儲的就是 Node對象的引用,next1就是Node2對象,所以可以使用 next1.data這種方式操縱Node2對象中的數據。因爲 next1 就是 Node2 對象)
例如:Node.next1.next2.name; //可以操縱Node3 類中的屬性name或方法。