一. 权限
- public : 对任何人都是可用的。
- private : 表示除类型的创建者和类型的内部方法之外的任何人都不能访问。
- protected :与private作用相当,差别在于:继承的类可以访问protected成员,但 是不能访问private成员。
二.基类与导出类产生差异的方法
1. 直接在导出类中添加新的方法。
2. 改变现有基类的方法行为,即覆盖。
三.基类与导出类的关系
1. “is-a”关系,继承只覆盖基类的方法,而不去添加任何新的方法。
2. “is-like-a”关系,导出类添加了新的接口,即扩展了基类的接口。
四.前期绑定与后期绑定
1. 前期绑定:即编译器将产生对一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址。非面向对象编程用的就是前期绑定。
2. 后期绑定:OOP中,直到运行时才能确定执行代码。为了执行后期绑定,Java使用一小段特殊的代码来替代绝对地址调用。这段代码使用在对象存储的信息来计算方法的地址。(C++采用virtual关键字来实现具备后期绑定属性所带来的灵活性)
五. 数据存储
名称 | 位置 | 描述 |
寄存器 | 处理器内部 | 速度快、数量有限,程序员不能直接控制 |
堆栈 | 通用RAM(随机访问) | 通过堆栈指针进行访问堆栈指针向下移动分配内存,向上释放必须确定堆栈内所有数据的生命周期 |
堆 | 通用存储池(位于RAM区) | 存放所有Java对象不需要知道数据的存命周期,但需代价 |
常量存储 | 程序代码内部 | 数据永远不会改变 |
非RAM存储 | 例如硬盘 | 不接受程序的任何控制基本例子:流对象和持久化对象数据库存储的数据 |
六、数据类型
基本类型 | 大小(bit) | 默认值 | 包装器类型 |
boolean | false | Boolean | |
char | 16 | ’u0000’(null) | Char |
byte | 8 | (byte)0 | Byte |
short | 16 | (short)0 | Short |
int | 32 | 0 | Integer |
long | 64 | 0L | Long |
float | 32 | 0.0f | Float |
double | 64 | 0.0d | Double |
void | Void | ||
C++没有此功能 | |||
高精度数字(非基本类型) | |||
BigInteger | 支持任意精度的整数 | ||
BigDecimal | 支持任何精度的定点数 |
注:尽管Java数据有默认值,确保了基本类型的数据得到初始化,防止产生数据错误,但这些默认值对我们的程序可能是不正确的,甚至不合法,因此我们在调用数据之前最好明确地初始化。
七. C++与Java安全监测与内存泄露
语言 | 安全检测 | 内存泄露 |
C | 数组范围检测 | Free()回收malloc()分配的内存 |
C++ | 数组范围检测 | 所创建的对象在超出作用域之前进行手工delete,否则会造成内存泄露 |
Java | 不需要程序员进行数组范围检测,这些工作由系统检测 | 所有对象都不需要手工delete,有系统机制自动回收内存 |
总结 | 数组使用之前是否有引用(不能为null) |
八.C、C++支持的代码格式,Java不支持
{
Int x = 2;
{
Int q = 96;
}
}
注:因此,不管在编写C、C++代码,还是编写Java代码,都不要存在这种格式的代码。
九.Static方法(类方法)和static域(类数据)
1. 类数据:与一般数据区分开,程序分配单一存储空间,不需要考虑创建了多少对象。
2. 类方法:没有创建对象,也能够调用这个方法。
3. 类数据的访问:1)通过一个对象去定位它;2)通过类名定位
4. 类方法的调用:1)通过一个对象去访问;2)通过类名访问