个人对内存中对象中包含对象的理解

我们想要调用手机的充电功能,但是实际上我们调用的是电池充电的功能,但是出现了空指针异常,因为手机类中的电池(这个属性)是成员变量,在测试类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

个人对内存中对象中包含对象的理解

总结:二维数组的意思就是二维数组中存了几个一维数组,每个一维数组有几个元素。二维数组就是手机,几个一维数组就是之前讲的手机中的属性(电池,颜色什么的),一维数组就是电池这个对象。如果我们没有把这个对象实例化,它就是一个属性,属性是不可能调用方法的。

转载于:https://www.cnblogs.com/19322li/p/10610012.html

我们想要调用手机的充电功能,但是实际上我们调用的是电池充电的功能,但是出现了空指针异常,因为手机类中的电池(这个属性)是成员变量,在测试类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

个人对内存中对象中包含对象的理解

总结:二维数组的意思就是二维数组中存了几个一维数组,每个一维数组有几个元素。二维数组就是手机,几个一维数组就是之前讲的手机中的属性(电池,颜色什么的),一维数组就是电池这个对象。如果我们没有把这个对象实例化,它就是一个属性,属性是不可能调用方法的。