Java类与对象的基本概念(二)

文章目录


枚举类型

当需要一个有限集合,而有限集合中的数据为特定的值时,可以使用枚举类型。枚举类型的定义使用关键字enum,其语法格式如下:

[public] enum 枚举类型名称 [implements接口名称列表]
{
	枚举值;
	变量成员声明及初始化;
	方法声明及方法体;
}
enum Score{
    EXCELLENT,
    QUAILFIED,
    FAILED;
};
public class ScoreTester {
    public static void main(String [] args){
        giveScore(Score.EXCELLENT);
    }
    public static void giveScore(Score s){
        switch (s){
            case EXCELLENT:
                System.out.println("EXCELLENT");
                break;
            case QUAILFIED:
                System.out.println("QUAILFIED");
                break;
            case FAILED:
                System.out.println("FAILED");
                break;
        }
    }
}

枚举类型具有如下特点:
1)枚举类型是类,而不是简单的整数类型,枚举值是类的对象;
2)枚举类型继承过java.lang.Enum类;
3)枚举类型没有public的构造函数;
4)枚举值是public、static、final的。

枚举类型有很多默认方法。
枚举类型相当于定义一个类,因此可以给该类定义数据和方法。
此外,枚举类型可以定义构造函数,不过为了防止程序员自行定义枚举类型的对象,枚举类型的构造函数只能是private的,并且默认是private的。

应用举例

首先声明银行账号类,包括状态、构造方法、get方法及set方法。

enum Grade{//定义枚举类型,表示账户的等级。
    VIP,
    General;
}
public class BankAccount {
    private String ownerName;
    private int accountNumber;
    private float balance;
    Grade grade;
    public BankAccount(){
        this("",0,0,Grade.General);
    }
    public BankAccount(String initName,int initAccNum,float initBal,Grade g){
        ownerName=initName;
        accountNumber=initAccNum;
        balance=initBal;
        grade=g;
    }
    public String getOwnerName(){
        return ownerName;
    }
    public int getAccountNumber(){
        return accountNumber;
    }
    public float getBalance(){
        return balance;
    }
    public Grade getGrade(){
        return grade;
    }
    public void setOwnerName(String newName){
        ownerName=newName;
    }

    public void setAccountNumber(int newNum) {
        accountNumber = newNum;
    }
    public void setBalance(float newBalance){
        balance=newBalance;
    }
    public void setGrade(Grade g){
        grade=g;
    }
}

声明测试类:

public class AccountTester {
    public static void main(String args[]){
        BankAccount anAccount;
        anAccount=new BankAccount("zhangsan",10000,0,Grade.General);
        anAccount.setBalance(anAccount.getBalance()+100);
        System.out.println("here is the account:"+anAccount);
        System.out.println("account name:"+anAccount.getOwnerName());
        System.out.println("account number"+anAccount.getAccountNumber());
        System.out.println("Balance: $"+anAccount.getBalance());
        System.out.println("Grade:"+anAccount.grade);
    }
}
输出结果:
here is the account:BankAccount@75b84c92
account name:zhangsan
account number10000
Balance: $100.0
Grade:General

声明toString()方法

当需要将一个独享输出到显示器时,通常需要调用它的toString()方法,将对象的内容转为字符串。Java的所有类都有一个默认的toString()方法,如果需要特殊的转换功能,则需要自己重写toString()方法。

系统默认的toString()的方法体如下;

getClass().getName()+'@'+Integer.toHexString(hashCode())

在实际应用中,往往需要此方法能够返回更有意义的信息。这就需要我们重写自己的toString()方法,其主要功能是用一个字符串来描述一个对象的主要信息。
在BankAccount中加入toString()方法。

public String toString(){
        return (grade+"account #"+accountNumber+"with balance $"+balance);
    }
System.out.println("here is the account:"+anAccount.toString());

然后重新编译运行测试类;

输出:
here is the account:Generalaccount #10000with balance $100.0
account name:zhangsan
account number10000
Balance: $100.0
Grade:General

在声明toString()方法时,需要注意以下几点:
1)toString()方法必须被声明为public;
2)返回类型为String;
3)方法的名称必须为toString,且没有参数;
4)在方法体中不要使用输出方法System.out.println()。

格式化字符串输出

在toString()方法中使用DecimalFormat类的实例方法format对数据进行格式化。DecimalFormat类在java.text方法中。

public String toString(){
        return (grade+"account #"+accountNumber+"with balance"+new java.text.DecimalFormat("$0.00f").format(balance));
    }

另外一种格式化输出字符串的方法,是使用printf。
输出两位小数并加上$符号。

System.out.printf("$%.2f",anAccount.getBalance());

声明类方法生成特殊的实例

	public static BankAccount example(){
        BankAccount ba=new BankAccount();
        ba.setOwnerName("zhangwei");
        ba.setAccountNumber(5000);
        return ba;
    }
    public static BankAccount example1(){
        BankAccount ba=new BankAccount();
        ba.setOwnerName("wanger");
        ba.setAccountNumber(2000);
        ba.deposit(1000);
        return ba;
    }
    public static BankAccount example2(){
        BankAccount ba=new BankAccount();
        ba.setOwnerName("mazi");
        ba.setAccountNumber(3000);
        ba.deposit(2000);
        return ba;
    }

声明存钱取钱的方法;

	public float deposit(float anAmount){
        balance+=anAmount;
        return (balance);
    }
    public float withdraw(float anAmount){
        balance-=anAmount;
        return (anAmount);
    }
上一篇:sql中join时,where和on的区别


下一篇:C++学习笔记 3