一、 構造器(構造方法|構造函數)
在創建對象時(new),必會調用一個特殊的方法,這個方法是初始化對象信息的爲new服務的。這個方法稱爲“構造器”
使用 new + 構造方法創建一個新的對象。
構造函數是定義在 Java類中的一個用來初始化對象的函數。
構造函數與類同名且沒有返回值。
例如: Person類的構造函數:
public class Person {
int id;
int age;
Person(int n, int i){
id = n;
age = i;
}
}
創建對象時,使用構造函數初始化對象的成員變量
public class Test {
public static void main(String[] args) {
Person tom = new Person(1, 18);
Person jeck = new Person(2, 20);
}
}
二、構造方法的特點:
1) 名稱必須和類名一致,與類名相同
2) 沒有返回類型|void
3) 構造器可以存在return,return有選擇的跳出構造器
4) 不能隨便調用,和new在一起使用,其他時候不能調用
5) 修飾符不能爲 final abstract static
作用:
初始化對象信息,不是用於創建對象的
空構造:
沒有參數的構造器、無參構造
1) 一個類中,如果沒有顯示|手動 加入 任意構造器 javac編譯後 自動加入空構造
2) 一旦加入構造器, javac 不會加入空構造器
三、方法的重載
方法的重載是指一個類中可以定義有相同的方法名,但參數不同的多個方法。調用時,會根據不同的參數列表選擇對應的方法。
四、構造方法的重載
與普通方法一樣,構造方法也可以重載
例子如下:
五、 引用與內存分析
A:一個對象的內存圖
B:二個對象的內存圖
C:三個對象的內存圖
內存分析
劃分
引用的特點:
1) 同一時刻一個一引用只能指向一個對象
2) 一個對象可以被多個引用所指向,其中一個對其進行更改,該對象的其他引用也可見該變化
3) Java一切爲值傳遞,引用拷貝地址
約定俗成的命名規則
類名的首字母大寫
變量名和方法名的首字母小寫
運用駝峯標識
例子:
public class Cat {
String color; // 毛的顏色
String name; // 名稱
public void chase(Mice mice){
mice.type = "jerry"; // 改變
System.out.println(name + " 逮 " + mice.type);
}
public static void main(String[] args) {
// 引用 與內存分析(運行期爲--》數據的流向)
Cat cat = new Cat();
cat = new Cat();
// 引用發生變化,同一個時刻一個引用只能指向一個對象
cat.color = "黑色";
cat.name = "tom";
Mice mice = new Mice();
mice.type = "米奇";
// 將二者聯繫起來 --》 依賴
cat.chase(mice);
// 傳遞時,值拷貝,拷貝地址,拷貝完成後 一個對象被多個引用所指向
System.out.println(mice.type);
// jerry 其中一個對其發生變化,該對象的其他引用也可減該變化
}
}
class Mice{
String type;
}
定義如下類
public class BirthDate {
int day;
int month;
int year;
public BirthDate(int d, int m, int y){
day = d;
month = m;
year = y;
}
void setDay(int d){
day = d;
}
void setMonth(int m){
month = m;
}
void setYear(int y){
year = y;
}
int getDay(){
return day;
}
int getMonth(){
return month;
}
int getYear(){
return year;
}
void display(){
System.out.println(day + "-" + month + "-" + year);
}
}
測試類:
public class Test {
public static void main(String[] args) {
Test test = new Test();
int date = 9;
BirthDate d1 = new BirthDate(7,7,1970);
BirthDate d2 = new BirthDate(1,1,2000);
test.change1(date);
test.change2(d1);
test.change3(d2);
System.out.println(date);
System.out.println(d1);
System.out.println(d2);
}
void change1(int i){
i = 1234;
}
void change2(BirthDate b){
b = new BirthDate(22,2,2004);
}
void change3(BirthDate b){
b.setDay(22);
}
}
總結:
對象的創建和使用,必須使用new 關鍵字創建對象,使用對象引用.成員變量來引用對象的成員變量,使用對象引用.方法(參數列表)來調用對象的方法。
同一類的每個對象有不同的成員變量存儲空間,同一類的每個對象共享該類的方法,
非靜態方法是針對每個對象進行調用 。
樂字節原創,轉載請註明出處。請繼續關注樂字節