Core Java笔记 1.对象与类
本章重点:
- 面向对象程序设计
- 使用现有Java类
- 自定义类
面向对象程序设计
面向对象核心概念:
class
instance(instance fields, method, constructor)
面向对象的三个特征:
- encapsulation
- inheritance
- polymorphism
类之间的关系:
- 依赖(uses-a): 减少类之间耦合。
- 聚合(has-a)
- 继承(is-a)
使用现有类
构造器、new关键字、getter/setter(accessor/mutator method)
自定义类
最简单的类定义形式
class ClassName {
constructor1
constructor2
...
method1
method2
...
field1
field2
}
多个源文件的使用
Employee.java、EmployeeTest.java。EmpolyeeTest.java依赖Employee.java:javac EmployeeTest.java
即可。
原理:java编译器发现EmployeeTest.java使用了Employee类时会查找Employee.class的文件,如果没有找到这个文件或者Employee.java比Employee.class新,就会自动搜索Employee.java,然后对它编译。
简要剖析java类:
- java访问权限: public、protected、private、default
- java constructor
- 方法的implicit参数和explicit参数(this就是implicit参数)
- private fields && accessor, mutator
基于类的访问权限:方法可以访问所属类的私有特征(包括private fields和private methods)- final
通常final应用于类的primitive or immutable class(不可变类)类型的fields。比如: String就是一个immutable class, 而Date就不是immutable class
static
静态域: private static int nextId = 1;
静态常量: private static final int PI = 3.14;
静态方法: Math.pow(x, a);
静态方法有一个常见的用途:Factory方法
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
NumberFormat percentFormatter = NumberFormat.getPercentInstance();
String currency = currencyFormatter.format(0.1);
String percent = currencyFormatter.format(0.1);
Factory方法的两个原因:
- 无法命名构造器.
- 当使用构造器时,无法改变所构造的对象类型,而Factory方法可以返回该类的子类实例.
对象构造
- overloading. Java允许重载任何方法,包括构造器.
- 默认构造器. 如果一个类没有一个显式构造器,系统会生成一个默认构造器,所有的实例域会被设置成默认值,最好不要使用默认构造器.
- 域显式初始化.
- 调用另一个构造器(this(...)).
- java可以在三个地方初始化fields:构造器、声明中、初始化块(initialization block).
初始化对象域的步骤:
- 所有数据域被初始化默认值(0, false, null).
- 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块.
- 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体.
- 执行这个构造器的主体.
类设计技巧
- 一定将数据设计为private.
- 一定要对数据初始化.
- 将职能过多的类进行拆分.
- 类名和方法名能够体现它们的职责.