1. 程式人生 > >java知識點7——面向過程和麵向物件、面向物件的記憶體分析、構造方法

java知識點7——面向過程和麵向物件、面向物件的記憶體分析、構造方法

面向過程和麵向物件

  • 解決簡單問題可以使用面向過程
  • 解決複雜問題:巨集觀上使用面向物件把握,微觀處理上仍然是面向過程。
  • 面向物件具有三大特徵:封裝性、繼承性和多型性,而面向過程沒有繼承性和多型性,並且面向過程的封裝只是封裝功能,而面向物件可以封裝資料和功能。所以面向物件優勢更明顯。

屬性(field,或者叫成員變數)

  • 屬性用於定義該類或該類物件包含的資料或者說靜態特徵
  • 屬性作用範圍是整個類體

面向物件的記憶體分析

  • Java虛擬機器的記憶體可以分為三個區域:棧stack、堆heap、方法區method area
  • 棧的特點如下:

        1. 棧描述的是方法執行的記憶體模型

。每個方法被呼叫都會建立一個棧幀(儲存區域性變數、運算元、方法出口等)

        2. JVM為每個執行緒建立一個棧,用於存放該執行緒執行方法的資訊(實際引數、區域性變數等)

   3. 棧屬於執行緒私有,不能實現執行緒間的共享!

        5. 棧是由系統自動分配,速度快!棧是一個連續的記憶體空間!

  • 堆的特點如下:

  1. 堆用於儲存建立好的物件和陣列(陣列也是物件)

  2. JVM只有一個堆,被所有執行緒共享

  3. 堆是一個不連續的記憶體空間,分配靈活,速度慢!

  • 方法區(又叫靜態區)特點如下:

  1. JVM只有一個方法區,被所有執行緒共享!

  2. 方法區實際也是堆,只是用於儲存類、常量相關的資訊!

  3. 用來存放程式中永遠是不變或唯一的內容。(類資訊【Class物件】、靜態變數、靜態方法、字串常量等)

構造方法

         構造器也叫構造方法(constructor),用於物件的初始化。構造器是一個建立物件時被自動呼叫的特殊方法,目的是物件的初始化。

       1. 通過new關鍵字呼叫!!

  2. 構造器雖然有返回值,但是不能定義返回值型別(返回值的型別肯定是本類),不能在構造器裡使用return返回某個值。

  3. 如果我們沒有定義構造器,則編譯器會自動定義一個無參的建構函式。如果已定義則編譯器不會自動新增。

案例:

       1. 定義一個“點”(Point)類用來表示二維空間中的點(有兩個座標)。要求如下:

  (1) 可以生成具有特定座標的點物件。

  (2) 提供可以設定座標的方法。

  (3)提供可以計算該“點”距另外一點距離的方法。

class Point{
	double x,y;
	public Point(double _x,double _y) {
		x=_x;
		y=_y;
	}
	public double getDistance(Point p) {
		return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
	}
}
public class TestConstructor {
	public static void main(String[] args) {
		Point p=new Point(3.0,4.0);
		Point origin=new Point(0.0,0.0);
		System.out.println(p.getDistance(origin));
	}
}

執行結果:5.0