一、对象数组
对象数组,是指包含了一组相关的对象,即可以存放多种不同的数据类型,然后我们通过对象来调用我们所存放的数据。但是在对象数组的使用中:数组一定要先开辟空间,但是因为其是引用数据类型,所以数组里面的每一个对象都是null值,则在使用的时候数组中的每一个对象必须分别进行实例化操作,否则会报空指针异常*。
二、认识对象数组
//对象数组:数组中每一个元素为一个对象。
//为对象数组分配内存空间:
Fruits [] fruits = new fruits[5];//创建对象数组
for (int i = 0; i < fruits.length; i++) { //对象数组动态初始化
fruits [i] = new Fruits(); //对象实例化
}
/*对象数组的定义需要它需要为每一个元素进行实例化
没有实例化,会报“空指针异常”的错误。对象和数不一样,对象数组中为对象,如果没有实例化,代表没有对象,也就是说用不存在的东西操作,本身这个操作也是不存在的。
*/
//如果没有初始化,会发生如下异常:
*Exception in thread "main" java.lang.NullPointerException: Cannot assign field "num" because "fruits[i]" is null*
三、使用实例
public class FruitsTest {
public static void main(String[] args) {
Fruits[] fruits = new Fruits[5]; //创建对象数组
for (int i = 0; i < fruits.length; i++) { //对象数组动态初始化
fruits [i] = new Fruits(); //对象实例化
}
FruitsTest test = new FruitsTest(); //需要先创建FruitsTest对象,才能调用其他的方法
//1.对对象数组赋初始值
test.fuZhi(fruits);
//2.遍历水果信息
test.print(fruits);
//3.根据月份按照冒泡排序进行重新排序
test.bubble(fruits);
//4.查找数量为10的水果信息
test.search(fruits,5);
}
// 1.对象数组的赋值
public void fuZhi(Fruits[] fruits){
for (int i = 0; i < fruits.length; i++) {
fruits[i].num = (i + 1);
fruits[i].quantity = (int)(Math.random()*10);
fruits[i].mature = (int)(Math.random()*3);
}
}
// 2.遍历数组水果的信息
public void print(Fruits[] fruits){
System.out.println("水果的基本信息是:");
for (int i = 0; i < fruits.length; i++) {
System.out.println(fruits[i].show());
}
}
// 3.根据数量按照冒泡排序进行重新排序
public void bubble(Fruits[] fruits){
for (int i = 0; i < fruits.length - 1; i++) {
for (int j = 0; j < fruits.length - 1 -i; j++) {
if(fruits[j].quantity > fruits[j+1].quantity){
Fruits temp = fruits[j];
fruits[j] = fruits[j+1];
fruits[j+1] = temp;
}
}
}
System.out.println("冒泡排序后的水果信息为:");
for (int i = 0; i < fruits.length; i++) {
System.out.println(fruits[i].show());
}
}
// 4.查找数量为10的水果信息
public void search(Fruits[] fruits, int number){
System.out.println("数量为"+number+"的水果信息如下:");
int a=0;
for (int i = 0; i < fruits.length; i++) {
if(fruits[i].quantity == number){
a++;
System.out.println(fruits[i].show());
}
}
if(a==0){
System.out.println("没有数量为"+number+"的水果!");
}
}
}
class Fruits {
int num; //水果编号
int mature; //成熟度
int quantity; //月份
// 展示水果信息
public String show(){
return "水果编号:"+num+" \t 数量:"+quantity+" \t 成熟度(0代表未成熟,1代表刚成熟,2代表过成熟):"+mature;
}
}
结果:
总结
本文总结对象数组使用时需要注意的异常,空指针异常,尤其是多次使用时一定要注意实例化这个问题!