1、关于java语言中Object中的toString方法:SUN在Object类中设计toString方法的目的是为了返回java对象的字符串表示形式,在现实的开发过程中,Object里边的toString方法已经不够用,因为对Object的toString方法实现的结果不满意,Object中的toString方法就是用来在子类中重写。(根据项目的需求而定来重写)。需要注意的是,print方法后面的括号中如果是一个引用类型,会默认调用引用类型的toString方法。(toString方法表示“类 + @ + java对象的内存地址经过哈希算法得出的int类型值再转换成十六进制形式”,这个输出结果可以等同看待java对象在堆中的内存地址。)

  • 关于java语言中Object中的equals方法:比较的是两个引用的内存的地址,java对象中的equals方法的设计目的在于判断两个对象是否一致。在现实的业务逻辑当中,不应该比较内存地址,应该比较内容。所以Object中的equals方法也要重写。(根据需求规定重写equals方法,如需求规定:如果×××号一致,并且名字也一致,则代表同一个人)
  • 关于java语言中如何比较两个字符串是否一致:String类已经重写了Object中的equals方法,比较的是内容。(在java中比较两个字符串是否一致,不能使用“==”号,“==”比较的是两个String对象的内存地址。)
  • 垃圾回收器(Garbage Collection,也叫做GC),需要注意的的是,GC针对的是堆内存,GC在后台中运行,我们无法命令垃圾回收器马上回收资源(所以当程序运行结束时,可能堆内存中的垃圾有些还是没有回收。),但是我们可以告诉它,尽快回收资源。(System.gc()和Runtime.getRuntime().gc())
  • 关于Object中的finalize方法:finalize方法是每个java对象都有,不需要程序员调用,由系统自动调用,java对象如果没有更多地引用指向它,则该java对象成为垃圾数据,等待垃圾回收器的回收,垃圾回收器在回收这个java对象之前会自动调用该对象的finalize方法。(finalize方法是该对象马上就要回收之前需要做的事情,类似现实世界中人临终时写的遗嘱。例如:需要释放资源,则可以在该方法中释放。)可以重写Object中的finalize方法。需要注意的是,程序员只能“建议”垃圾回收器回收资源(System.gc()),但是GC采纳不采纳就不一定。
  • Object中的hashCode方法:返回的是该对象的哈希码值。哈希码值是java对象的内存地址经过哈希算法得出的int类型的数值。

2、软件包机制为了解决类的命名冲突问题,在类名前加命名空间(包机制),在java中使用package语句来定义包(单包,复包),package语句只能出现在源文件的第一行,package定义的格式,通常采用公司域名倒叙的方式。(package定义的全格式:公司域名倒叙.项目名.模块名),完整的类名是带有包名的。

  • 带有package语句的java源文件必须这样编译:java -d 生成路径 java源文件路径。(-d表示directory,即生成路径)(生成路径可以是“.”,表示生成的class文件保存在当前目录下。(带有和包名(以“.”作为区分)相匹配的目录))
  • 需要注意,带package语句的class文件要运行,要加上package包名。

3、import语句可以引入其他类,import语句只能出现在package语句之下,class定义的语句之上。

  • java.lang;软件包下所有的类不需要手动带入,系统会自动导入。

4、关于访问控制权限修饰符:修饰类、修饰方法、修饰变量。包括private(只能在本类中访问)、public(可以在任何位置都能访问)、protected(本类中、同一个包下(不同包下不行,但是子类中可以))、缺省(本类中、同一个包下(不同包下不行))。

  • 需要注意,类只能使用缺省或者public修饰。

5、静态内部类:可以等同看作静态变量,语法:在类的内部定义,访问控制权限修饰符 + class + 类名{}。(可以使用访问控制权限的修饰符修饰)

  • 静态内部类重要的作用:可以直接访问外部类的静态数据,无法访问成员。(内部类可以访问外部类中私有的数据)
  • 可以使用(外部类名 + "." + 内部类名 + "." + 静态方法)来调用内部类中的静态方法;如果使用静态内部类中的成员方法,则需要创建静态内部类对象(即 new OuterClass.InnerClass();),然后通过静态内部类对象调用静态内部类中的成员方法。

6、成员内部类:成员内部类可以等同看作成员变量。语法为:在类的内部,class InnerClass{}

  • 成员内部类中不能有静态声明。(public static void m(){})(可以使用访问控制权限修饰符修饰)
  • 需要先创建外部类对象,才能够创建成员内部类对象。如:OuterClass oc = new OuterClass();InnerClass inner = oc.new InnerClass(); inner.m();(可以直接访问外部类的静态数据,也可以访问成员数据。)

7、局部内部类可以等同于看作局部变量。局部内部类(方法中)不能使用访问控制权限修饰符修饰。

  • 局部内部类中不能有静态声明(public static void m(){}),局部内部类在访问方法中局部变量的时候,局部变量必须使用final修饰。
  • 只能在方法中创建局部内部类对象,然后使用局部内部类对象调用局部内部类中的方法。

8、匿名内部类指的是类没有名字。(假设CustomerService是一个接口,new CustomerService(){}则是指创建一个匿名内部类。)

  • 匿名内部类的优点:少定义一个类。
  • 匿名内部类的缺点:无法重复使用。

9、泛化关系,类和类之间的继承关系以及接口和接口之间的继承。


10、实现关系,类与接口之间的关系。 11、关联关系:类与类之间的连接,一个类可以知道另一个类的属性和方法,在java语言中使用成员变量体现,即在当前类中含有其他类的引用,在当前对象中含有指向其他对象的引用。(比如现实世界中朋友与朋友之间的关系)

  • 单项关联,表示在Me类中包含一个Friend的成员变量,通过Me类对象可以知道与其关联的Friend类对象的方法和属性。

12、聚合关系:是关联关系的一种,是较强的关联关系,是整体和部分的关联关系,比如:汽车和轮胎,它与关联关系不同,关联关系的类处在同一个层次上,而聚合关系的类处在不平等的层次上,一个代表整体,一个代表部分,在java语言中使用实例变量体现。

  • 聚合关系中,整体不依赖部分,部分也不会依赖整体,整体无法决定部分的生命周期。

13、合成关系:和聚合关系相似,区别的地方在于整体和部分是紧密相连的,整体生命周期决定部分的生命周期。


14、依赖关系:依赖关系是比关联关系弱的关系,在java语言中体现在返回值,参数,局部变量和静态方法调用。 15、is-a(泛化关系)、has-a (关联关系)、is-like-a(实现关系)。