实验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());
}