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


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

  • 相关阅读:
    POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
    LCA 最近公共祖先 (模板)
    线段树,最大值查询位置
    带权并查集
    转负二进制
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
  • 原文地址:https://www.cnblogs.com/twodog/p/12135007.html
Copyright © 2020-2023  润新知