ToB企服应用市场:ToB评测及商务社交产业平台

标题: Java面向对象中“匿名对象”的使用 [打印本页]

作者: 灌篮少年    时间: 2023-5-21 15:30
标题: Java面向对象中“匿名对象”的使用
1.0 匿名对象的基本知识

缺点:
一个匿名对象只能使用一次,造成内存空间的浪费。
优点:
由于匿名对象不需要在实例化后赋给变量,因此当大量需要使用匿名对象时,可以节省保存变量所需的栈空间
JVM的垃圾回收会根据对象是否可达来判断是否为垃圾,如果不可达,则在下一次的垃圾回收中进行回收。而匿名对象创建后只能使用一次,当使用结束后它就是垃圾了,这样便于JVM快速回收,节省堆内存空间。
2.0 通过实验代码进行匿名对象的学习

2.1

写一个名为Account的类模拟账户。该类的属性和方法如下图所示。
该类包括的属性:账号id,余额balance,年利率annualInterestRate;
包含的方法:访问器方法(getter和setter方法),取款方法withdraw(),存款方法deposit()。

2.2

创建Customer类。

a. 声明三个私有对象属性:firstName、lastName和account。
b. 声明一个公有构造器,这个构造器带有两个代表对象属性的参数(f和l)
c. 声明两个公有存取器来访问该对象属性,方法getFirstName和getLastName返回相应的属性。
d. 声明setAccount 方法来对account属性赋值。
e. 声明getAccount 方法以获取account属性。
2.3

写一个测试程序。
(1)
创建一个Customer ,名字叫 Jane Smith, 他有一个账号为1000,余额为2000元,年利率为 1.23% 的账户。
(2)
对Jane Smith操作。
存入 100 元,再取出960元。再取出2000元。
打印出Jane Smith 的基本信息

3.0 代码实现

3.1 Account.java
  1. package classTest.Account;
  2. // 虚拟账户练习
  3. public class Account {
  4.     private int id; //账号
  5.     private double balance; //余额
  6.     private double Rate; //年利率
  7.     public Account(int i, double b, double a){
  8.         id = i;
  9.         balance = b;
  10.         Rate = a;
  11.     }
  12.     public int getId() {
  13.         return id;
  14.     }
  15.     public double getBalance() {
  16.         return balance;
  17.     }
  18.     public double getRate() {
  19.         return Rate;
  20.     }
  21.     public void setId(int id) {
  22.         this.id = id;
  23.     }
  24.     public void setBalance(double balance) {
  25.         this.balance = balance;
  26.     }
  27.     public void setRate(double rate) {
  28.         Rate = rate;
  29.     }
  30.     public void withdraw(double amount){ //取钱
  31.         if(amount <= 0){
  32.             System.out.println("输入金额不合法");
  33.         }
  34.         else if(amount > balance){
  35.             System.out.println("余额不足");
  36.         }
  37.         else {
  38.             System.out.println("取钱成功: " + amount);
  39.             balance -= amount;
  40.         }
  41.     }
  42.     public void deposit(double amount){ //存钱
  43.         if(amount > 0){
  44.             balance += amount;
  45.             System.out.println("成功存入:" + amount);
  46.         }
  47.         else{
  48.             System.out.println("数据不合法");
  49.         }
  50.     }
  51. }
复制代码
3.2 Customer.java
  1. package classTest.Account;
  2. public class Customer {
  3.     private String firstName;
  4.     private String lastName;
  5.     private Account account;
  6.     public Customer(String f, String l){
  7.         firstName = f;
  8.         lastName = l;
  9.     }
  10.     public String getFirstName() {
  11.         return firstName;
  12.     }
  13.     public String getLastName() {
  14.         return lastName;
  15.     }
  16.     public Account getAccount() {
  17.         return account;
  18.     }
  19.     public void setFirstName(String firstName) {
  20.         this.firstName = firstName;
  21.     }
  22.     public void setLastName(String lastName) {
  23.         this.lastName = lastName;
  24.     }
  25.     public void setAccount(Account account) {
  26.         this.account = account;
  27.     }
  28. }
复制代码
3.3 测试程序CustomerTest.java
  1. package classTest.Account;
  2. import java.util.concurrent.CountDownLatch;
  3. public class AccountTest {
  4.     public static void main(String[] args) {
  5.         // Customer实例
  6.         Customer cus = new Customer("Jane", "Smith");
  7.         // Account实例
  8.         Account ac = new Account(1000, 2000, 0.0123);
  9.         // 客户和账户取得联系
  10.         cus.setAccount(ac);
  11. //        cus.setAccount(new Account(1000, 2000, 0.0123)); // 也可以直接这样写 -> 匿名对象
  12. //        ac.deposit(100);
  13. //        ac.withdraw(960);
  14. //        ac.withdraw(2000);
  15.         cus.getAccount().deposit(100);
  16.         cus.getAccount().withdraw(960);
  17.         cus.getAccount().withdraw(2000);
  18.         System.out.println(cus.getFirstName() + " " + cus.getLastName() + " has a account id: " + ac.getId() + ", annualInterestRate is " + ac.getRate() + ", balance is " + ac.getBalance());
  19.     }
  20. }
复制代码
4.0总结

可以看出可以直接使用
  1. cus.setAccount(new Account(1000, 2000, 0.0123));
复制代码
来进行匿名对象的定义

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4