我们想要调用手机的充电功能,但是实际上我们调用的是电池充电的功能,但是出现了空指针异常,因为手机类中的电池(这个属性)是成员变量,在测试类new一个手机时初始化默认为null(空的什么都不是,不能调用方法)--------->分析怎么让这个cell内存空间中存的不是null-------->在调用充电功能的方法中构造一个cell(cell = new Cell() ;),那样他就成为了一个对象,可以调用电池类中的充电方法
总结:一个类中的属性(cell)是另一个类(Cell)的对象,想要调用对象的方法,就必须构造一个出来一个对象(new Cell( );),然后把这个对象赋给另一个类的属性 cell = new Cell(); 他们是包含关系
形象化理解:
public class PhoneTest { public static void main(String[] args) { /* * Iphone phone = new Iphone(); * * phone.phoneCharge(); */ int[][] m = new int[3][]; System.out.println(m); System.out.println(m[0]); } } 运行结果: [[I@7852e922 null
int[ ] [ ] m = new int[ 3] [ ]; / /此时编译不报错,可以输出二维数组的地址值和二维数组中行数的值(行数中存的是列数的地址,但是此时没有给列数分配空间,所以默认为null)
public class PhoneTest { public static void main(String[] args) { /* * Iphone phone = new Iphone(); * * phone.phoneCharge(); */ int[][] m = new int[3][]; System.out.println(m[0][0]); } } 运行结果: Exception in thread "main" java.lang.NullPointerException at com.woniuxy.demo02.PhoneTest.main(PhoneTest.java:9)
此时输出二维数组中的第一个一维数组的第一个元素,报了空指针异常,因为我们根本就没有个一维数组分配空间
当我们给二维数组中的一维数组分配空间时int[ ][ ] m = new int[3][1];
public class PhoneTest { public static void main(String[] args) { /* * Iphone phone = new Iphone(); * * phone.phoneCharge(); */ int[][] m = new int[3][1]; System.out.println(m); System.out.println(m[0]); System.out.println(m[0][0]); } } 运行结果: [[I@7852e922 [I@4e25154f 0
正常输出结果,一维数组中没有存元素,默认为0
总结:二维数组的意思就是二维数组中存了几个一维数组,每个一维数组有几个元素。二维数组就是手机,几个一维数组就是之前讲的手机中的属性(电池,颜色什么的),一维数组就是电池这个对象。如果我们没有把这个对象实例化,它就是一个属性,属性是不可能调用方法的。