天天看點

JAVA範例 八)面向對象---類、成員變量和方法

  

    類

  執行個體148 簡單的通訊錄類

package Chapter08.Class;
public class ClassDemo_01 {
	// 以下是該類的成員變量的聲明
	String name;		// 姓名
	String phoneNum;	// 聯系電話
	String email;		// E-mail
	String address;		// 家庭住址
	// 利用該類的構造方法為其成員變量指派
	public ClassDemo_01(String name, String phoneNum, String email,
			String address) {
		this.name = name;
		this.phoneNum = phoneNum;
		this.email = email;
		this.address = address;
	}
	// 定義該類的方法
	public void printMessage() {
		System.out.println("姓名:   " + name);
		System.out.println("聯系電話:  " + phoneNum);
		System.out.println("電子郵箱位址:" + email);
		System.out.println("目前居住位址:" + address);
	}
	public static void main(String[] args) {
		// 用關鍵字new建立該類的執行個體化對象,為成員變量指派
		ClassDemo_01 cd = new ClassDemo_01("張三", "13811111111",
				"[email protected]", "北京昌平區");
		// 調用方法
		cd.printMessage();
	}
}
           

  執行個體149 簡單的長度機關轉換類

package Chapter08.Class;
public class length {
	double num;			// 數值
	String units;			// 機關
	String targetUnits;		// 目标機關
	double result = 0;		// 最後換算的結果
	String str = "";
	// 英寸:inch 英尺:feet 米:meter 厘米:cm
	public static void main(String[] args) {
		System.out.println("長度機關之間的換數如下:");
		// 建立類對象
		length cd = new length(3, "米", "厘米");
		length cd1 = new length(8, "米", "英尺");
		length cd2 = new length(8945.56, "厘米", "米");
		length cd3 = new length(12.5, "英尺", "米");
		length cd4 = new length(12.2, "英寸", "厘米");
		length cd5 = new length(45.96, "厘米", "英寸");
		length cd6 = new length(14.5, "英尺", "英寸");
		length cd7 = new length(30.2, "英寸", "英尺");
		// 調用方法并列印出相應的結果
		System.out.println(cd.unitConversion());
		System.out.println(cd1.unitConversion());
		System.out.println(cd2.unitConversion());
		System.out.println(cd3.unitConversion());
		System.out.println(cd4.unitConversion());
		System.out.println(cd5.unitConversion());
		System.out.println(cd6.unitConversion());
		System.out.println(cd7.unitConversion());
	}
	// 利用構造方法為成員變量指派
	public length (double num, String units, String targetUnits) {
		this.num = num;
		this.targetUnits = targetUnits;
		this.units = units;
	}
	// 進行各長度機關之間的換算
	public String unitConversion() {
		if (targetUnits.equals("英寸") && units.equals("厘米")) {		// 厘米->英寸
			result = num * (1 / 2.54);
			str = num + "厘米 = " + result + "英寸";
		} else if (targetUnits.equals("厘米") && units.equals("英寸")) {	// 英寸->厘米
			result = num * 2.54;
			str = num + "英寸 = " + result + "厘米";
		} else if (targetUnits.equals("厘米") && units.equals("米")) {	// 米-> 厘米
			result = num * 100;
			str = num + "米 = " + result + "厘米";
		} else if (targetUnits.equals("米") && units.equals("厘米")) {	// 厘米-> 米
			result = num * (1 / 100.0);
			str = num + "厘米 = " + result + "米";
		} else if (targetUnits.equals("英尺") && units.equals("英寸")) {	// 英寸-> 英尺
			result = num * (1 / 12.0);
			str = num + "英寸 = " + result + "英尺";
		} else if (targetUnits.equals("英寸") && units.equals("英尺")) {	// 英尺-> 英寸
			result = num * 12;
			str = num + "英尺 = " + result + "英寸";
		} else if (targetUnits.equals("英尺") && units.equals("米")) {	// 米-> 英尺
			result = num * 3.2809;
			str = num + "米 = " + result + "英尺";
		} else if (targetUnits.equals("米") && units.equals("英尺")) {	// 英尺-> 米
			result = num * (1 / 3.2809);
			str = num + "英尺 = " + result + "米";
		}
		return str;
	}
}
           

  執行個體150 卡車和卡車司機之間的關系

