首页 > 代码库 > java编程思想

java编程思想

  1. 构造函数不具有多态性,它们实际上static方法,该static是隐式声明
  2. 对象具有状态、行为和标识。这意味着每一个对象都可以拥有内部数据(它给出了该对象的状态)和方法(方法产生行为),并且每一个对象都可以唯一的与其他对象区分开来,具体来说,就是们每个对象在内存中都有一个唯一的地址
  3. java中,一切都被视为对象,因此可以采用单一固定的语法。尽管一切都看做对象,但操纵的标识符实际上是对象的一个“引用”
  4. finalize()用途:垃圾回收只与内存有关,即使用垃圾回收器的唯一原因是为了回收程序中不再使用的内存。所以对垃圾回收有关的任何行为来说(尤其是finalize()方法),它们也必须同内存及其回收有关。
  5. 无论是垃圾回收还是终结,都不保证一定会发生。如果是java虚拟机并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收以修复内存的。
  6. 基类(父类)和导出类(子类)的构建过程是从“基类”向外扩散的,所以基类在导出类访问它之前就已经完成了初始化。即使你不为子类创建构造器,编译器也会为你合成一个默认的构造器,该构造器将调用积累的构造器。
  7. 组合技术(has-a)通常用于在新类中使用现有类的功能而非它的接口这种情形。即在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类定义的接口,而非所嵌入对象的接口。为取得此效果,需要在新类中嵌入一个现有类的private对象
  8. protected关键字:就类用户而言,这是private的,但对于任何继承于此类的导出类(子类)或其他任何位于同一个包内的类来说,它是可以访问的。
  9. java中所有方法都是通过动态绑定实现多态。动态绑定也叫运行时绑定,是指在运行时根据对象的类型进行绑定。
  10. 多态是一项让程序员“将改变的事物与为改变的事物分离开来”的重要技术。如果某个方法是静态的,它的行为就不具有多态性。
  11. 复杂对象调用构造器的顺序:A.调用基类构造器。这个步骤会不断反复递归下去,首先是构造这种层次结构的根,然后是下一层导出类(子类),等等,知道最低层的导出类(子类)B.按声明顺序调用成员的初始化方法C.调用导出类构造器的主体
  12. 编写构造器时有一条有效的准则:用尽可能简单的方法使对象进入正常状态,如果可以的话,避免调用其他方法。在构造器内唯一能够安全调用的方法是基类中的final方法(也适用于private方法,它们自动属于final方法)
  13. 一条通用的准则是:用继承表达行为间的差异,并用字段表达状态上的变化。通过继承得到了两个不同的类,用于表达act()方法的差异,而Stage通过运用组合使自己的状态发生变化。在这种情况下,这种状态的改变也就产生了行为的改变。
  14. 创建一个能够根据传递参数对象的不同而具有不同的方法称为策略设计模式。这类方法包含所要执行的算法中固定不变的成分,而“策略”包含所要变化的部分。策略就是传递进去的参数对象,它包含所要执行的代码。
  15. 适配器设计模式:适配器中的代码将接受你所拥有的接口,并产生你所需要的接口。
  16. 使用接口的核心原因:为了能够向上转为多个基类型(以及由此而带来的灵活性);防止客户端程序员创建该类的对象,并确保这仅仅是建立一个接口。
  17. 如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象,那么必须具体指明这个对象的类型:OuterClassName.InnerClassName。内部类可以访问外部类对象的所有成员,而不需要任何特殊条件。此外内部类还有外部类所有元素的访问权
  18. ArrayList,LinkedList,LinkedHashSet,LinkedHashMap都是按存储顺序保存集合对象
  19. 多态是面向对象编程的基本目标。运行时类型信息使得你可以在程序运行时发现和使用类型信息。
  20. java的基本理念是”结构不佳的代码不能运行”
  21. 异常情形是指阻止当前方法或作用域继续执行的问题。异常情形和普通问题的区分很重要:普通问题是指当前环境下能够得到足够多的信息,总能处理这个错误;对于异常情形就不能继续下去了,因为在当前环境下无法获得必要的信息解决问题。你所能做的就是从当前环境中跳出,并把问题交给上一级环境,这就是抛出异常时发生的事情。
  22. 正则表达式:-?\\d+表示可能有一个负号,后面跟着一位或多位数字;“(-|\\+)?\\d+”表示可能以一个加号或减号开头,后面跟着一位或多位数字;\W表示非单词字符,\w表示单词字符,二者唯一的区别是w大小写不同;n\\W表示字母n后边跟着非单词字符
  23. Class对象仅在需要的时候才被加载,static初始化是在类加载时进行的。使用Class.forName(String s)方法获取类的类型对象时,参数必须填写包名和类名;java还提供另一种方法获取Class对象的引用,即类名.class(类字面常量),该种方法更安全,因为在编译时即会受到检查,因此不需要置于try块中。使用.class方法获取对类的引用不会引发初始化,使用Class.forName()方法则会引发初始化。
  24. Class引用总是指向某个Class对象,它克制制造某个类的实例,并包含可作用于这些实例的所有方法代码。它还包含该类的静态成员,因此,Class表示的就是它所指向的对象的确切类型,而该对象就是Class类的一个对象,如下的两种写法都是正确的:Class intClass=int.class;Class<Integer> genericIntClass=int.class;genericIntClass=Integer.class;
  25. 代理是基本的设计模式之一,它是你为了提供额外的或不同的操作,而插入的用来代替“实际”对象的对象。这些操作通常涉及与“实际”对象的通信,因此代理通常充当着中间人的角色。
  26. 数组与其他容器的区别有三方面:效率、类型和保存基本类型的能力。数组是一种效率最高的存储和随机访问对象引用序列的方式。数组是一个简单的线性序列,这使得元素访问非常快。但是为这种速度付出的代价是数组对象的大小被固定并且在其生命周期不可改变。

27.泛型和多态并不冲突。

java编程思想