**第一部分 对象与类**
1、面向对象程序设计
1.1、类之间的关系
在类之间,最常见的关系有:
依赖(“uses-a”)
聚合(“has-a”)
继承(“is-a”)
依赖,即“uses-a”关系,是一种最明显、最常见的关系。如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。
聚合,即“has-a”关系,意味着类A的对象包含类B的对象。
继承,即“is-a”关系,是一种用于表示特殊与一般关系的。
1.2、对象与对象变量
在Java程序设计语言中,使用构造器构造新实例。构造器是一种特殊的方法,用来构造并初始化对象。
2、使用预定义类
2.1、Java类库中的LocalDate类
Date类的实例有一个状态,即特定的时间点。Date类中的时间是用距离一个固定时间点的毫秒数(可正可负)表示的,这个点就是所谓的纪元(epoch),它是UTC时间1970年1月1日00:00:00。
标准Java类库分别包含了两个类:一个是用来表示时间点的Date类;另一个是用来表示大家熟悉的日历表示法的LocalDate类。
不要使用构造器来构造LocalDate类的对象。实际上,应当使用静态工厂方法(factory method)代表你调用构造器。下面的表达式:
LocalDate.now()
会构造一个新对象,表示构造这个对象时的日期。
可以提供年、月和日来构造对应一个特定日期的对象:
LocalDate newYearsEve = LocalDate.of(1999, 12, 31);
一旦有了一个LocalDate对象,可以用方法getYear、getMonthValue和getDayOfMonth得到年、月和日
2.2、封装
类的访问权限
私有方法
final实例域
静态域与静态方法
2.3、工厂方法
静态方法还有一种常见的用途。类似LocalDate和NumberFormat的类使用静态工厂方法(factory method)来构造对象。如NumberFormat类如下使用工厂方法生成不同风格的格式化对象:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
NumberFormat percentFormatter = NumberFormat.getPercentInstance();
为什么NumberFormat类不利用构造器完成这些操作呢?这主要有两个原因:
(1)无法命名构造器。构造器的名字必须与类名相同。但是,这里希望将得到的货币实例和百分比实例采用不用的名字。
(2)当使用构造器时,无法改变所构造的对象类型。而Factory方法将返回一个DecimalFormat类对象,这是NumberFormat的子类。
2.4、方法参数
程序设计语言中有关将参数传递给方法。
按值调用表示方法接收的是调用者提供的值。而按引用调用表示方法接收的是调用者提供的变量地址。
Java中方法参数的使用情况:
(1)一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)
(2)一个方法可以改变一个对象参数的状态
(3)一个方法不能让对象参数引用一个新的对象
3、对象构造
3.1、重载
如果多个方法有相同的名字、不同的参数,便产生了重载。(重载解析)
要完整的描述一个方法,需要指出方法名以及参数类型,这叫做方法的签名(signature)
3.2、默认域初始化
如果在构造器中没有显式的给域赋初值,那么会被自动赋为默认值
3.3、无参数构造器
3.4、显式域初始化
3.5、对象析构与finalize方法
可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。
4、包
**第二部分 继承**
1、类、超类和子类
1.1、子类构造器
看下面一个构造器:
public Manager(String name, double salary, int year, int month, int day) {
super(name, salary, year, month, day);
bonus = 0;
}
这里关键字super具有不同的含义,是“调用超类Employee中含有n、s、year、month和day参数的构造器”的简写形式。
由于Manager类的构造器不能访问Employee类的私有域,所以必须利用Employee类的构造器对这部分私有域进行初始化,我们可以通过super实现对超类构造器的调用。使用super调用构造器的语句必须是子类构造器的第一条语句。
如果子类构造器没有显式地调用超类的构造器,则将自动的调用超类默认(没有参数)的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中又没有显式的调用超类的其他构造器,则Java编译器将报告错误。
注:关键字this有两个用途:一是引用隐式参数,二是调用该类其他的构造器。
同样,super关键字也有两个用途:一是调用超类的方法,二是调用超类的构造器
1.2、多态
在Java程序设计语言中,对象变量是多态的。一个Employee变量既可以引用一个Employee类对象,也可引用一个Employee类的任何一个子类的对象。然而,不能将一个超类的引用赋给子类变量。
方法调用过程的详细描述:
1)编译器查看对象的声明类型和方法名。
2)接下来,编译器将查看调用方法时提供的参数类型,这个过程被称为“重载解析”
3)如果是private方法、static方法、final方法或者构造器,那么编译器将可以准确的知道应该调用哪个方法,我们将这种调用方式称为静态绑定。
4)当程序运行,并且采用动态绑定调用方法时,虚拟机一定调用与x所引用对象的实际类型最合适的那个类的方法。
进行类型转换的唯一原因:在暂时忽视对象的实际类型之后,使用对象的全部功能
总结:只能在继承层次内进行类型转换
在将超类转换成子类之前,应该使用instanceof进行检查
Java四个访问符:
1)仅对本类可见——private
2)对所有类可见——public
3)对本包和所有子类可见——protected
4)对本包可见——默认,不需要修饰符
2、泛型数组列表
3、对象包装器与自动装箱
4、枚举类
public enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE}
5、反射初步
05-30
12-03
04-18
04-18
04-18
04-18
04-18
04-18
04-18
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交