创建: 2020/11/18
完成: 2020/11/18
更新: 2020/11/21 增加泛型, enumeration, iterator
更改标题 [Java 类] => [Java 类, 泛型, Enumeration, Iterator]
更新: 2020/11/27 补充匿名类
更新: 2021/10/4 修改标题 [Java 类, 泛型, Enumeration, iterator] => [Java 类(class), 泛型, Enumeration, iterator], 以防止我自己找不到这篇文章
| 类 |
| 定义 |
class clsName {
// 实例变量
type1 varName1 = v1;
type2 varName2 = v2;
...
// 构造函数
clsName(prms) {
...
}
clsName(prms) {
...
}
// methods
rtype1 mthName1(params) {
...
}
rtype2 mthName2(params) {
...
}
}
- 不初始化的boolean默认false, 数值默认0, object默认null
|
| 生成实例 |
clsName v = new clsName(...);
|
| 匿名类 |
生成与定义在同一处
|
| 构造函数 |
- 不需要返回值(自动返回自身的参照)
- 不定义则默认生成没有参数的构造函数
- 继承
| 呼出super class的构造函数 |
- 必须在构造函数里先呼出super(args)
- 在构造函数里不呼出则默认执行 super();
|
| |
|
|
| this |
| method内呼出自身变量,方法 |
|
| 构造函数里呼出别的构造函数 |
必须先呼出这个在进行其他构造函数的处理
|
|
| 实例变量与实例方法 |
- 实例变量
// 实例变量
type varName;
// 多个
type varName1, varName2, ...;
// 声明与初始化
type varName = v;
// 多个
type varName1 = v1, varName2 = v2, ...;
- 实例方法
// 实例方法
rtype mthName(params) {
...
}
|
| 静态变量与静态方法 |
- 静态变量
// 静态变量
static type varName1;
// 多个
static type varName1, varName2, ...;
// 声明与初始化
static type varName =v;
// 多个
static type varName1 = v1, varName2 = v2, ...;
- 静态方法
// 静态方法
static rtype mthName(params) {
...
}
- 静态代码块(初始化用)
|
| local变量与范围 |
| local变量 |
- 没有默认值
- 和实例或静态变量重名则优先local变量
|
| 范围 |
代码块(如method) |
|
| overload |
| signature不同即可 |
signature: 方法名与参数的数据类型, 数量 |
| |
|
|
| 参数的参照 |
- 基本数据类型传递的是值
boolean, char, byte, short, int, long, double ,float
- 数组和Object传递的是参照
在函数里改变值外部也会发生变化
|
| 继承 |
| 写法 |
extends
class clsName2 extends clsName1 {
...
}
- 没有extends的都继承Object
- 只能有一个super class
|
| 类类型的变量 |
className varName;
//例
Sample v1;
|
| super |
|
|
overload
|
| 变量overload |
- 和super class同名的变量存在时, 忽视super class的
- 要获取super class的,用 super
|
| 方法overload |
- 返回的类型必须和原来的一直
- 和super class同名的变量存在时, 忽视super class的
- 要获取super class的,用 super
|
|
| |
|
| |
|
| |
|
| |
|
|
| 修饰符 |
| 类修饰符 |
| abstract |
不能生成实例
- 只需要声明, 不需要定义(可以定义)
- abstract类的method需要abstract的要分别添加 abstract
|
| final |
不能被继承
|
| public |
可以被所有类获取
|
| 不指定 |
不指定则只能在当前package里获取
|
|
| 变量修饰符 |
| final |
值一旦被赋予则不能变
常用于定义常量
static final type varName = ...;
|
| private |
- private, protected, public只能指定一个
|
| protected |
- private, protected, public只能指定一个
|
| public |
- private, protected, public只能指定一个
|
| static |
|
| transient |
|
| volatile |
|
| 不指定 |
非final, 非transient, 非volatile |
| |
|
| |
|
|
| 构造函数修饰符 |
| private |
只能在此类内部代码去调用 |
| protected |
可以在此类内部, 子类内部, 同一package内调用 |
| public |
能被所有类调用 |
| 不指定 |
默认package-private, 只有同package才能调用 |
|
| 方法修饰符 |
| abstract |
|
| final |
不能被子类重写 |
| native |
导入其他语言的methods |
| private |
只能在此类内部调用 |
| protected |
只能被此类, 子类内部,同一package内调用 |
| public |
|
| static |
静态方法 |
| synchronized |
多线程用 |
| |
|
|
|
| Object类 |
所有类都继承Object类
| 实例方法 |
| boolean equals(Object obj) |
是否是同一个Object
比较的是pointer是否是同一个
|
| Class getClass() |
获取当前实例的类 |
| String toString() |
转换为字符串
|
|
| |
|
|
| Class类 |
- 封装程序运行时的class和interface信息
- JVM自动生成
| 实例方法 |
| String getName() |
调用数据类型的名称 |
| Class getSuperClass() |
|
|
| 静态方法 |
|
|
| |
|
| |
|
| 泛型 |
| 写法 |
| <T, ...> |
| 指定class及其子类, 以及接口interface |
|
| 指定类及其父类 |
|
|
|
惯用符号
convetion symbols
|
| E |
元素 |
| K |
key |
| N |
number |
| T |
类型type |
| V |
value |
| S, U等 |
第二个及以后的类型 |
| |
|
|
|
| 带泛型的类 |
class clsName<T> {
T varName; // 泛型作为类型直接用
// 方法
T mthName(T varName, ...) {
...
}
}
|
| 带泛型的方法 |
<T> rtype mthName(args) { ... }
// 例
<T> T sample(T v1, T v2, boolean v3) { ... }
|
| 指定泛型 |
clsName<t1, t2, ...> varName = new clsName<t1, t2, ...>(...);
// 例
ArrayList<Integer> ary = new ArrayList<Integer>();
|
| |
|
| Enumeration |
| 简介 |
https://docs.oracle.com/javase/7/docs/api/java/util/Enumeration.html
|
| 实例方法 |
| boolean hasMoreElements() |
|
| E nextElement() |
|
|
| |
|
| Iterator |
| 简介 |
https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
|
| 实例方法 |
| boolean hasNext() |
|
| E next() |
|
| void remove() |
删除返回的最后一个元素 |
| |
|
|
| |
|
| |
|