内存分析
    说明:
    1、引用类型的变量,只可能存储两类之:null或地址值(含变量的类型)
    引用变量就是栈中的那个地址????????

    1. public static void main(String[] args) {
    2. Student[] stus = new Student[5];
    3. }
    4. class Student{
    5. int number;
    6. int state;
    7. int score;
    8. }

    这个代码new了一个类,在栈空间有了一个stus,在堆空间中有了一个数组,该数组在对空间中
    有对应的地址,如:0x7788,在栈空间中赋值给stus,那么stus就可以调取堆空间中的数组。数组
    没有赋值之前全是null值。
    java_day12对象、数组、内存分析、重载、构造器、封装 - 图1

    上面代码的理解:
    Student[] stus = new Student[5]; 这句new了一个数组,里面有五个空的空间
    为什么这里new一个数组还是Student类的呢? 因为这表明这个数组的每个空间,
    都可以赋值给一个Student类,至于赋值到其他类行不行,未知??????????
    引用变量就是那个0x7788,如果打印这个变量的话会出现: 变量类型. 0x7788的状况
    如果要赋值给stus,那么要写入stus[0] = new Student();,现在stus[0]里就包含了
    一个Student类所有的属性

    匿名对象:
    new Phone().sendEmail();
    PhoneMall mall = new PhoneMall();
    mall.show(new Phone);// 直接在方法调用里面new一个匿名对象(这个PhoneMall是一个自定义的方法,show是一个打印对象属性的方法)。
    直接调用对象里面的方法,创建的对象没有显式赋给一个变量名。
    匿名对象只能用一次。

    重载(overload):同一类中,允许出现一个同名的方法,只要它们的参数个数或者参数类型不同即可。
    简称:同类同名不同参。
    通过对象调用方法时,不能依赖于方法名,还要留心参数的变量类型。
    方法名→参数列表。

    可变个数形参:允许直接定义能和多个实参相匹配的形参

    构造器是一个创建对象时被自动调用的特殊方法,目的是对象初始化。
    java通过new来调用构造器,从而返回该类的实例
    声明格式:
    修饰符 + 类名(形参列表){
    // n条语句
    }
    意思就是给定这个实例一个初始化的值,如果是空的构造器,那么所有属性都是对应的初始的值,
    如null\0\false等。
    进行实例化的时候可以直接调用构造器?????????当然可以,构造器是一种特殊的方法。
    一旦定义了有参构造,无参构造必须显示定义。

    方法区也是堆,应该着重理解“方法”区。
    方法去会存放方法对应的参数,栈存放引用变量,堆存放具体的对象值(我的理解)。
    方法区用来存储程序中永远不变或唯一的内容:

    垃圾回收就是把没有被引用的对象清除
    分代垃圾回收机制
    年轻代、年老代、永久代
    JVM将堆内存划分为Eden、Surviver和Tenured\Old空间

    封装:
    高内聚,低耦合。
    private:私有
    声明属性的时候可以用private当修饰,这样new完之后不能直接调用,
    但是可以在类中写一个getVarssetVars的函数来简介赋值和调用。
    这样可以:
    1、在间接调用的函数来对变量进行筛选和设置,从而保证程序正常运行;
    2、统一接口;
    3、提高可维护性。