1.内存管理:由JVM来管理
1)堆:
1.1)用于存储所有new出来的对象(包括成员变量)
1.2)成员变量的生命周期:
创建对象时存在堆中,对象被GC回收时一并消失
1.3)垃圾回收器(GC)不定时到堆中查看,看到垃圾
自动回收:没有任何引用所指向的对象。回收
过程是透明的,并不是一看到垃圾就马上回收,
若想让它快一些回收,可以调用System.gc()
1.4)内存泄漏:不再使用的对象没有被及时的回收,
建议:当对象不再使用时应及时将引用设置为null
2)栈:
2.1)用于存储正在调用中方法的所有局部变量
2.2)调用方法时在栈中为该方法分配一块对应的栈帧,栈帧中包含所有的局部变量(包括参数),方法调用结束时,对应的栈帧消失,局部变量一并消失。
2.3)局部变量的生命周期:
调用方法时存在栈中,方法调用结束时与栈帧一并消失
3)方法区:静态方法区 存放静态成员 静态变量 静态函数
非静态方法区 存放构造函数 成员
3.1)方法用于存放类的信息
-方法区用于存放类的信息,java运行时,首先会通过加载器载入类文件的字节码信息,经过解析后将其装入方法区,类的各种信息,包括方法都在方法区中存储。
3.2)方法只有一份,通过this来区分具体是哪个引用
-当类的信息被加载到方法区时,除了类的类型信息以外,同时类内的方法也定义在方法区中。
-类在实例化对象时,多个对象会拥有各在在堆中的空间,但所有的实例对象是共用方法区的一份方法定义的。
2.继承:
1)目的:避免代码的重复,有利于代码的复用
2)通过extends实现继承
3)父类:所有子类所共有的属性和行为
子类:子类所特有的属性和行为
4)子类继承父类后,子类具有:
子类+父类
5)一个父类可以有多个子类
一个子类只能有一个父类----单一继承
6)继承具有传递性
7)java规定:构造子类之前必须先构造父类,子类构造中若没有调用父类的构造方法,则默认super()来调用父类的无参构造,若自己调了,则不再默认提供
Super()调用父类构造,必须位于子类构造方法的第一行。
3.super:指代当前对象的父类对象
用法:
super.成员变量名-------访问父类的成员变量
super.方法名()-------------调用父类的方法
super()------------------调用父类的构造方法
4.向上造型:
1)父类型的引用指向子类的对象 Animal animal = new dog();
2)能点出来什么,看引用的类型
5.方法的重写(Override):
1)发生在父子类中,方法名,参数列表与父类相同,方法体不同。
2)重写方法被调用时,看对象的类型
3) 当子类对象的重写方法被调用时,(无论是通过子类的引用还是父类的引用),运行的是子类的重写后的方法
4)子类在重写父类的方法时,可以通过super关键字调用父类的版本。
6.重写与重载的区别:
1)重写:父子类中,方法名相同,参数列表相同。
遵循"运行期"绑定,根据引用指向对象的类型调用方法。
2)重载:一个类中,方法名相同,参数列表不同,方法体一般也不同。
遵循"编译期"绑定,根据引用的类型调用方法。
7.访问控制修饰符:
1)public:公开的,任何类
2)private:私有的,本类
3)protected:受保护的,本类、子类、同包类
4)默认的:什么也不写,本类、同包类
类的访问修饰:public和默认的
类成员的访问修饰:如上4种都可