類
執行個體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);
}
}