内存分析
说明:
1、引用类型的变量,只可能存储两类之:null或地址值(含变量的类型)
引用变量就是栈中的那个地址????????
public static void main(String[] args) {
Student[] stus = new Student[5];
}
class Student{
int number;
int state;
int score;
}
这个代码new了一个类,在栈空间有了一个stus,在堆空间中有了一个数组,该数组在对空间中
有对应的地址,如:0x7788,在栈空间中赋值给stus,那么stus就可以调取堆空间中的数组。数组
没有赋值之前全是null值。
上面代码的理解: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
完之后不能直接调用,
但是可以在类中写一个getVars
和setVars
的函数来简介赋值和调用。
这样可以:
1、在间接调用的函数来对变量进行筛选和设置,从而保证程序正常运行;
2、统一接口;
3、提高可维护性。