如果我们说另一种不同的语言, 那么我们就会发觉一个有些不同的世界.
解读: 不同的语言是从不同的角度描述世界的.
Java: 是一种纯粹的面向对象的语言, 几乎一切都是对象.
用引用操纵对象: 操纵内存中的元素(数据类型, 直接操纵(引用), 间接操纵(指针)).
Java: 类型 标识符; String s; 定义一个引用 reference; 可以将对象赋值给引用, 使其操纵该对象.
本质: 引用存放于执行栈中, 由执行栈的指针查找并获取他的值; 对象存放于堆内存中, 由引用的值查找并获取对象的数据. 至于是怎么查找及获取的原理: 我想就是一套定位机制.
必须由你创建所有对象: new String();
存储位置:
寄存器: 计算机中最快的存储区, 位于处理器内部.
堆栈: 位于 RAM 随机访问存储器中, 通过堆栈指针可以从处理器哪里获得直接支持. 仅次于寄存器. 指针只能上下移动来控制内存的分配和释放, 故内存中的数据必须是有确切的生命周期的.
本质: 内存分配, 栈空间 (可以想象成连续的内存空间) 每分配一个内存, 指针向下移动一步, 数据被放入分配的空间中. 每释放一个内存, 指针向上移动一步. 那么怎么使用已经存放好的数据呢? 这就需要通过控制指针的移动步骤了.
堆: 一种通用内存池(也位于 RAM 区), 用于存放 java 对象. 内存分配和清理是由于不知道内存数据的生命周期, 而变得更为缓慢, 不过也更为灵活.
本质: 堆空间(不连续的内存空间), 分配时, 随机查找到一块未用内存存放, 返回地址数据, 释放时需判断其地址是否有引用持有来释放.
常量存储: 常量值通常放入代码内部, 或者放在 ROM 只读存储器中.
非 RAM 存储: 硬盘等位置.
特例: 基本类型. 特点: 占用空间小且不随机器硬件的改变而改变(保证移植不变), 表示简单.
对于此类对象, 可以放入栈中, 提高效率.
Boolean,char(16bit, 范围 Unicode0 到 Unicode2^16-1),byte(8bit),short(16bit),int(32bit),long(64bit),float(32bit),double(64bit),void.
1 byte = 8 bit,1 字节 = 8 位, 每位只能存储二进制数据(0 或 1)
Java 中的数值都有符号, 由最高位表示.
故 byte 的范围计算为:-2^7 到 + 2^7-1; 一共可表示的数 2^8=256.+0 和 - 0 所以要减 1.
高精度数字: BigInteger 和 BigDecimal. 为一个类库中的类, 其范围任意, 所能做的计算有其本身的方法实现.
数组: 为特殊的抽象数据类型, 在 java 中其规则有, 初始化内存全部清零, 访问范围将被检查, 不能超出范围.
永远不需要销毁对象:
变量的作用域: 变量的生命周期(c 语言可以由花括号包裹的范围决定, java 不行),java 是由方法(方法中的变量只能在方法中可以使用, 称为局部变量), 对象决定的(能在对象的各个方法中使用, 称为成员变量).
对象的作用域: java 中对象可以一直存在, 除非其没有引用指向后才可能被释放(不过其引用变量是有作用域的, 可以将引用变量赋值给更大的作用域变量);c 中对象作用域类似变量的作用域.
创建新的数据类型: 类. Class name{变量, 方法 }
变量: 类型 变量名; int i; String s; 都会有默认初始化值.
方法: 返回值类型 方法名(参数列表){代码};
细节: 返回值类型(任何数据类型, 特殊数据类型 void(表示返回值为空)), 参数列表(将调用请求时可能会需要传递一些信息, 信息为各类型的值, 不同类型的值在参数列表中需要明确指定其类型和代表值的名称, 如 add(5), void add(int i){}. 调用时 5 是 int 类型)
类的名字: 区分不同类, 自定义时可能会和类库中的一样. 那么类的实际名称为包名 + 类名. 为了避免每次写包名 + 类名, 可以用 import 包名.
Static: 静态的, 用于某个变量希望他不依赖对象, 也就是说没有 new 对象或者 new 了多个对象都是存在此变量且各对象中的此变量是同一个. 其存放在类定义的代码区.
来源: http://www.bubuko.com/infodetail-2588017.html