package Chapter08.Class;
public class TruckDrivers {
	public String name; 			// 定義司機的名字
	// TruckDrivers 類構造函數
	public TruckDrivers(String name) {
		this.name = name;
	}
	// TruckDrivers 類對象的drive方法
	public void drive(int num) {
		Truck truck = new Truck(); // 生成Truck類的對象truck
		truck.speed(num); 		// 調用truck對象所固有的driveAt()方法
	}
	public static void main(String args[]) {
		// 生成TruckDrivers類的對象td
		TruckDrivers td = new TruckDrivers("張三 ");
		System.out.print(td.name);
		td.drive(80); 			// 調用td對象所固有的drive()方法
		System.out.println();
		// 生成TruckDrivers類的對象td1
		TruckDrivers td1 = new TruckDrivers("李四 ");
		System.out.print(td1.name);
		td1.drive(30); 			// 調用td1對象所固有的drive()方法
	}
}
class Truck {
	// Truck類的屬性即成員變量
	public int wheelNum;			// 車輪的數量
	public int weight;			// 車的重量
	public int driveSpeed;		// 行車的速度
	// Truck 類構造函數,設定初始值
	public Truck() {
		wheelNum = 4;
		weight = 1;
	}
	// 表示卡車行駛速度的方法
	public void speed(int speed) {
		if (speed >= 60) {
			System.out.println("超速行駛,容易造成交通事 故");
			// 如果車速太快,則自動以40邁的速度行駛
			driveSpeed = 40;
		} else {
			System.out.println("在安全行駛速度内行駛");
			driveSpeed = speed;
		}
	}
}
           

  執行個體151 雙色球

package Chapter08.Loans;

import java.util.StringTokenizer;

//所購買的彩票号碼
public class Loans {
	int buyer[] = new int[7];//建立一個int型數組,用于存放選好的7個雙色球号碼
	int level = 0;//标志中獎的等級
	int num = 0;//标志選好的單個号碼
	void getLoans() {//擷取選好的七個号碼
		System.out.println("請輸入您購買的7個彩票号碼,并以空格隔開:");
		StringTokenizer src = new StringTokenizer(ChooseNumbers.entry(), " ");//将字元串以空格的形工式分解開
		int i = 0;
		while (src.hasMoreTokens()) {
			num = Integer.parseInt(src.nextToken());
			if (i < 6) {//判斷前6個号碼是否符合紅球的選号範圍内
				if (num < 0 || num > 33) {
					System.out.println("紅球号碼錄入有誤,紅球号碼必須在1~33之間選取");
					break;
				}
			} else if (i == 6) {//判斷最後一個号碼是否符合藍球的選号範圍内
				if (num < 0 || num > 16) {
					System.out.println("藍球号碼錄入有誤,藍球号碼必須在1~16之間選取");
					break;
				}
			}
			buyer[i] = num;
			i++;
		}
	}
	void print() {
		for (int i = 0; i < 7; i++) {
			System.out.print(buyer[i] + " ");
		}
		System.out.println();
	}
}
           
package Chapter08.Loans;

import java.util.Vector;

