zoukankan      html  css  js  c++  java
  • 个人对内存中对象中包含对象的理解

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

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

  • 相关阅读:
    边工作边刷题:70天一遍leetcode: day 11-1
    边工作边刷题:70天一遍leetcode: day 11
    边工作边刷题:70天一遍leetcode: day 12-1
    边工作边刷题:70天一遍leetcode: day 12
    边工作边刷题:70天一遍leetcode: day 13-1
    边工作边刷题:70天一遍leetcode: day 13-2
    边工作边刷题:70天一遍leetcode: day 13
    边工作边刷题:70天一遍leetcode: day 14-1
    边工作边刷题:70天一遍leetcode: day 14
    边工作边刷题:70天一遍leetcode: day 15
  • 原文地址:https://www.cnblogs.com/19322li/p/10610012.html
Copyright © 2011-2022 走看看