学习笔记-马士兵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(实现)关键字:用于实现接口。

 补充说明:当实现多个接口中有重复方法,且重复方法返回值不一致,则无法实现。

posted @ 2013-10-13 00:28  被盗的小偷  阅读(230)  评论(0)    收藏  举报