1. 程式人生 > >Java基礎複習---面向物件程式設計

Java基礎複習---面向物件程式設計

面向物件是Java語言的基本思想。類是Java中最核心最基本的內容。

類,是Java語言的基礎,任何的操作都要在一個類中完成,如方法,建構函式,引數的傳遞等等。

類的一般形式, class 類名{

型別  變數名;

型別  變數名;

......

型別  方法名(引數){

方法內容}

......}

如class People{

String name;

String sex;

Int age;

void  eat(){

Ststem.out.println(“我在吃飯”);}

void tea(){

Ststem.out.println(“我在喝茶”)}

......}

有時宣告類時,需要在類的前面加上修飾符進行修飾。

private 只在本類中可見

protected 在本類或者同一個包中可見

public 對任何類可見

沒有加修飾符的變數,預設為private

方法分為有返回型別方法和無返回型別方法兩種:不需要返回值,可以使用void進行修飾;如需要返回值,方法的型別定義必須和返回值的型別相同:如public String ear(){

return "我在吃飯";}

使用帶引數的方法的一般形式如下:

修飾符  型別  方法名(引數型別  引數1,引數型別  引數2...){

方法體}

主方法

一個程式寫好之後,如何去執行,從哪裡去執行?主方法就是程式的入口

package ch02;


public class People {
<span style="white-space:pre">	</span>private String name;
<span style="white-space:pre">	</span>private String sex;
<span style="white-space:pre">	</span>private int age;

<span style="white-space:pre">	</span>public People(){
<span style="white-space:pre">				</span>
<span style="white-space:pre">	</span>}//自己設計的構造方法
<span style="white-space:pre">	</span>public String eat(String food) {
<span style="white-space:pre">		</span>return "我在吃" + food;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void tea() {
<span style="white-space:pre">		</span>System.out.println("我在喝茶。");
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>// 呼叫eat()和tea()
<span style="white-space:pre">	</span>public static void main(String[] args) {
<span style="white-space:pre">		</span>String str = new People().eat("apple");
<span style="white-space:pre">		</span>System.out.println(str);
<span style="white-space:pre">		</span>new People().tea();
<span style="white-space:pre">	</span>}
}

構造方法

在程式中建立物件時,也需要清除或者修改其屬性的值,這就是構造方法

構造方法,是類中比較特殊的一種方法,主要用於初始化一些引數。

Java中提供有預設的構造方法,如果在類中沒有提供自己的構造方法,在編譯時,編譯器就會為這個類新增一個構造方法。構造方法的語法如下

People people = new People();

這個語句中,構造方法People()實際完成的效果是People(){name = null;sex = null;age = 0;}

如果在類中設計了自己的構造方法,那麼構造方法的名稱必須要和類的名稱相同,且沒有返回值。在類中提供自己的建構函式後,在編譯時,編譯器就不會提供預設的構造函數了。在建立物件時,就需要自己新增引數,也就是各屬性被初始化的值。

package ch02;

public class PeopleConstructor {

	private String name;
	private String sex;
	private int age;

	public PeopleConstructor(String iname, String isex, int iage) {
		name = iname;
		sex = isex;
		age = iage;
	}

	public String eat(String food) {
		return "我在吃" + food;
	}

	public void tea() {
		System.out.println("我在喝茶。");
	}

	// public static void main(String[] args) {
	// PeopleConstructor P = new PeopleConstructor();
	// System.out.println("初始值" + P.name);
	// System.out.println("初始值" + P.sex);
	// System.out.println("初始值" + P.age);
	// }

	public static void main(String[] args) {
		PeopleConstructor P = new PeopleConstructor("dby", "man", 22);
		System.out.println("姓名:" + P.name);
		System.out.println("性別:" + P.sex);
		System.out.println("年齡:" + P.age);
	}
}


成員變數

又稱全域性變數,定義在類中,和方法出於同一個層次。語法:變數修飾符  型別 變數名

成員變數名稱可以和類中的方法同名

區域性變數

是在方法中定義和使用的,它的使用範圍僅限於所宣告的方法中。不同方法內定義的變數名可以相同。

this關鍵字

使用this關鍵字可以不通過物件,引用成員變數和方法

如果成員變數和方法中的引數名相同時,this很重要

package ch02;

public class ThisTwoTest {
	String eat = "吃飯時間";
	String tea = "下午茶時間";
	int i = 16;

	public void eat(int i) {

		if (i > 11 && i < 14) {
			System.out.println("現在時間是:" + i + "點,是" + eat);
		} else if (i > 15 && i < 17) {
			System.out.println("現在時間是:" + i + "點,是" + tea);
		}
	}

	public void tea(int i) {

		if (this.i > 11 && this.i < 14) {
			System.out.println("現在時間是:" + this.i + "點,是" + eat);
		} else if (this.i > 15 && this.i < 17) {
			System.out.println("現在時間是:" + this.i + "點,是" + tea);
		}
	}

	public static void main(String[] args) {
		ThisTwoTest t = new ThisTwoTest();
		t.eat(12);// eat直接傳12,現在時間是:12點,是吃飯時間
		t.tea(12);// 有this關鍵字,使用的是成員變數this.i,現在時間是16點,是下午茶時間
	}
}

有時要在一個建構函式中呼叫另一個建構函式,而建構函式之間的差別也僅在於其中的引數,使用this關鍵字時,編譯器可以根據其中的引數來尋找不同的構造方法

package ch02;

public class ThisConstructor {
	String name;

	public ThisConstructor(String name) {
		this.name = name;
		System.out.println("姓名:" + this.name);
	}

	public ThisConstructor() {
		this("張三");
	}

	public static void main(String[] agrs) {
		new ThisConstructor();
	}

}
物件

物件可以是任何物體,抽象的事物也可以是一個物件

建立和使用物件

語法: 類名  物件名  = new  類名(引數列表)

物件行為和屬性訪問

在獲得一個類的物件實體後,在物件實體後加 .   就可以呼叫物件的屬性,如果想得到物件的行為,也可以採用同樣的方式

package ch02;

public class Car {
	public String color;
	public String brand;
	public int number;

	public Car(String color, String brand, int number) {
		this.color = color;
		this.brand = brand;
		this.number = number;
	}

	public void run() {
		System.out.println("running");
	}

	public static void main(String[] args) {
		Car car = new Car("white", "BMW", 52588);
		System.out.println("汽車的顏色是:" + car.color);
		System.out.println("汽車的牌子是:" + car.brand);
		System.out.println("汽車的牌照是:" + car.number);
		car.run();
//		System.out.println(this.number);
//		仔細看看main()方法就不難發現,
//		主函式是一個靜態(static)方法。
//		這裡就引入了另外一個知識點,
//		static修飾的方法內部是不允許出現非靜態成員變數或成員方法,
//		即static修飾的方法與該類相關,但是不跟該類的具體例項相關,
//		而this(即物件)是具體類的物件例項,因此這裡就會在編譯的時候報錯。
//		靜態方法不需要物件就能呼叫,類名.方法名 ,
//		所以如果靜態方法裡面出現this,就不知道this是哪個物件的引用,
//		因為有可能根本就不是物件呼叫方法的。

	}
}


比較物件

在程式中,使用“==”和equals方法來進行物件的比較。

使用“==”判斷的是二者是否為同一個物件,比較的是兩個物件的地址,即使兩個物件的內容相同,地址不同也會輸出false

使用equals比較的是兩者的值,即便不是同一個物件,只要值相同,就會輸出true

銷燬物件

垃圾回收機制(GC),使用方法:System.gc()

垃圾回收機制用來管理使用new關鍵字建立的物件所佔用的記憶體資源