//彩票投注站也就是售彩票的地方
public class Lottery {
	Vector v = new Vector();
	int winnum[] = new int[7];//定義一個int型數組用來存儲中獎的号碼
	void sellLoans()// 賣彩票給彩民
	{
		while (true) {
			Buyer cm = new Buyer();
			cm.buyLoans();
			v.add(cm);
			System.out.println("是否還有彩民需要購買?[0:退出]");
			int cmd = ChooseNumbers.getInt();
			if (cmd == 0)
				break;
		}
	}
	void showLoans()// 公布中獎号碼
	{
		System.out.println("公布本期的中獎号碼為:");
		for (int i = 0; i < winnum.length; i++) {
			winnum[i] = (int) (Math.random() * 35 + 1);
			for (int j = 0; j < i; j++) {
				if (winnum[i] == winnum[j])
					i--;
			}
			System.out.print(winnum[i] + " ");
		}
		System.out.println();
	}
	void totalInfo()// 統計中獎情況
	{
		for (int i = 0; i < v.size(); i++) {
			Buyer cm = (Buyer) v.get(i);
			totalBuyer(cm);
		}
	}
	void totalBuyer(Buyer cm)// 統計一個彩民的中獎情況
	{
		for (int i = 0; i < cm.v.size(); i++) {
			Loans loa = (Loans) cm.v.get(i);
			totalLoans(loa);
		}
	}
	void totalLoans(Loans loa)// 統計一批彩票的中獎情況
	{
		for (int i = 0; i < 7; i++)
			for (int j = 0; j < 7; j++)
				if (loa.buyer[i] == winnum[j]) {
					loa.level++;
					break;
				}
	}
	void prize()// 兌換獎品
	{
		for (int i = 0; i < v.size(); i++) {
			Buyer cm = (Buyer) v.get(i);
			winner(cm);
		}
	}
	void winner(Buyer cm)// 中獎的人
	{
		System.out.println("彩民[" + cm.order + "]:");
		for (int i = 0; i < cm.v.size(); i++) {
			Loans loa = (Loans) cm.v.get(i);
			prizeMoney(loa);
		}
	}
	void prizeMoney(Loans loa)// 中獎的金額
	{
		switch (loa.level) {
		case 6:
			System.out.println("恭喜您中了一等獎,中獎金額為500萬元!");
			break;
		case 5:
			System.out.println("恭喜您中了二等獎,單注獎金額為63萬元!");
			break;
		case 4:
			System.out.println("恭喜您中了三等獎,單注獎金額為3000元!");
			break;
		case 3:
			System.out.println("恭喜您中了四等獎,單注獎金額為200元!");
			break;
		case 2:
			System.out.println("恭喜您中了五等獎,單注獎金額為10元!");
			break;
		case 1:
			System.out.println("恭喜您中了六等獎,單注獎金額為5元!");
			break;
		default:
			System.out.println("謝謝您的參與,祝您下次好運!");
			break;
		}
	}
}
           
package Chapter08.Loans;

import java.io.BufferedReader;
import java.io.InputStreamReader;

//選取号碼
public class ChooseNumbers {
	public static String entry() {
		String str = "";
		try {
			BufferedReader buf = new BufferedReader(new InputStreamReader(
					System.in));// 建立BufferedReader緩存字元輸入流
			str = buf.readLine();// 從鍵盤上讀取一行資料
		} catch (Exception e) {
		}
		return str;
	}
	public static int getInt()// 從鍵盤上錄入一個整型資料
	{
		int temp = 0;
		while (true) {
			try {
				temp = Integer.parseInt(entry()); // 将字元串轉換成int型
				break;
			} catch (Exception e) {
				System.out.println("請輸入一個整數:" + e.getMessage());
			}
		}
		return temp;
	}
}
           
package Chapter08.Loans;
//測試類
public class TestCase {
	public static void main(String[] args) {
		Lottery lot = new Lottery();	// 建立一個Lottery類
		lot.sellLoans();			// 調用Lottery類的sellLoans方法,其主要作用是将彩票賣給購彩的人們
		lot.showLoans();		// 調用Lottery類的showLoans方法,其主要作用公布該期的中獎号碼
		lot.totalInfo();			// 調用Lottery類的totalInfo方法,其主要作用是統計中獎的情況
		lot.prize();				// 調用Lottery類的prize方法,其主要作用是中獎人到彩票投注站去兌換獎金
	}
}
           

  8.2 成員變量和方法

  執行個體152 使用類作為成員變量

package Chapter08.Class;
public class ClassDemo_04 {
	public static void main(String[] args) {
		new Friends();// 建立Friends類的對象
	}
}
class Friends {
	// 定義類變量
	ClassDemo_01 girl;
	ClassDemo_01 boy;
	public Friends() {// 利用構造方法為類變量指派
		String gname = "Anni";
		System.out.println("My Girlfriend's name is : " + gname);
		String gphoneNum = "13545681233";
		System.out.println("My Girlfriend's name is : " + gphoneNum);
		String gemail = "[email protected]";
		System.out.println("My Girlfriend's name is : " + gemail);
		String gaddress = "英國倫墩";
		System.out.println("My Girlfriend's name is : " + gaddress);
		System.out.println("建立并執行個體化ClassDemo_01對象girl");
		girl = new ClassDemo_01(gname, gphoneNum, gemail, gaddress);// 建立并執行個體化類變量
		girl.printMessage();// 調用該類變量的方法
		System.out.println();
		String bname = "Tom";
		System.out.println("My Boyfriend's name is : " + bname);
		String bphoneNum = "13255638897";
		System.out.println("My Boyfriend's name is : " + bphoneNum);
		String bemail = "[email protected]";
		System.out.println("My Boyfriend's name is : " + bemail);
		String baddress = "美國洛杉矶";
		System.out.println("My Boyfriend's name is : " + baddress);
		System.out.println("建立并執行個體化ClassDemo_01對象boy");// 建立并執行個體化類變量
		boy = new ClassDemo_01(bname, bphoneNum, bemail, baddress);// 調用該類變量的方法
		boy.printMessage();
	}
}
           

  執行個體153 構造方法

