第一章 对象导论
-
Java中,动态绑定是默认的,c#和c++一般会使用virtual来标识
-
对象的存储空间和生命周期可以在编写程序时确定,这可以通过将对象置于堆栈或者静态存储区,而动态分配在堆中,c#默认有一块托管堆
第二章 一切都是对象
- 在Java中,只有按值传递,在c++和c#中有引用传递
- 存储位置:
- 寄存器:处理器内部
- 堆栈:指针上移是释放内存,下移,分配内存(可以想象地址编码)
- 堆:用于存放Java对象,而且编译器不需要知道存储在堆里的数据的生命周期
- 常量存储:通常直接存放在程序代码内部
- 特例:基本类型,java的基本类型大小一定,且都有正负号,这是良好的可移植性的重要原因
- BigInteger/BigDecimal
- 基本成员默认值
- 当变量作为类的成员使用时才会被自动初始化,当作为某个方法的局部变量时不适用
- 如果声明局部变量x = 1,当则得到的可能是任意值,而不会被默认自动初始化为0
- 默认包名全小写
- static域
- 类的名字必须和文件名相同
第三章 操作符
- 别名现象:即表示两个引用引用同一个对象,一般包含传参别名和方法调用的别名
package com.zww.charpter3; public class Practice2 { static void f(Tank t){ t.level = 30; } public static void main(String[] args) { // TODO Auto-generated method stub Tank tank = new Tank(); tank.level = 10; Tank tank1 = tank; System.out.println("tank.level = " + tank.level); tank1.level = 20;//parameter passing byname System.out.println("tank.level = " + tank.level); f(tank);//method alias System.out.println("tank.level = " + tank.level); } } class Tank{ float level; }
- 整数除法会直接去掉结果的小数位,而不是四舍五入
- == equals
- == !=比较的是引用
- equals默认行为也是比较引用,但是大多数的类型都复写了这个方法,所以我们自己定义的时候要注意
- while(x = y){}只有当x,y都是bool值时才表明这句话没错
- java没有sizeof,因为所有类型长度相同,不需要sizeof