一、java虚拟机的工作原理
答:1、Java虚拟机由五个部分组成:一组指令集、一组寄存器、一个栈、一个无用单元收集堆(Garbage-collected-heap)、一个方法区域。
2、类加载过程:委派模式:从自定义类加载器开始检查类(自底向上)是否已经加载,从Bootstrap到自定义类加载器开始尝试加载类。(自顶向下)。
3、分配内存区域:当运行一个虚拟机的时候,系统会为它分配一块区域并让虚拟机自己管理,划分为:Java栈、程序计数寄存器(PC寄存器)、本地方法栈(Native Method Stack)、Java堆、方法区域、运行常量池(Runtime Constant Pool)。在类的加载过程中,会完成类信息和基本的初始化工作。
4、执行引擎:当类加载完成后,机器并不能识别java字节码,需要把字节码转化为机器能识别的机器吗,这个由解析器负责执行。执行会对字节码进行机器无关的优化。这样就可以实现java无关性了。
二、java的三大特性:
1、封装:指把同一类事物的共性(包括行为和属性)抽象出来,封装成一个类;同事,封装也称为信息隐藏:指使用抽象数据类型 把 数据和基于数据的操作封装城一个不可分割的整体,只对外提供访问该抽象数据类型的接口,达到保护内部数据。用户无需关心其内部实现,通过接口访问该对象即可。
好处:实现了对象操作行为的划分和重用,团队协作时,各程序员间可以直接用;隐藏不想让用户知道的细节
2、继承:子类继承父类,把具有相同属性和行为的一组事物的共性抽象出来,封装成父类,实现了代码的复用。
3、多态:以封装和继承为基础。相同的一类事物,使用相同的操作,但表现的行为不一样(动态绑定)。在上一个抽象层面上 抽象一个统一的特征操作。但在具体的实现中有不同的实现。从而表现的行为也不一样。
三、设计类的六大原则
1、单一职责原则:一个类只负责一项职责
2、里氏替换原则:尽量不重写父类非抽象方法,可增加子类特有方法
1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
2.子类中可以增加自己特有的方法。
3.当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
4.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
3、依赖倒置原则:高层模块不应该依赖底层模块,二者都应该依赖抽象,抽象不依赖细节,细节以来抽象。
4、接口隔离原则:两个类之间应该依赖与最小的接口,二不是混在一起。
5、最少知道原则(迪米特法则):类尽量少知道自己所依赖的类的信息,被依赖类只需为依赖类提供public接口即可。
6、开闭原则:对修改关闭,对拓展开发。
联系。使用者无需关心内部的实现细节,但可以通过提供的接口与访问该对象。