面向对象思想:
面向对象是相对于面向过程来讲的,指的是把相关的数据和方法组织为一个整体来看待,从整体的角度来进行系统建模,更加贴近事物的自然运行模式。 面向对象关注的是执行的过程,面向对象关注的是具备功能的对象,面向过程到面向对象是程序员思想上从执行者到指挥者的转变。 三大思想: OOA:面向对象分析(Object Oriented Analysis) OOD:面向对象设计(Object Oriented Design) OOP:面向对象编程(Object Oriented Programming) 四大特征: 抽象性:将现实时间中的事物抽象为程序世界中的事物。 继承性:继承其它的功能并添加自己的功能。 封装性:所有内容对外部不可见。 多态性:同一个方法可以有多种实现形式。
创建对象内存分析:
包括栈,堆,方法区和PC寄存器,本地方法栈
栈:
①栈附属于线程,当线程被创建时,一个新的栈被创建并且由系统设置栈的大小分配给这个线程。程序中同时运行了几个线程就会有几个栈。这也就是说在线程结束时,线程的附属栈也会被回收。 ②栈存储在计算机的RAM中。 ③栈中存储的是基本数据类型与引用数据类型的引用地址,通过地址访问堆中的引用数据类型变量。 ④实现了数据结构中的栈结构,数据是先进后出的。栈指针指向当前数据,栈顶指针向上移动时,向栈中压入数据;栈顶指针向下移动时,从栈中弹出数据。 ⑤Java栈是由许多栈帧组成的,一个栈帧包含一个Java方法调用的状态,当线程调用一个方法时,虚拟机压入一个新的栈帧到该线程的Java栈中,当该方法返回时,这个栈帧从Java栈中弹出。
堆:
堆是用来存储相关引用类型的,如new对象。当程序运行时,虚拟机会把所有该程序在运行时创建的对象都放到堆中。堆空间中所有的内存的释放都由GC完成。堆空间中内存的申请是由Java虚拟机向系统申请的。
方法区:
方法区用来存储解析被加载的class文件的相关信息。 当虚拟装载一个class文件后,它会从这个class文件包含的二进制数据中解析类型信息,然后将该相关信息存储到方法区中。 方法区中包含了常量池。
PC寄存器:
PC寄存器主要用来存储线程。当新创建一个线程时,该线程都将得到一个自己的PC寄存器(程序计数器)以及一个java栈。 Java虚拟机没有寄存器,其指令集使用Java栈来存储中间数据。
本地方法栈:
保存本地(native)方法的地址。