1.堆和栈
JAVA中的栈和堆
Java方法区、堆、栈、本地方法区及新生代、老年代、元空间整合
JAVA在程序运行时,在内存中划分5片空间进行数据的存储。分别是:1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:基本数据类型、局部变量都是存放在栈内存中的,用完就消失。存取速度仅次于寄存器。
堆:new创建的实例化对象及数组,是存放在堆内存中的,用完之后靠垃圾回收机制不定期自动消除。存取速度较慢。
2.static
特点:
- static修饰的成员被所有对象共享
- static优于对象存现,因为static的成员随着类的加载已经存在了
使用:
- 静态变量:用于所有对象都只能读的不变量
- 静态方法:不需要访问非静态的成员变量的方法
3. 单例设计模式
定义:一个类在内存中的对象唯一性
实现:
- 私有化构造函数
- 使用new在本类中创建一个本类的对象
- 定义一个返回该类对象的公有方法。
4. 抽象类和接口
抽象类和接口有什么区别
相同点:都是不断向上抽取而来的
不同点:
- 抽象类需要被继承,只能是单继承
接口需要实现,可以是多实现 - 抽象类中可以定义抽象方法和非抽象方法
接口中只能定义抽象方法,必须由子类实现 - 抽象类的继承,是is a 关系,实际是定义了该体系的基本共性内容
接口的实现是like a关系,实际是定义了体系额外的功能
5.final
- final是一个修饰符,可以修饰类、方法、变量
- final修饰的类不可以被继承
- final修饰的方法不可以被覆盖
- final修饰的变量是一个常量,只能赋值一次(全部字母大写,多个单词“_”连接)
6. 多态
定义:一个对象对应着不同的类型。比如猫既有猫的形态,又具有动物的形态。
体现:父类或者接口的引用指向其子类的对象。
Animal c_animal = new Cat(); //向上转型,将子类的特性隐藏,无法使用子类特有方法
Cat c_cat = Cat(c_animal); //向下转型,使用子类的特有方法
// 注意:自始至终都是子类对象在做着类型变化