文章目录
枚举类型
当需要一个有限集合,而有限集合中的数据为特定的值时,可以使用枚举类型。枚举类型的定义使用关键字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);
}