1. 程式人生 > >java入門【八】類與物件

java入門【八】類與物件

類 共性的一個集合

物件 某一個性的產物 物件也是類的一個例項

class組成

  •  Field (成員,變數 ,屬性)變數的集合用來描述類
  • Method(方法)由物件呼叫

定義物件

  • 宣告並例項化物件

類名稱 物件名稱 = new 類名稱();

  • 分佈完成

1.宣告物件 類名稱 物件名稱 = null;

2.例項化物件 物件名稱 = new 類名稱();

關於new:我們引用資料型別需要開闢新的記憶體

//定義類
class Book{
	String title;//Field
	double price;//Field
	public void getInfo(){
		System.out.println("圖書名稱:"+title+"圖書價格:"+price);
	}//Method
}

public class HelloWorld{
	public static void main(String args[]){
		Book bk = new Book();
		bk.title = "小王子";
		bk.price = 18.8;
		bk.getInfo();
	}
}

下面我們來看java與c的一個區別就是會預設賦予變數初值

//定義類
class Book{
	String title;//Field
	double price;//Field
	public void getInfo(){
		System.out.println("圖書名稱:"+title+"圖書價格:"+price);
	}//Method
}

public class HelloWorld{
	public static void main(String args[]){
		Book bk = new Book();
		//bk.title = "小王子";
		//bk.price = 18.8;
		bk.getInfo();
	}
}

java對於記憶體的操作

如果我們使用分佈去定義類

//定義類
class Book{
	String title;//Field
	double price;//Field
	public void getInfo(){
		System.out.println("圖書名稱:"+title+"圖書價格:"+price);
	}//Method
}

public class HelloWorld{
	public static void main(String args[]){
		Book bk = null;//在棧上宣告
		bk = new Book();//在堆上開闢記憶體
		bk.title = "小王子";
		bk.price = 18.8;
		bk.getInfo();
	}
}

假如我們不去堆上開闢記憶體

假如不去宣告

 

引用傳遞

//定義類
class Book{
	String title;//Field
	double price;//Field
	public void getInfo(){
		System.out.println("圖書名稱:"+title+"圖書價格:"+price);
	}//Method
}

public class HelloWorld{
	public static void main(String args[]){
		Book bk1 = null;//在棧上宣告
		Book bk2 = null;
		bk1 = new Book();//在堆上開闢記憶體
		bk1.title = "小王子";
		bk1.price = 18.8;		
		bk2 = bk1;
		bk2.price = 16;
		bk1.getInfo();
	}
}

 

說明多個棧記憶體可以同時操作一個堆記憶體,但是一個棧記憶體只能儲存一個堆記憶體的地址

//定義類
class Book{
	String title;//Field
	double price;//Field
	public void getInfo(){
		System.out.println("圖書名稱:"+title+"圖書價格:"+price);
	}//Method
}

public class HelloWorld{
	public static void main(String args[]){
		Book bk1 = null;//在棧上宣告
		Book bk2 = null;
		bk1 = new Book();//在堆上開闢記憶體
		bk2 = new Book();
		bk1.title = "小王子";
		bk1.price = 18.8;	
		bk2.title = "安徒生童話";
		bk2.price = 89.9;
		bk2 = bk1;
		bk2.price = 16.6;
		bk1.getInfo();
		bk2.getInfo();
	}
}

 

 

但是我們可以看到一塊沒有被棧指向的記憶體,也就是相當於c中沒有指標的記憶體 我們無法操作 成為垃圾

但是java中沒有free(),而是引入了GC將垃圾回收,釋放記憶體。就不用像c一樣被操作記憶體所困擾