类
实例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);
}
}