中南林业科技大学Java实验报告五:类与对象

简介: 中南林业科技大学Java实验报告五:类与对象

实验5:类与对象

5.1 实验目的

  1. 学习类的一般结构;
  2. 掌握类的成员变量和成员方法的声明;
  3. 掌握Java程序对象的创建和利用对象调用成员变量和成员方法;
  4. 学习方法调用时参数的传递

5.2 实验内容

5.2.1 编写一个Java程序,在程序中定义一个Bamboo(竹子)类,并且完善Bamboo类的结构;

【前提引入】

  • 成员属性访问权限应当设置为私有,对外提供公共的getter与setter方法,这也是封装特性的重要体现。其实方法调用是有成本的,但实际上,java编译器一般会对这几个方法的调用转换为直接访问实例变量,而避免方法调用的开销。很多情况下,通过方法调用可以封装内部数据,避免错误操作。
  • Math.PI :Math类的静态变量PI,即表示Π的值
  • 类默认无参构造器,如果声明了构造器,那么原本默认的无参构造器将失效。因此如果还想有无参构造器,我们需要手动声明

【运行流程】

public class Bamboo {
    /**
     * 竹子名字
     */
    private String name;
    /**
     * 竹子年龄
     */
    private int age;
    /**
     * 高度
     */
    private float height;
    /**
     * 直径
     */
    private double diameter;
    /**
     * 全参构造器
     *
     * @param name     名字
     * @param age      年龄
     * @param height   高度
     * @param diameter 直径
     */
    public Bamboo(String name, int age, float height, double diameter) {
        this.name = name;
        this.age = age;
        this.height = height;
        this.diameter = diameter;
    }
    /**
     * 无参构造器
     */
    public Bamboo() {
    }
    public double volume() {
        return Math.PI * diameter / 2 * diameter / 2 * height;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public float getHeight() {
        return height;
    }
    public void setHeight(float height) {
        this.height = height;
    }
    public double getDiameter() {
        return diameter;
    }
    public void setDiameter(double diameter) {
        this.diameter = diameter;
    }
}

5.2.2 编写一个Java程序,在程序中创建Bamboo类的两个实例,并访问他们的属性和方法。

【前提引入】

  • 类的基本结构
  1. 成员变量
  2. 成员方法
  3. 构造器
  4. 内部类
  5. 代码块
  • 对象创建流程分析(初级)
  1. 方法区中加载类信息(只会加载一次)
  2. 在堆中分配空间(地址)
  3. 完成对象初始化
  1. 默认初始化
  2. 显示初始化
  3. 构造器初始化
  1. 将对象在堆中的地址返回给栈中的对象引入

【运行流程】

public static void main(String[] args) {
    //创建对象引入 bam1 ,指向堆中的 Bamboo 实例对象
    Bamboo bam1 = new Bamboo();
    //设置姓名
    bam1.setName("楠竹");
    //设置年龄
    bam1.setAge(2);
    //设置高度
    bam1.setHeight(6);
    //设置直径
    bam1.setDiameter(1);
    System.out.println("名称:"+bam1.getName()+" 生长时长:"+bam1.getAge());
    System.out.println("高度:"+bam1.getHeight()+" 直径:"+bam1.getDiameter());
    System.out.println("体积:"+bam1.volume());
}

5.2.3 编写一个Java程序,在(1)的基础上为Bamboo类增加一个方法,该方法能够接收参数并对Bamboo类的各个属性进行赋值。

【前提引入】

  • 可以为各个变量赋值的优选方法即为全参构造器,但这里要求我们设置一个setBamboo方法,代码差不多

【运行流程】

💬 这段代码添加到 Bamboo 类中。

/**
     * 全参赋值
     *
     * @param name     名字
     * @param age      年龄
     * @param height   高度
     * @param diameter 直径
     */
    public void setBamboo(String name, int age, float height, double diameter) {
        this.name = name;
        this.age = age;
        this.height = height;
        this.diameter = diameter;
    }

public static void main(String[] args) {
    Bamboo bam2 = new Bamboo();
    bam2.setBamboo("毛竹", 3, 5, 0.2);
    System.out.println("名称:" + bam2.getName() + " 生长时长:" + bam2.getAge());
    System.out.println("高度:" + bam2.getHeight() + " 直径:" + bam2.getDiameter());
    System.out.println("体积:" + bam2.volume());
}


相关文章
|
6天前
|
Java 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
27 1
|
4天前
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
26 7
|
2天前
|
安全 Java 容器
Java一分钟之-并发编程:线程安全的集合类
【5月更文挑战第19天】Java提供线程安全集合类以解决并发环境中的数据一致性问题。例如,Vector是线程安全但效率低;可以使用Collections.synchronizedXxx将ArrayList或HashMap同步;ConcurrentHashMap是高效线程安全的映射;CopyOnWriteArrayList和CopyOnWriteArraySet适合读多写少场景;LinkedBlockingQueue是生产者-消费者模型中的线程安全队列。注意,过度同步可能影响性能,应尽量减少共享状态并利用并发工具类。
17 2
|
4天前
|
设计模式 算法 Java
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
|
5天前
|
消息中间件 Java RocketMQ
MQ产品使用合集之在同一个 Java 进程内建立三个消费对象并设置三个消费者组订阅同一主题和标签的情况下,是否会发生其中一个消费者组无法接收到消息的现象
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
11 1
|
6天前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
11 2
|
6天前
|
安全 Java 开发者
Java一分钟之-Optional类:优雅处理null值
【5月更文挑战第13天】Java 8的`Optional`类旨在减少`NullPointerException`,提供优雅的空值处理。本文介绍`Optional`的基本用法、创建、常见操作,以及如何避免错误,如直接调用`get()`、误用`if (optional != null)`检查和过度使用`Optional`。正确使用`Optional`能提高代码可读性和健壮性,建议结合实际场景灵活应用。
22 3
|
6天前
|
存储 Java 索引
【Java开发指南 | 第十六篇】Java数组及Arrays类
【Java开发指南 | 第十六篇】Java数组及Arrays类
10 3
|
4天前
|
Java 测试技术
Java多线程的一些基本例子
【5月更文挑战第17天】Java多线程允许并发执行任务。示例1展示创建并启动两个`MyThread`对象,各自独立打印"Hello World"。示例2的`CounterExample`中,两个线程(IncrementThread和DecrementThread)同步地增加和减少共享计数器,确保最终计数为零。这些例子展示了Java线程的基本用法,包括线程同步,还有如Executor框架和线程池等更复杂的用例。
11 0
|
5天前
|
缓存 安全 Java
7张图带你轻松理解Java 线程安全,java缓存机制面试
7张图带你轻松理解Java 线程安全,java缓存机制面试