首页 > 编程语言 >Java面向对象中“匿名对象”的使用

Java面向对象中“匿名对象”的使用

时间:2023-05-21 15:33:26浏览次数:34  
标签:Account Java 对象 double 面向对象 匿名 balance public

1.0 匿名对象的基本知识

  • 匿名对象
    顾名思义,匿名对象指的就是没有名字的对象,在使用中理解为实例化一个类对象,但是并不把它赋给一个对应的类变量,而是直接使用。在理解匿名对象前,我们先创建一个类便于后面的使用。
  • 匿名对象具有以下特征:
    语法上:只创建对象,但不用变量来接收,例如:假设现在Student类如上所示,通常情况我们在使用这个类时需要先实例化类对象,然后调用类的属性和方法
  • 匿名对象的使用:
    匿名对象本质上仍然是一个对象,所以它具备对象的所有功能
    每次创建一个匿名对象都是一起全新的对象,即每次创建的匿名对象都是不同的对象,它们在堆内存中具有不同的地址。而且一个匿名对象只能使用一次。

缺点:
一个匿名对象只能使用一次,造成内存空间的浪费。

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

2.0 通过实验代码进行匿名对象的学习

2.1

写一个名为Account的类模拟账户。该类的属性和方法如下图所示。

该类包括的属性:账号id,余额balance,年利率annualInterestRate;

包含的方法:访问器方法(getter和setter方法),取款方法withdraw(),存款方法deposit()。

image

2.2

创建Customer类。
image
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 的基本信息
image

3.0 代码实现

3.1 Account.java

package classTest.Account;

// 虚拟账户练习
public class Account {
    private int id; //账号
    private double balance; //余额
    private double Rate; //年利率

    public Account(int i, double b, double a){
        id = i;
        balance = b;
        Rate = a;
    }

    public int getId() {
        return id;
    }

    public double getBalance() {
        return balance;
    }

    public double getRate() {
        return Rate;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public void setRate(double rate) {
        Rate = rate;
    }

    public void withdraw(double amount){ //取钱
        if(amount <= 0){
            System.out.println("输入金额不合法");
        }
        else if(amount > balance){
            System.out.println("余额不足");
        }
        else {
            System.out.println("取钱成功: " + amount);
            balance -= amount;
        }
    }

    public void deposit(double amount){ //存钱
        if(amount > 0){
            balance += amount;
            System.out.println("成功存入:" + amount);
        }
        else{
            System.out.println("数据不合法");
        }

    }
}

3.2 Customer.java

package classTest.Account;

public class Customer {
    private String firstName;
    private String lastName;
    private Account account;

    public Customer(String f, String l){
        firstName = f;
        lastName = l;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public Account getAccount() {
        return account;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setAccount(Account account) {
        this.account = account;
    }
}

3.3 测试程序CustomerTest.java

package classTest.Account;

import java.util.concurrent.CountDownLatch;

public class AccountTest {
    public static void main(String[] args) {
        // Customer实例
        Customer cus = new Customer("Jane", "Smith");
        // Account实例
        Account ac = new Account(1000, 2000, 0.0123);

        // 客户和账户取得联系
        cus.setAccount(ac);

//        cus.setAccount(new Account(1000, 2000, 0.0123)); // 也可以直接这样写 -> 匿名对象

//        ac.deposit(100);
//        ac.withdraw(960);
//        ac.withdraw(2000);

        cus.getAccount().deposit(100);
        cus.getAccount().withdraw(960);
        cus.getAccount().withdraw(2000);

        System.out.println(cus.getFirstName() + " " + cus.getLastName() + " has a account id: " + ac.getId() + ", annualInterestRate is " + ac.getRate() + ", balance is " + ac.getBalance());

    }
}

4.0总结

可以看出可以直接使用

cus.setAccount(new Account(1000, 2000, 0.0123));

来进行匿名对象的定义

  • 1.匿名对象只能使用一次
  • 2.匿名对象往往作为形参传递给方法的实参

标签:Account,Java,对象,double,面向对象,匿名,balance,public
From: https://www.cnblogs.com/Noiimplant/p/17418668.html

相关文章

  • java list.stream 多条件去重(分组)
    List<EmEventConfigPointExcelDto>listNew=list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->newTreeSet<>(Comparator.comparing((o)-......
  • java基于springboot+vue的土特产在线销售平台、特产在线销售商城,附源码+数据库+lw文档
    1、项目介绍考虑到实际生活中在藏区特产销售管理方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。(1)管理员功能需求管理员登陆后,主要模块包括首页、个人中心、用户管理、特产信息管理、特产分类管理、特产分类管理、特产评分管理、系统管理、订单......
  • JavaScript学习笔记:模块
    前言在js编程中,模块指的是按照一定格式将代码以功能拆分后作为独立文件存在的一个实体。早期的JS并没有规定模块应该如何设计,核心语言也没有针对模块提供相关支持。早期的代码使用IIFE来实现一个模块,它是通过向全局对象添加属性来实现与其他模块来交互的。(function(){v......
  • Java 网络编程 —— 异步通道和异步运算结果
    从JDK7开始,引入了表示异步通道的AsynchronousSockerChannel类和AsynchronousServerSocketChannel类,这两个类的作用与SocketChannel类和ServerSockelChannel相似,区别在于异步通道的一些方法总是采用非阻塞模式,并且它们的非阻塞方法会立即返回一个Future对象,用来存放方......
  • java数据类型
    题目: 题解:float数据值必须加f ,否则就得强转   同理Double数据也是这样 要么强转 要么数值加小写字母d,指明这是一个双精度浮点值   而\u开头的unicode字符串,是可以直接赋值给char的 String会自动装箱成包装类,就可以向上转型成Object了 ......
  • Java的CAS操作
    介绍CAS技术是为了解决问题而生的,通过CAS我们可以以无锁的方式,保证对共享数据进行“读取-修改-写回”操作序列的正确性。CAS是乐观锁设计思想的实现。CAS的思想是:在“读取-修改-写回”操作序列中,先读取并修改数据,写回数据前先判断读取数据后的这段时间内数据是否......
  • Java二叉树详解
    当你看到一棵茂盛的大树时,你是否曾想过这样的问题:它是如何生长起来的?落叶归根,数百年来,不断地生长与死亡。其实,每个程序员也可以成为一棵大树的缔造者。而Java的二叉树,就像互联网上的知识一样,通过它的枝干和叶子,能够让我们更加高效地搜索、插入和删除节点。虽然二叉树算法并不简单......
  • Java 拦截器和过滤器
    1.java后端基于过滤器或拦截器处理跨域请求 Java中的过滤器和拦截器的区别Java中的拦截器和过滤器有什么区别 springmvc执行流程? Action就是用于处理一次用户请求的对象。什么是Servlet容器? Servlet 容器只不过是一个Java程序。 ......
  • JavaScript基础知识笔记
    JavaScript是属于Web的编程语言,对网页行为进行编程。参考教程:https://www.w3school.com.cn/js/index.asphttps://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Language_overviewJavaScript能够改变HTML内容document.getElementById("demo").innerHTML="Hell......
  • java-求余数计算
    publicclassTest521929{  publicstaticvoidmain(String[]args){    System.out.println(100%3); //1     //算术表达式2个参数为整数,返回结果也是整数    System.out.println(100%3.0); //1.0    System.out.println(100.......