中南林业科技大学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());
}


相关文章
|
8天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
|
29天前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
26天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
44 17
|
18天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
22天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
75 4
|
23天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
43 2
|
27天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
1月前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
33 3
|
12天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
3天前
|
缓存 Java 开发者
Java多线程编程的陷阱与最佳实践####
本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####