文章目录
包装类
基本数据类型转化为包装类
i1.Tostring():显示表明可以调用方法
- 形参为字符串(如“false” “12.3”)都可以,但字符串实体本身仍然为对应的基本数据类型(布尔类型例外),若不是这样,则报异常(NumberFormatException)
- 对于特殊的布尔类型,字符串实体非true均为false(见truea)
- Boolean类型变量可取值null,而对于基本数据类型boolean则不行
- 注意所有包装类(引用数据类型)的默认值都为null(不是基本数据类型初始化值)
包装类转化为基本数据类型
总结:以上所讲都多余,因为自动装箱和拆箱
自动装箱和拆箱
变量类型转化方便太多
基本数据类型,包装类与String类的转换
- 常用方法为 i1 + “”
- 布尔类型转换为字符串,实质加了个“”
- 字符串不能强行转化为int类型,类比男人类不能强制转化为女人类
- 关注两类方法
- 从前往后转,从后一个调用方法
总结:包装类和对应基本数据类型的值范围不变,但默认初始化值改变
包装类练习
题目
vector添加的是对象
代码亮点:
-
添加对象
-
vector相当于可变长度的数组
代码亮点: -
向下转型
Bank项目练习
思想:从储蓄卡中取不足的差额
CheckingAccount
package banking5_2;
public class CheckAccount extends Account {
private SavingAccount protectedBy;//!!
public CheckAccount(double balance){
super(balance);
}
public CheckAccount(double balance,SavingAccount protectedBy){
super(balance);
this.protectedBy= protectedBy;//!!
}
public SavingAccount getProtectedBy() {
return protectedBy;
}
public void setProtectedBy(SavingAccount protectedBy) {
this.protectedBy = protectedBy;
}
public boolean withdraw(double amt){//!!!
if(balance >= amt){
balance -= amt;
//return true;
}else if(protectedBy != null && protectedBy.getBalance()>= amt - balance){
protectedBy.withdraw(amt - balance);
balance = 0;
//return true;
}else{
return false;
}
return true;
}
}
判断protectedBy是否为空的原因在于:
当调用一个参数构造器创建CheckingAccount时,则CheckingAccount为null,
,调用此对象方法时,会报空指针异常
SavingAcount
package banking5_2;
public class SavingAccount extends Account {
private double interestRate;
public SavingAccount(double balance,double interest_rate) {
super(balance);
this.interestRate = interest_rate;
}
public double getInterestRate() {
return interestRate;
}
public void setInterestRate(double interestRate) {
this.interestRate = interestRate;
}
}
Customer
package banking5_2;
public class Customer {
private String firstName;
private String lastName;
private SavingAccount savingAccount;//!!
private CheckAccount checkAccount;//!!
public Customer(String f,String l){
firstName = f;
lastName = l;
}
public SavingAccount getSaving() {
return savingAccount;
}
public void setSaving(SavingAccount savingAccount) {
this.savingAccount = savingAccount;
}
public CheckAccount getChecking() {
return checkAccount;
}
public void setChecking(CheckAccount checkAccount) {
this.checkAccount = checkAccount;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
TestBanking5_2
package TestBanking;
/*
* This class creates the program to test the banking classes.
* It creates a new Bank, sets the Customer (with an initial balance),
* and performs a series of transactions with the Account object.
*/
import banking5_2.*;
public class TestBanking5_2 {
public static void main(String[] args) {
Bank bank = new Bank();
Customer customer;
Account account;
// Create two customers and their accounts
bank.addCustomer("Jane", "Simms");
customer = bank.getCustomer(0);
//account = customer.getChecking();//!! 此时无checking账户
customer.setSaving(new SavingAccount(500.00, 0.05));
customer.setChecking(new CheckAccount(200.00, customer.getSaving()));
bank.addCustomer("Owen", "Bryant");
customer = bank.getCustomer(1);
customer.setChecking(new CheckAccount(200.00));
// Test the checking account of Jane Simms (with overdraft protection)
customer = bank.getCustomer(0);
account = customer.getChecking();//!!
System.out.println("Customer [" + customer.getLastName()
+ ", " + customer.getFirstName() + "]"
+ " has a checking balance of "
+ customer.getChecking().getBalance()
+ " and a savings balance of "
+ customer.getSaving().getBalance());
System.out.println("Checking Acct [Jane Simms] : withdraw 150.00 succeeds? "
+ account.withdraw(150.00));
System.out.println("Checking Acct [Jane Simms] : deposit 22.50 succeeds? "
+ account.deposit(22.50));
System.out.println("Checking Acct [Jane Simms] : withdraw 147.62 succeeds? "
+ account.withdraw(147.62));
System.out.println("Customer [" + customer.getLastName()
+ ", " + customer.getFirstName() + "]"
+ " has a checking balance of "
+ account.getBalance()
+ " and a savings balance of "
+ customer.getSaving().getBalance());
System.out.println();
// Test the checking account of Owen Bryant (without overdraft protection)
customer = bank.getCustomer(1);
account = customer.getChecking();
System.out.println("Customer [" + customer.getLastName()
+ ", " + customer.getFirstName() + "]"
+ " has a checking balance of "
+ account.getBalance());
System.out.println("Checking Acct [Owen Bryant] : withdraw 100.00 succeeds? "
+ account.withdraw(100.00));
System.out.println("Checking Acct [Owen Bryant] : deposit 25.00 succeeds? "
+ account.deposit(25.00));
System.out.println("Checking Acct [Owen Bryant] : withdraw 175.00 succeeds? "
+ account.withdraw(175.00));
System.out.println("Customer [" + customer.getLastName()
+ ", " + customer.getFirstName() + "]"
+ " has a checking balance of "
+ account.getBalance());
System.out.println();
}
}
总体思想:信用卡关联储蓄卡,当信用卡余额不足时,从储蓄卡中补差额
体现:
- 继承(子父类)
- 方法的重写(子类重写父类方法,如withdraw,实际调用子类方法)
- 多态(Account account,通过父类对象引用account进行虚拟方法调用)