实验5:类与对象
5.1 实验目的
- 学习类的一般结构;
- 掌握类的成员变量和成员方法的声明;
- 掌握Java程序对象的创建和利用对象调用成员变量和成员方法;
- 学习方法调用时参数的传递
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类的两个实例,并访问他们的属性和方法。
【前提引入】
- 类的基本结构
- 成员变量
- 成员方法
- 构造器
- 内部类
- 代码块
- 对象创建流程分析(初级)
- 方法区中加载类信息(只会加载一次)
- 在堆中分配空间(地址)
- 完成对象初始化
- 默认初始化
- 显示初始化
- 构造器初始化
- 将对象在堆中的地址返回给栈中的对象引入
【运行流程】
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()); }