在程序执行期间具有不同的状态而其他方面都相似的对象会被分组到对象的类中, 这就是关键字class的由来
1. 访问控制
| 类 | 包 | 子孙类 | 外部包 |
|---|---|---|---|
| public | √ | √ | √ |
| protected | √ | √ | √ |
| <package> | √ | √ | × |
| private | √ | × | × |
1.1. 访问控制的意义
将程序开发人员按角色划分为类创建者(或者说库设计者, 那些创建新数据类型的程序员)和客户端程序员(那些在其应用中使用数据类型的消费者)
- 让客户端程序员无法触及他们不应该触及的部分.
可以让客户端程序员很容易的看出哪些东西是重要的, 哪些可以忽略. - 允许库设计者可以改变内部的工作方式而不用担心会影响到客户端程序员
2. static 关键字
通常来说, 当创建类时, 就是在描述那个类的对象的外观和行为.
除非用new创建那个类的对象, 否则, 实际上并未获得任何对象.
执行new来创建对象时, 数据存储空间才被分配, 其方法才供外界调用.
有两种情形用上述方法是无法解决的.
一种情形是, 只想为某特定域分配单一存储空间, 而不去考虑究竟要创建多少对象, 甚至根本不创建任何对象.
另一种情形是, 希望某个方法不与包含它的类的任何对象关联在一起.
也就是说, 即使没有创建对象, 也能调用这个方法.
通过static关键字可以满足这两方面的需要.
有些面向对象语言采用类数据和类方法两个术语, 代表哪些数据和方法只是作为整个类, 而不是类的某个特定对象而存在.
3. 类型转换
- 窄化转换
将能容纳更多信息的数据类型转换成无法容纳那么多信息的类型.
这可能面临数据丢失, 所以编译器会强制我们显式的进行类型转换. - 扩展转换
不必显式转换.
新类型一定能容纳原来类型的信息.
4. 构造器
构造器是最常见的方法重载.
5. this关键字
this表示调用方法的那个对象.
如果在方法内部调用同一个类的另一个方法, 就不必使用this, 直接调用即可.
常用在构造器方法重载中:
- 调用this方法, 即在构造器中调用另外一个构造器.此方式必须将构造器调用置于方法最起始位置, 否则编译器会报错.
- 若参数名称与数据成员名称相同, 可以用this明确指定数据成员, 防止产生歧义.
6. super关键字
7. 类的加载
classloader
JIT
8. abstract class & interface
abstract class 和 interface 是支持抽象类定义的 2 种机制.
它俩的异同:
| abstract class | interface |
|---|---|
| 实例化 | 不能 |
9. Resource
- Java编程思想
- 1.
平台相关的目标文件格式是指平台编译出来的 Class 文件无法在其他平台中使用. 相反, 正因为强制, 明确地定义了本来会跟平台相关的细节, 所以才达到了平台无关的效果. ↩