Loading

java知识点记录

1.堆与栈的区别

此处的堆与栈指程序内存分区中的堆与栈。

堆:开发人员分配与释放,若开发人员不释放,操作系统在程序结束时回收,分配方式类似于链表。

栈:操作系统自动分配、释放。

区别:

1、管理方式不同。栈由操作系统自动分配释放。堆由程序员申请与释放,可能会出现内存泄露的情况。

2、空间大小不同。栈的大小远小于堆大小。

3、内存地址顺序。数据入栈,从内存高位依次向内存低位。数据入堆,从低位向高位。

4、分配方式。栈,静态分配+动态分配;静态分配由操作系统完成,如局部变量;动态分配,操作系统进行内存释放。堆只有动态分配。

5、分配效率。栈,效率高,因为有底层硬件的支持,如寄存器以及相应的指令。堆,效率低,由高级语言实现,因此增加复杂度,效率较低。

6、存放内容。栈,函数返回地址、相关参数和局部变量等。堆,由程序员决定。

2.自动包装机制

容器不能存放基本类型,放进放出需要包装解包。

装箱应该理解为封装对象 ,即把基础数据类型(如 int)转换成基础类型封装类的对象(如 new Integer())拆箱就是装箱的反过程,即把基础类型封装类的对象(如 new Integer())转换为基础数据类型(如int)

3.协变返回类型

 在面向对象程序设计中,协变返回类型指的是子类中的成员函数的返回值类型不必严格等同于父类中被重写的成员函数的返回值类型,而可以是更 "狭窄" 的类型。


Java 5.0添加了对协变返回类型的支持,即子类覆盖(即重写)基类方法时,返回的类型可以是基类方法返回类型的子类。协变返回类型允许返回更为具体的类型。

4.接口与抽象类的区别

接口是抽象方法的集合;实现接口必须实现方法;接口没有构造器;接口不同于正常的类;默认修饰符为public,且不可使用其他修饰符;没有main方法;仅可以继承一个或多个其他接口;若在接口中添加了新的方法,实现接口的类都要改变。

 

抽象类集成子类的共同特性;不能被实例化;可以有默认的方法实现;可以有构造器;修饰符可以有public、protected、default;抽象类中可以有main方法,且可以运行;抽象方法可以继承一个类,实现多个接口;可以添加新方法,并且提供默认实现,继承抽象类的类无需改变代码;

 

5.final与static

final修饰属性,值不能更改;修饰方法,方法不能重写;修饰类,类不能被继承。

static修饰的成员变量不属于对象的数据结构;static成员变量和类的信息放在一起,仅保留一份,用于共享;被static修饰的属性/方法可以通过类名直接调用,无需实例化;对象也可以直接调用;静态方法里不能使用非静态属性;

被final\static修饰的是常量,声明同时必须初始化,不可被改变。

 

posted @ 2020-09-17 21:42  低吸埋伏  阅读(94)  评论(0编辑  收藏  举报