Java学习札记

Java学习札记

1)对于ArrayListVectorLinkedListList集合而言,当使用Iterator遍历他们时,如果正在遍历倒数第二个几何元素,使用List集合的remove()方法删除集合的任意一个元素并不会引发ConcurrentModificationException异常, 当正在遍历其他元素时,就会引发该异常。

对于TreeSetHashSetSet集合而言,当使用Iterator遍历他们时,如果正在遍历最后一个几何元素,使用Set集合的remove()方法删除集合的任意一个元素并不会引发ConcurrentModificationException异常, 当正在遍历其他元素时,就会引发该异常。

2)当需要使用字符串,还有ByteShortIntegerFloatDoubleBooleanCharacter等包装类的实例时,程序不应该采用new的方式来创建对象,而应该直接采用直接量来创建它们。如使用String str=”Hello”;而不是String str=new String(“Hello”);

3)对于String类而言,它代表字符串序列不可改变的字符串,因此,如果程序需要一个字符序列会发生改变的字符串,那应该考虑StringBuilderStringBuffer(通常更优先考虑前者)。

4)对String类型的变量,”==”比较两个字符串是否引用同一个实例对象,”equals”则比较两个字符串中对应每个字符是否相等。

5)如果在编译Java程序时提出形如“非法字符:\xxxxx”的错误提示,那么可断该程序中包含全角字符,逐个删除即可。

6)尽量保留循环体的花括号,否则容易出错。dowhilefor不允许循环体语句为单独的局部变量赋值操作(在无花括号情况下会出错)。

6)进行异常捕获时,一定要记住先捕获小的异常,再捕获大的异常。

7) 无论如何不要在finally块中递归调用可能引起异常的方法,因为这将导致该方法的异常不能正常被抛出,甚至StackOverFlow错误也不能终止程序。

8str.getBytes().length - str.length();获取字符串中汉字的数目(无其他特殊字符)

9)静态内部类可以有静态成员,而非静态内部类则不能有静态成员。静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量。非静态内部类的非静态成员可以访问外部类的非静态变量。

10)局部变量前不能放置任何访问修饰符 (privatepublic,和protected)final可以用来修饰局部变量 (final如同abstractstrictfp,都是非访问修饰符,strictfp只能修饰classmethod而非variable)

11)任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final

12)当一个变量被声明为泛型时,只能被实例变量和方法调用,不能被静态变量和方法调用。原因很简单,参数化的泛型是一些实例。静态成员是被类的实例和参数化的类所共享的。所以静态成员不应该有类型参数和它相关联。

13Java程序设计的基本原则

a.面向接口编程

b.优先使用对象组合而非类继承

c.分层   最典型的三层架构:表现层->逻辑层->数据层

表现层:展示数据、人机交互、收集参数调用逻辑层

逻辑层:进行数据与逻辑校验、进行逻辑判断、实现业务功能、处理相关功能、处理后续流程、组织数据返回给表现层

数据层:实现数据持久化、实现对象和持久化数据的双向映射

一定是表现层调用逻辑层,逻辑层调用数据层、不可以反过来。

层间交互也应该通过接口进行调用,以确保各层实现独立变化。

(14)类设计的基本经验

a.类要单一

b.加强内聚,松散耦合

c.好的封装性

d.类的粒度要合理(类一般不超过5000行,方法不超过100行)

e.实现类不能依赖它的使用类

f.应考虑灵活性,也就是可配置(可以通过修改配置文件来选择系统实现的功能)、可维护(设计指标,系统可以很方便地修改已有的功能)

g.要考虑性能,考虑可伸缩性

h.要考虑今后可能的变化,也就是可扩展性

i.要考虑合理的复用

j.要合理地考虑接口和抽象类的使用 优先使用接口,既要约束子类的行为又要为子类提供公共的功能时优先使用抽象类

k.尽量减少类与协作类的交互次数和交互信息的量

l.父类不应该子类的信息,子类必须知道父类的信息

m.访问对象必须通过接口,不能绕过接口直接去实现

 

你可能感兴趣的:(Java相关)