本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!
OO与PO:面向对象(Object Oriented)与面向过程(Procedure Oriented)
前者面向对象,首先构造一个对象,然后设置对象方法,最后由对象来处理任务,只关注结果。
后者面向过程,首先设置对象的方法,然后排序,最后一步步执行下来完成任务,注重顺序。
程序运行时,对象是怎么进行安排的?特别是内存是怎样分配的呢?有五个不同的地方可以存储数据:
1、寄存器。最快存储区,位于处理器内部,数量有限,以需分配,不受控制。
2、栈。位于RAM(Random Access Memory - 随机访问存储器),通过指针从处理器获得直接支持,内存分配有效性仅次于寄存吕;向下移则分配新内存,向上移则释放内存。
3、堆。一种通用内存池(同上位于RAM中),用于存放所有对象,比前者好处是:编译器不需要知道存储数据在堆的存活时间,性比较高,但存储分配和清理会比前者花费更多时间。
4、常量。通常直接存放在程序代码内部,是安全的,永远不会被改变的。嵌入式系统经常把它放在ROM(Read Only Memory)只读存储器里。
5、非RAM存储。数据完全存活于程序之外,不受程序控制,没有程序也照样可以存在,是一种聚合关系,如写在SD卡上的数据。
BigInteger和BigDecimal主要用来表示任意高精度的integer和double数据,商业大数据如阶乘。转化最后用String来表示原始数字,否则会损失精度,而且比较大小也要用compareTo而非equals。由于计算一次就生成一个对象,所以一般的计算建议还用基本数据类型来做。
一个方法里面如String s=new String("str");在方法结束后,s是要消失的,但它声明的对象还留在内存中,由垃圾回收器进行集中管理。
javac编译生成.class文件,java执行让classloader加载class输入执行结果
注意引用与数据是两个概念,不能划等号
位操作符,&同为1则为1否则为0,|有一个为1则为1,同为0才为0
移位操作符,“<<”左移低位补0;“>>"右移 符号为正则高位插入0,为负高位插入1;">>>"无符号右移,无论正负高位插入0;移动赋值如">>="。所以">>与">>>"的区别仅在于负数。