package Chapter08.Class;
public class ClassDemo_05 {
	public static void main(String[] args) {
		System.out.println("使用第一個構造方法建立的人類的資訊如下:");
		Person p = new Person();		// 使用無參的構造方法建立Person對象
		p.info();					// 調用Person類的info方法
		System.out.println("使用第二個構造方法建立的人類的資訊如下:");
		Person p1 = new Person(p);	// 使用将對象作為參數的構造方法建立Person對象
		p1.info();					// 調用Person類的info方法
		System.out.println("使用第三個構造方法建立的人類的資訊如下:");
		Person p2 = new Person("張小紅", '女', 13);// 使用指定值為參數的構造方法建立Person對象
		p2.info();					// 調用Person類的info方法
	}
}
class Person {
	// 聲明人類的三個基本屬性
	public String name;	// 姓名
	public char sex;		// 性别
	public int age;		// 年齡
	// 設定預設值
	Person() {
		name = "張三";
		sex = '男';
		age = 35;
	}
	// 對象作為構造函數的參數
	Person(Person p) {
		name = p.name;
		sex = p.sex;
		age = p.age;
	}
	// 指定值初始化對象
	Person(String name, char sex, int age) {
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	// 輸出person的基本資訊
	public void info() {
		System.out.println("姓名:" + name + " 性别:" + sex + " 年齡:" + age);
	}
}
           

  執行個體154 使用靜态成員變量計算記憶體中執行個體化的對象數目

package Chapter08.Class;

import java.util.Random;

public class ClassDemo_03 {
	public static void main(String[] args) {
		System.out.println("本程式的運作結果如下:");
		String str = ClassDemo_03.getMessage();		// 調用getMessage方法
		ObjectNum on = null;					// 聲明ObjectNum對象
		while (!str.equals("X")) {
			if (str.equals("C")) {					// 如果str等于C則建立ObjectNum對象
				on = new ObjectNum();
			} else if (str.equals("D")) {				// 如果str等于D則消毀ObjectNum對象
				System.gc();
			}
			str = ClassDemo_03.getMessage();
		}
	}
	public static String getMessage() {
		Random rd = new Random();				// 建立Random對象,用于生成随機數
		int num = (65 + rd.nextInt(25));				// 生成随機數的範圍為65~90之間
		char ch = (char) num;					// 将int型資料轉換成char型
		return ch + "";
	}
}
class ObjectNum {
	public static int count = 0;
	public ObjectNum() {				// 構造方法
		count++;
		System.out.println("建立對象:object" + count);
	}
	public void finalize() {			// finalize方法專門用于垃圾回收
		System.out.println("消毀對象:object" + count);
		count--;
	}
}
           

  執行個體155 實作加減乘除的方法

public class Excer{
	public static void main(String args[])
	{
		Excer ex=new Excer();
		int x=0;
		int y=0;
		ex.math(x,y);
	}
	void math(int x,int y){
		MyMath mm = new MyMath();
		System.out.println("x="+x+" ,y="+y);
		System.out.println("x+y="+mm.plus(x,y));
		System.out.println("x-y="+mm.minus(x,y));
		System.out.println("x*y="+mm.multi(x,y));
		System.out.println("x/y="+mm.div(x,y));
				}
	}
class MyMath
{
	int plus(int a,int b)
	{
		return(a+b);
	}			
	int minus(int a,int b)
	{
		return(a-b);
	}
	int multi(int a,int b)
	{
		return(a*b);
	}
	float div(int a,int b)
	{
		return ((float)a/b);
	}
}