類與對象
什么是類?
知識遷移:類比 C 語言中的結構體
類的描述
類是一個對象的抽象,從字面意思就表示一個類的事物,類具有屬性和方法(行為),對象是類的一個具體表現
總結:類是對象的抽象,對象是類的映射
實例理解:創建一個貓類
對象的引出
由這個類可以映射出不同的貓(對象),當屬性和方法在變化時只需要在類中進行修改就可以映射到不同的類上,這也體現了類的便捷性
小結:類與對象的關系
-
類是抽象的、概念的,代表一類事物,比如人類、貓類……,即它是數據類型。
-
-
類是對象的模板,對象是類的一個個體,對應一個實例。
快速入門
第一種方式:直接創建一個對象
public class hello{public static void main(String[] args){person person1 = new person(); }
}
class person{int age;String name;double height;String[] job;
}
第二種方式:先聲明一個對象,之后創建
public class hello{public static void main(String[] args){person person1;person1 = new person();}
}
class person{int age;String name;double height;String[] job;
}
代碼解析
person person1 = new person();
在 main 方法中使用 new 創建一個類,用一個數據類型為 person 這個類的一個對象接收
重點:對象在內存中的存在形式

分析
-
(1)當還沒有創建 cat 這個類并用一個數據類型為 cat 這個類的一個對象接收時,cat 在棧空間中指向空
-
-
1. 在堆空間中分配一段空間,存儲類中的成員變量,初始值為對應數據類型的默認值,最后把地址返回給 cat,使得cat 指向這個堆空間
-
-
3.String 是一個類,當成員變量中有 String 出現時,會把 String 放到方法區中的一個常量池里面,把這個地址返回給堆空間中的 String
類的要素一:屬性
概念:成員變量 = 屬性 =field(字段)
即成員變量是用來表示屬性的
1. 簡要提及訪問修飾符
2. 使用細節
-
(1)屬性的定義類型可以為任意類型,包含基本類型和引用類型
-
數據類型 | 默認值 |
---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
char | ‘\u0000’ |
float | 0.0f |
double | 0.0d |
String(是一個類) | null |
屬性的訪問方法:使用類.屬性
的方式,可以用一個變量接收結果
注意點:如果屬性是String
類型,即是一個類(引用類型),需要和類一樣,需要創建一個對象接收
代碼示例
public clas objectexercise{public static void main(String[] args){person person1 = new person();int age = person1.age = 18;double height = person1.height = 1.63;String name = person1.name = "jackson";person1.job = new String[] {"student","programmer"};String[] job = person1.jobSystem.out.println("age: " + age);System.out.println("height: " + height);System.out.println("name: " + name);System.out.print("job: ");for(int i = 0; i < person1.job.length; i++){System.out.print("第" + (i+1) + "份工作是:" + person1.job[i] + " ");}}
}
class person{int age;String name;double height;String[] job;
}
age: 18
height: 1.63
name: jackson
job: 第1份工作是:student 第2份工作是:programmer
深刻理解對象的內存分配機制
過程再回顧
person p = new person()
p.name = "jack"
p.age = 10;
-
(1)先加載 Person
類信息(屬性和方法信息,只會加載一次)
-
-
(3)把地址賦給 p
,p
就指向對象
-
練習一
Person p1 = new Person();
p1.age = 10;
p1.name = "小明";Person p2 = p1;
問P2
的屬性是否和P1
一致?
首先明確一點,類是引用類型,在傳值的過程中傳的地址,代碼中把P1
的地址賦給了P2
,即P1
和P2
指向同一塊堆空間,結果一致
練習二
public class Person {public int age;public String name;
}
public class Main {public static void main(String[] args) {Person a = new Person();a.age = 10;a.name = "小明";Person b;b = a;System.out.println(b.name); b.age = 200;b = null;System.out.println(a.age); System.out.println(b.age); }
}