学生缴费案例

来源:互联网 发布:java svn插件 编辑:程序博客网 时间:2024/04/29 20:23

1.需求:

学生类(Student)有两个字段,name(名字)和isFee(是否缴费状态),有一个方法:交学费(fees)。每一个学生都是通过Student类new出来的对象。现在创建一个数组存放多个学生对象,再判断数组中的学生是否已经缴费,如果没有则使用学生的缴费状态

2.代码

package com.JAVABASIS6;
//描述学生状态及行为的类Student
class Student{
String name; //学生姓名
boolean isFee; //学生缴费状态,默认是false,未缴费状态,因为boolean在成员变量,默认初始值为false
void fees(){ //定义一个fees方法,当没有缴学费时使用该方法
isFee = true;
}
}
public class StudentDemo {
public static void main(String[] args){
//创建学生对象s1
Student s1 = new Student();
s1.name=”李一”;
s1.isFee=true;
//创建学生对象s2
Student s2 = new Student();
s2.name=”李二”;
s2.isFee=false;
//创建学生对象s3
Student s3 = new Student();
s3.name=”李三”;
s3.isFee=true;
//创建学生对象s4
Student s4= new Student();
s4.name=”李四”;
s4.isFee=false;
//创建一个存储所有的学生对象的数组
Student[] arr = new Student[]{s1,s2,s3,s4}; //元素的数组类型 变量 = new 元素的数据类型[]{元素1,元素2,元素3};
//使用循环迭代数组的每一个元素
for(Student ele :arr){ //数组数据类型 变量名 : 数组名 ;
System.out.println(ele); //打印出来的4个com.JAVABASIS6.Student@2e739136这样类型的数,说明数组的每一个元素就是一个对象
System.out.println(ele.isFee); //ele代表arr数组中的每一个对象,所以ele.isFee才会输出true,false等结果
//
if(!ele.isFee){ //要使用if里面的方法体,那么必须保证符合是true的才会执行里面的条件,根据条件,只有没有交学费的才需要执行方法,所以使用!ele.isFee
ele.fees();
System.out.println(ele.isFee+”输出的是没有交学费需要执行的”); //输出为true输出的是没有交学费需要执行的
}
}
}
}

3.内存分析

1.关于创建对象的内存分析,如s1,使用了new创建了s1对象,那么在堆中会占用一块空间,定为地址值为0x1234,里面有字段;然后堆会把地址值赋给s1,所以当对象s1需要使用该地址值的字段时,就可以引用。
2.关于数组arr的内存分析,使用了new创建了数组arr,占用了一块空间,地址值为0x8888,然后把地址值赋给栈的arr,然后数组arr引用该地址值
3.关于数组arr包含多个对象的内存分析,使用arr创建的地址0x8888的空间中分出4块空间分别存放4个对象的引用地址值,当使用数组时,先找到自己的引用地址值,再找到某个对象的引用地址值,从而使用相对应的对象的字段或方法。数组存的是引用的地址值

这里写图片描述

原创粉丝点击