1. 类的模版
1 | public/private class 类名{ |
- public 存取与访问不受限制
- private 只有类自己的方法可以存取和访问
2. 引用类型 VS 原始数据类型
- “引用” 一个对象的变量称为 “引用类型” 的变量, 有时又简称为 “对象变量“
- 诸如 int, float 之类的变量称为 “原始数据类型“ 的变量.
3. 变量与内存
A.变量与内存的分配
- 声明一个 对象变量 时, 实际上并没有创建一个对象, 此变量 = null
- 定义一个 原始类型变量 时, 会马上给其分配内存.
(对象变量就是指针? 创建之后为 null?)
B. 变量初始化
- 任何变量在使用之前都必须初始化
- 如果要使用一个对象变量又没办法引用一个真实的对象, 就必须声明为 null
C. 引用对象后的对象变量
- 对象变量保存的是对象的内存地址值
- 当对象不再使用, JVM 会回收对象所占用的内存, 这个过程称为 “垃圾回收” (GC: Garbage Collection)
D. 理解赋值 “=” 的含义
1 | Myclass obj = new Myclass(); |
这里的 “=” 是把 obj 保存的内存地址值赋给 other, 这两个对象变量指向的实际是同一个对象.
E. 独特的对象引用: this
- 对象中的所有数据字段都是通过 this 指针间接引用的
(不是很懂. 2017年12月6日 20:31:40)
F. 作为常量的对象变量
1 | final Myclass obj = new Myclass(); |
“常量” 对象不能指向另一个对象, 但可以修改对象, 比如设置它所引用对象的某公有字段值.
G. 对象判等
- 对于基本类型变量, 通过 “==” 可以判断它们的值是否相等, 比如 int.
- 对于对象变量, “==” 比较的是这两个对象变量是否引用同一对象. (这就是这两个变量的指针是否相等?)
- 我们比较两个变量, 通常是希望比较它们的”内容”是否相等. 在 Java 中要比较两个对象的字段值, 可以 “重写(override)” 基类的 equals() 方法.
1 |
|
@Override 指明此方法是 “重写基类的同名方法”, Java 中, 这种以 “@” 打头的标记被称为 “Annotation”
上面重写 equals() 的方法是简化的, 实际中不应该这么写.
- 自定义 equals() 方法
除了重写基类的 equals() 方法, 我们也可以 “重载(overload)” equals():
(重载: 参数类型或者参数个数不同. 此时不用附加 @Override)
1 | public boolean equals(foo obj){ |
4. 构造函数
A. 特点
C. 类的初始化块
- 可以在类中使用 “{“ 和 “}” 将语句包围起来, 这部分称为类的初始化块, 里面的语句通常用来初始化类的属性
- 调用顺序: 从上往下执行初始化语句, 然后执行构造函数里面的语句.
- 初始化块适合封装那些 “对象创建时必须执行的代码”
- 创建子类对象会导致基类初始化块的执行
5. 类的静态字段
A. 访问
- 可以通过对象名和类名作为前缀访问静态数据
- 推荐使用类名来直接访问静态字段(因为静态字段不属于任何一个对象)
B. 初始化
- 静态初始化块只会执行一次, 并且优先于一般的初始化
- 创建子类型对象时, 也会导致父类型的静态初始化块的执行
C. 访问权限
类的静态方法只能访问类的静态成员.
6. 包装类
A. 含义
- 基本数据类型仅仅提供了数据, 却缺少一些常用的功能, 为此, Java 提供了包装类.
- 包装类 = 基本数据类型的数据 + 扩充的一些方法和字段
- 包装类是引用类型, 可以创建相应的对象.
B. Java 中的包装类
- byte -> Byte
- short ->Short
- int ->Int
- long ->Long
- char ->Char
- float ->Float
- double ->Double
- boolean ->Boolean
C. 使用
1 | Integer obj = new Integer(100); |
D. 装箱和拆箱
1 | int Value = 100; |
//不懂