学习笔记-马士兵java-object类、API帮助文档、object类中常用方法、对象转型、多态、抽象类、final关键字、interface接口
1. Object类是所有JAVA类的根基类。
a. 如果在类的声明中未使用extends关键字指明其基类,则默认基类(父类)为Object类。
public class Person {...} 等价于 public class Person extends Object{...}
2. JDK_API文档(官网可下Documentation)查询
3. Object类常用方法:
a. Object clone() 克隆
b. boolean equals(Object obj) 判断是否相等
c. void finalize() 垃圾回收器回收内存前先调用此函数(可用于关闭一些打开的资源)。
d. Object getClass() (涉及反射机制)拿到编译好的class文件。
e. int hashCode() 返回这个对象的哈希编码(哈希编码:可通过哈希编码找到内存的物理位置)。
f. void notify() (涉及线程同步问题,稍后介绍)
g. void notifyAll() (涉及线程同步问题,稍后介绍)
h. String toString() 返回代表这个对象的字符串。
i. void wait() (涉及线程同步问题,稍后介绍)
j. void wait(long timeout) (涉及线程同步问题,稍后介绍)
k. void wait(long timeout, int nanos) (涉及线程同步问题,稍后介绍)
4. toString()方法:
a. Object类中定义有 public String toString()方法,其返回值是String类型,描述当前对象的有关信息。
b. 在进行String与其他类型数据的连接操作时,将自动调用该对象的toString方法。
c. 可根据需要在用户自定义类型中重写toString方法。
d. 默认类的toString方法返回值:类名+哈希编码(建议所有类重写toString方法)。
5. hashcode解释:
a. 针对JAVA虚拟机,在内存中有很多对象,通过hashcode(表)找到内存中对象的地址(但再JAVA中,有可能两个对象不同却有相同的hashcode编码)。
6. equals(Object obj)方法:
a. Object类中定义有:public boolean equals(Object obj)方法 (提供定义对象是否“相等”的逻辑)
b. Object的equals方法 定义为:x.equals(y) 当x和y是同一个对象的应用时返回true否则返回false。
c. J2SDK提供的一些类,如String、Date等,重写了Object的equals方法,调用这些类的equals方法,x.equals(y),当x和y所引用的对象是同一类对象且属性内容相等时(不一定是相同对象),返回true,否则返回false。
d. 可以根据需要在用户自定义类型中重写equals方法。
e. Object提供默认的equals()方法 与“==”等价(必须都指向同一对象,才返回true)。
f. equals(Object obj)方法具有的性质:
⑴ 比较的两个对象都不能为null值。
⑵ reflexive:自反性(a.equals(a)一定为true)。
⑶ symmetric:对称性(如果a.equals(b)为true,则b.equals(a)为false)。
⑷ transitive:传递性(如果a.equals(b)、b.equals(c)为true,则a.equals(c)为true)。
⑸ consistent:连续性 (今天a.equals(b)为true,明天a.equals(b)也为true)。
⑹ 非空值x,x.equals(null) 永远为false。
7. 系统按照classpath指定的顺序寻找class文件(.为当前目录,推荐写在最前)。(使用eclipse再也不会出现此问题)
8. instanceof 操作符:A isstanceof B A是否为B类型
9. 对象转型(casting):
a. 一个基类的引用类型变量可以“指向”其子类的对象(父类引用指向子类对象)。
b. 一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。
c. 可以使用 “引用 变量 instanceof 类名” 来判断该引用类型变量所“指向”的对象是否属于该类或该类的子类(Animal a; a=new Dog(...); a instanceof Animal 【true】; a instanceof Dog【true】; 因为instanceof探测引用实际类型)。
d. 子类的对象可以当做基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。(向下转型需要强制转换,前提父类的引用实际为子类对象)
10. 可扩展性好:后期增加新功能,尽量不要修改程序主结构。
11. 多态(Polymoph,又叫动态绑定或迟绑定):
a. 动态绑定(多态)指“在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法”。
b. (属性在new对象时就分配内存空间,方法在调用时动态分配内存)当父类引用指向子类对象,调用重写方法时,调用实际(子类)对象的重写方法。(在父类对象中有个指针,指向父类对应的方法,在new子类时,指针动态指向子类重写的方法)
c. 多态三个必要条件:
⑴ 要有继承;
⑵ 要有重写;
⑶ 父类引用指向子类对象。
d. 多态使程序可扩展性达到极致(面向对象编程的流行,多态极致起到至关重要的作用)。
e. 多态重要设计思想 :游戏中首先创建GameObject 类(有draw()方法),所有游戏元素从GameObject类继承,当有新的游戏元素加入时,不用判断其类型(利用多态)可画出自己。
12. 抽象类:
a. 用abstract关键字来修饰一个类时,这个类叫做抽象类。
b. 用abstract来修饰一个方法时,该方法叫做抽象方法。
c. 含有抽象方法的类必须被声明为抽象类。
d. 抽象类必须被继承。
e. 抽象方法必须被重写。
f. 抽象类不能被实例化(无法创建对象)。
g. 抽象方法只需声明,而不需实现。
h. 抽象方法不需要{},例如:public abstract void enjoy(); (相当于C++的虚函数)
13. final 关键字(只读):
a. final 的变量的值不能够被改变。
⑴ final 的成员变量;
⑵ final 的局部变量(形参);
b. final 的方法不能够被重写。
c. final 的类不能够重写。
d. 系统提供的final 类:String类、Math类、Boolean类……
14. 接口(interface):
a. 多个无关的类可以实现同一个接口。
b. 一个类可以实现多个无关的接口。
c. 与集成关系类似,接口与实现类之间存在多态性。
d. 定义JAVA类的语法格式:<modifier>class<name>[extends<superclass>][implements<interface>[,<interface>]*] {<declarations>*}
e. 接口(interface)定义:是抽象方法和常量值的定义 集合。
f. (从本质上讲)接口是一种特殊的抽象类,抽象类中只包含(static、final)常量和(abstract)方法的定义。
g. 接口中的所有方法均默认为 abstract(所以可以省略abstract),也只能是 abstract 的。
h. 接口可以多重实现。
i. 接口中的属性默认为 public static final 的(所以可以省略不写),也只能是 public static final 的。
j. 接口中只能定义抽象方法,而且这些方法默认为 public 的,也只能是 public 的。
k. 接口可以继承其他接口,并添加新的属性和抽象方法。
f. implements(实现)关键字:用于实现接口。
补充说明:当实现多个接口中有重复方法,且重复方法返回值不一致,则无法实现。

浙公网安备 33010602011771号