在面向對象中最重要的部分就是類與對象。
類實際上是一個共性的産物,而對象隻是一個個的具體的實作。
類中規定了對象所具備的一切功能,而類是依靠對象所使用的。
如果要想使用一個類,則必須有一個對象存在。
根據class可以聲明一個類,類中包含屬性和方法。
屬性:例如:人的姓名、年齡等,這些屬性可以完全的代表一個抽象的類型。
方法:例如:人的具體的功能,說話、唱歌等。 。。。。
按照以上的格式定義一個類:Person
class Person{
// 屬性
String name ;
int age ;
public void talk(){
System.out.println("姓名:"+name+",年齡:"+age) ;
}
};
有類了之後如果要使用類,則必須産生對象。
<b>産生對象的基本格式:</b>
類名稱 對象名稱 = new 類名稱() ;
<b>通過對象調用類中的屬性:</b>
對象名稱.屬性名稱 = 值
public class OODemo01{
public static void main(String args[]){
Person p = new Person() ;
p.name = "張三" ;
p.age = 30 ;
p.talk() ;
由以上代碼可以發現,類就是通過對象使用的。對象使用之前必須先開辟空間,之後才可以使用。
<b>具體分析:類的執行個體化過程</b>
Person p = new Person() ;
實際上以上的代碼要分為兩個部分:
· <b>聲明對象:</b>Person p = null ;
· <b>執行個體化對象:</b>p = new Person() ;
|- 對象隻有在執行個體化之後才可以使用
如果直接使用了沒有執行個體化(用new開辟空間或是其他方式執行個體化的)對象,則會出現以下的錯誤:
Exception in thread "main" java.lang.<b>NullPointerException</b>
at OODemo01.main(OODemo01.java:13)
<b>對象執行個體化之後的記憶體劃分:</b>
<b> </b><b>之前說了,對象的産生需要兩個步驟</b>
<b> </b><b>· </b><b>第一步是聲明對象,實際上聲明對象就是指在棧記憶體中開辟了一段空間,但是此空間并不代表具體的内容</b>
<b> </b><b>· </b><b>第二步是執行個體化對象,一旦使用了new</b><b>關鍵字(隻要看見new</b><b>就表示要在堆記憶體中開辟空間),之後會在堆記憶體中開辟一段相應的空間,之後把此空間的使用權給了棧記憶體中聲明的對象。在堆記憶體中儲存的是一個對象所具備的全部的屬性。</b>
<b> </b><b>所有的方法是儲存在全局代碼區之中。即:所有的對象都共同擁有同一種方法,隻是裡面的屬性的值不一樣。</b>
<b> </b>
<b> public void talk(){</b>
<b> System.out.println("</b><b>姓名:"+</b>name<b>+"</b><b>,年齡:"+</b>age<b>) ;</b>
<b> }</b>
如果現在産生了第二個對象,兩個對象之間會互相影響嗎?
public class OODemo02{
Person p1 = null ;
Person p2 = null ;
p1 = new Person() ;
p2 = new Person() ;
p1.name = "張三" ;
p1.age = 30 ;
p1.talk() ;
p2.name = "李四" ;
p2.talk() ;
p1和p2兩個對象分别占着不同的記憶體空間,是以是不會互相影響的。
類屬于引用資料類型,引用就是指可以将一段空間的使用權交給另外一個對象。
傳遞的是堆記憶體的使用空間,說白了就是為一個已有的對象起一個别名出來,以後可以通過此别名通路對象的具體内容。
public class OODemo03{
p2 = p1 ;
觀察以下的程式代碼,分析其記憶體配置設定過程:
public class OODemo04{
p1.age = 20 ;
在java中所有的不用的記憶體空間統一稱為垃圾,在JAVA中存在自動收集機制,會定期的收集垃圾。
<b>類中方法的互相調用:</b>
一個類中可以存在多個方法,而且多個方法之間也可以互相進行調用。
// print() ;
// 如果非要明确的表示出是在一個類中的調用,可以按以下形式調用
this.print() ;
public void print(){
System.out.println("Hello World!!!") ;
this強調的是在本類之中的操作。
本文轉自 李興華 51CTO部落格,原文連結:http://blog.51cto.com/lixinghua/91230,如需轉載請自行聯系原作者