java基本数据类型占用内存大小:
占用一个字节:byte,boolean
占用两个字节:short,char
占用四个字节:int,float
占用八个字节:long,double
从java7以后:
1.switch语句可以支持String字符串了
2.常量池从方法区转移到堆上
JVM基本的内存结构:JVM虚拟机栈,堆,方法区
从java8以后:
1.HashMap底层的链式哈希表,链表的节点(产生哈希冲突的节点)如果小于8个,
用链表来组织;如果大于8个,把链表更改成红黑树了。随着元素删除,如果节点个数
小于6个,红黑树结构又改成链表了
2.方法区Method Area去掉了,被元空间波MetaSpace替代,元空间和本地内存相关,可以通过参数改变大小
对象初始化(static成员和static块,实例成员和实例块,构造函数)
继承:基类static成员和static块,派生类static成员和static块
基类实例成员和实例块,构造函数;派生类实例成员和实例块,构造函数
类的加载过程:
1.加载
用类加载器,在制定的路径上,加载对应的class字节码文件 =》类型的Class对象
2.链接 准备,验证,引用
a.验证上面的字节码文件,是否能够在当前的jvm上运行;
b.给static成员开辟内存
c.它如果有基类,那么重复上面的步骤,加载基类
3.初始化
给static静态成员进行初始化工作
静态绑定:在静态绑定中,绑定可以在运行时或编译时解析。所有static,final和private方法的绑定过程都在编译时完成(方法重载)
动态绑定:在Java中重写可以被认为是动态绑定的最佳示例,因为父类和子类具有相同的方法 - 也就是说,它不决定要调用的方法
多态:多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作
多态存在的三个条件:继承,方法重写,父类引用指向子类对象
抽象类:含有抽象方法的类是抽象类 (abstract)
抽象类不一定含有抽象方法
抽象类不能实例化对象,仍然含有构造方法
父类是抽象类:子类重写父类的抽象方法或者把子类定义成抽象类
接口(interface):全部是抽象方法和常量,无构造方法→不能直接实例化对象
extends→类和类之间是继承关系
implements→普通类实现接口中的抽象方法
抽象类和接口的区别??1.抽象类只能继承一个,接口可以实现多个 2.接口成员变量只有final 3.从java8开始接口也可以实现方法 4.接口只是功能的约束