Profilo di 贤达Daniel the creepFotoBlogElenchiAltro ![]() | Guida |
|
|
18 luglio 笔记一:BETTER JAVA找到以前看林锐那本书的Java笔记,整理了一下,内容很简略,不过每次看都觉得值得再看一遍,分享一下^-^。以后继续有其它笔记
1. 异常 异常有两种,一种是类库内置的检查,一种是程序包创建的检查。 异常使用的时机:必须是偶然性的事件才可使用异常,即是大频度出现的错误不应使用异常 替代异常处理的方法有:使用特殊返回值;使用前导检查(如下) 使用不需查异常强化方法的约定:不实现该方法使用UnsupportedOperationException;检查参数用IllegalArgumentException及NullPointerException 需查异常与不需查异常:前者不从RuntimeException继承,必须在抛出异常的方法中进行catch或声明为throws;后者从RuntimeException继承,不必声明为throws也不应在抛出的方法中catch 不要在finally中抛出任何异常 要使用链式异常保留初始异常信息
* 构造函数抛出异常时对象不被创建,但不回滚抛出前的操作 * 系统级异常从Error继承,不必处理,也不应使用 * finally是释放非内存资源的最佳场所
2. 内存管理 减少中间对象:用StringBuffer代替迭代使用的String;使用parseDouble(…) 手工清除短期对象的引用:将引用指向null;创建弱引用 内存泄漏:指JVM之外的内存分配,可达但不再使用的对象 解决内存泄漏:及时释放对对象的引用
* 引用类型:强引用、软引用(SoftReference)、弱引用(WeakReference)、幻引用(PhantomReference);后三个为Reference的子类 * 拷贝数组:System.arrayCopy(Object[] arc, int index1, Object[] dest, int index2, int len)
3. 面向对象设计 对象的设计:类的设计;类之间关系的设计 类的设计:方法(重载、覆盖);域 类之间关系的设计(体系结构设计):接口(方法继承);继承(方法优先);组合(域优先) 不涉及实现时用接口代替抽象类:接口只定义功能;抽象类包括提供部分实现 不要同时使用重载和覆盖:重载在编译期起作用;覆盖在运行期起作用;同时使用使代码难以理解 继承和组合的选择:需要重用方法时用继承,体现分类关系;需要共享数据时用组合,体现包含关系 组成和聚集的区别:组成对成分对象有依赖性,其成分对象是唯一的,权限受控制的,异构的,对组成对象使用消息转发操作;聚集的构成对象是同构的,可共享的,聚集本身可为空,对构成对象使用遍历操作 避免方法的副作用:分离动作和查询;设计不可变类 不可变类:不提供修改对象的方法,不能被继承,域是私有而且final的,其动作方法的参数是const的 重构的时机及目标:先写出正确程序然后进行重构,重构后作单元测试;目标是在新要求出现时可通过重构继续扩展设计 如何描述体系结构:构成元素的描述;元素间交互的描述;组合模式及模式的限制;可使用包图、配置图……
* 两个对象用equals()比较相等时hashCode()也应返回相等的整数;因此在覆盖equals()同时应覆盖hashCode()
4. 集合 核心接口:Collection(List;Set);Map List:ArrayList;LinkedList Set:HashSet;TreeSet;LinkedHashSet Map:HashMap;TreeMap;LinkedHashMap 使用集合时的选择:尽量使用接口,并针对不同的实现进行性能测试 支持快速访问:HashSet;HashMap 支持自动排序:TreeSet;TreeMap 保持插入顺序:LinkedHashSet;LinkedHashMap 支持快速随机访问:ArrayList 支持快速增删:LinkedList 排序:Collections.sort(List);Collections.sort(List, Comparator);Collections.reverseOrder()为Comparator接口的一个反序实现 几个封装:线程安全synchronized;不可变unmodifiable;单件singleton 不可变的空集合:Collections.EMPTY_LIST;Collections.EMPTY_SET;Collections.EMPTY_MAP;常用于参数、返回值
* RandomAccess:该接口用于标记快速访问内部对象的集合 * 集合类的clone()方法及Collections.copy()只提供浅拷贝 * Collections.reverse():求逆 * Collections.nCopies(int n, Object o):返回不可变的n个o的List
5. 性能调整 减少创建对象:使用对象池、数据库连接池、单件;使用原始类型的对象;使用后期初始化 优化执行代码:减少循环体中函数调用、数组操作、异常捕捉;不使用函数体作为循环条件;用System.arrayCopy()拷贝数组;能用==则不用equals();尽量不使用递归 减少IO时间:将多个小IO合成批量IO;大文件分段并行处理;减少输出信息(考虑使用断言);不要让程序等待IO(IO时响应其它动作) JDBC Connection的优化:连接池;不使用时显式关闭 JDBC Statement的优化:选择适当接口,少使用存储过程;批量执行,批量获取数据;使用DBMS组织数据 JDBC ResultSet的优化:批量读取;设定适当滚动方向;使用最匹配类型进行get/set;get/set时用整数代替字段名
* 对象池的接口:ObjectPool; ObjectPoolFactory;PoolableObjectFactory;KeyedObjectPool;KeyedObjectPoolFactory;KeyedPoolableObjectFactory * 批量执行和获取:addBatch();executeBatch();getFetchSize();setFetchSize() * 获取方向:setFetchDirection( FETCH_FORWARD / FETCH_BACKWARD / FETCH_UNKNOWN ) 其实看完这本书之后俺没再使用过Java,之前使用得也不多,但Java的很多思想对C++程序员及OOA、OOD人员(etc...)是很有帮助的。(……嗯,真是废话) 23 marzo 使用教育网用回教育网,感觉真不错,正在下载FC2-x86_64,虽然只有几十K的速度,但已经很满足了,呵呵,公网哪这么容易下这样的东东啊…… 送上一首Only You,Portishead在New York的Live作品,不知道公网速度如何,应该很流畅~~ 算来已经换了不少经典歌曲作背景音乐了,找个时间全部收录一下列出来。 12 febbraio (转载)Borland将出售旗下IDE业务,包括Delphi和Jbuilderhttp://www.matrix.org.cn/resource/news/501_Borland+IDE.htmladmin 发表于2006-02-10作者:matrix 来自:Borland 评论数:19 点击数:807 摘要:今天,2006年2月8日,星期三,太平洋时间凌晨1点,在副总裁David I致开发者社区的一份信中提到,Borland宣布为他的IDE产品线寻求买主。将要出售的产品线包括Delphi, C++Builder, C#Builder, JBuilder(含Peloton), InterBase, JDataStore, nDataStore, Kylix。今天,2006年2月8日,星期三,太平洋时间凌晨1点,在副总裁David I致开发者社区的一份信中提到,Borland宣布为他的IDE产品线寻求买主。 将要出售的产品线包括Delphi, C++Builder, C#Builder, JBuilder(含Peloton), InterBase, JDataStore, nDataStore, Kylix, 以及早期的Borland及Turbo语言产品和工具。 Borland 官方表示,他们将会把更多的精力投入到ALM工具市场。自从04年来由IBM所领导的开源 IDE Eclipse 所掀起的开源工具热潮逐渐的挤压着Borland的开发工具市场。 实际上,Jbuilder在市场上几乎完全被迅猛发展的Eclipse击溃,况且还有Netbeans和Ideaj在后面虎视耽耽。 一位来自Gartner的分析师说:“我认为 Borland 没能抵挡住 Eclipse的成功,而仅仅是在历史的开发工具市场取得了成绩。” Serena Software 表示:“转型后的Borland 同样会面临激烈的竞争,例如Serena Software, Compuware 和 Mercury Interactive 等. 但是从今天的新闻可以看出Borland做了正确的决定,作为市场的演变,转向软件开发周期管理是必要的也是用户的需求。” Borland终于要离去了,这位曾经辉煌的IDE巨人。 我们希望Borland能够重整旗鼓,也希望Delphi阵营不会被完全打乱。正如Borland 副总裁David I 说的:“泪水将离开我的眼睛,而微笑将留在我的脸上“。 27 novembre 谈论转载 界面设计规范好像只转了一部分,自己点下面的链接进去看全文吧 引用 转载 界面设计规范 28 ottobre 在Linux下创建DB2实例的SQL6048N错误的一种解决办法第一篇技术文章 新安装的redflag上,在一堆groupadd和useradd之后使用以下命令创建DB2实例 /opt/IBM/db2/V8.1/instance/db2icrt -u db2fenc1 db2inst1 出现错误,日志文件中发现SQL6048N错误。 网上搜索好像只有一个相同的情况,那位老兄最后一次回自己帖子的时候说是主机名解析出了问题。 后来试了一下,在/etc/hosts中添加主机名和IP后,创建实例成功 可能没弄过的人不知道我说什么,不过真遇到这个问题的话上来看一看吧,可能网上就这么一个solution了 |
|
|