`
bingooh
  • 浏览: 52843 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论
文章列表
1.覆盖readObject()检查反序列化对象的有效性,以防止安全攻击。readObject()可视为一个隐藏的构造函数。在此方法里不要直接或间接的调用对象的可覆盖的方法(因为执行这些可覆盖的方法时,子类对象的状态可能还未初始化) 注:原书有说明如何使用序列化注入不安全的对象     2.对于对象控制,优先使用枚举类代替readResolve()方法。比如使用枚举实现单例模式 注:原书有说明如何使用序列化注入不安全的单例对象   3.考虑使用序列化代理设计模式(serialization proxy)实现对象序列化。此模式可以有效的避免通过序列化进行安全攻击等问题,缺点是轻微 ...
对象的序列化机制相当于提供了另一种方式创建对象。也可以理解为如果对象支持序列化,相当于对象声明了一个隐藏的构造函数。如果对象的类结构改变了,那么以前的序列化数据进行反序列化可能导致错误。   默认的序列化将写入对象的“物理内容”。包括对象本身,以及以此对象为根节点,所能访问的所有引用对象。使用默认序列化可能导致的问题有:   1.序列化数据与序列化对象内部引用的对象的API耦合在一起,如果引用对象的API改变,那么反序列化时可能出现错误   2.序列化引用对象将会消耗额外的空间(序列化数据)和时间(序列化过程)   3.在序列化过程中,可能导致内存溢出   因此建议使用自 ...

使用Maven发布项目

本文介绍如何使用maven发布项目到SVN,进而对项目进行版本控制。本文相关概念参考自《Maven最佳实践:版本管理》   使用的开发环境如下(需要确定在命令行窗口里可以运行svn --version; mvn --version命令): maven3.0.5   TortoiseSVN-1.8.1 安装时需要勾选安装svn命令行工具 SVN仓库(SvnRepo) 需自行配置 Maven仓库(MavenRepo) 使用SVN仓库搭建,具体过程可参考《使用SVN搭建Maven仓库》   具体步骤如下: 1.使用TortoiseSVN打开远程SvnR ...
Java的序列机制: 序列化 把JVM里的对象转换为字节数据,此数据可传输给其它应用程序或保存到固定存储(以IO流的方式) 反序列化 把对象序列化的字节数据转换为JVM里的对象   类或其继承的父类只要实现java.io.Serializable接口,其对象即可被序列化。此接口为标记接口,不包含任何方法。如果没有实现此接口,在序列化时会触发NotSerializableException   使用ObjectInput、ObjectOutput可以序列化对象,典型代码如下,需要注意的是输入/输出方法要互相对应: //序列化对象 private void ...
忽略异常指捕获异常对象后不进行任何处理,如下: try{} catch(SomeException e){ //未进行任何处理,异常被忽略 never do this }   以上代码可能导致程序难以调试。在后续的运行中,程序可能在任何一个地方失败等问题。   如果确定此异常是可以被忽略的,那么至少应使用注释进行说明。建议输出一条日志信息
异常失败的原子性指如果调用对象的方法抛出了异常,那么此对象的状态应与抛出异常前相同。即对象状态不因为抛出异常而改变,只有这样,调用者才可能在捕获异常后进行恢复。   保证异常失败的原子性可能的方式包括: 1.执行运算前(这里指执行能够修改对象状态的运算)先检查条件,如检查输入参数值,对象属性。如果不满足条件则触发异常。   2.如果不能检查运算条件,那么应该执行可能触发异常的运算,再执行需要修改对象状态的运算   3.在异常触发后执行修复代码,适用于基于硬盘的数据操作,如文件和数据库   4.复制对象并对其进行运算,如果触发异常不会影响原对象。适用于复制对象不会明显降低性能 ...
异常类构造函数Throwable(String message)可以设置异常详细信息,详细信息里应包含所有引起此异常的方法,参数,属性等的说明。   自定义异常类可以定义引起异常的参数值替代直接设置String类型的异常信息,此方式使异常类更方便使用,如下: public IllegalPeriodException(int start, int end){ //使用输入参数值拼接异常详细信息 super("start: "+start+" is bigger than end:"+end) }   自定义checked e ...
基本原则: 1.使用@throws注释方法抛出的所有checked exception   2.使用throws声明方法可能抛出的所有checked exception   3.尽可能的使用@throws注释方法抛出的所有unchecked exception   4.不要使用throws声明方法可能抛出的unchecked exception   5.不要使用Exception,Throwable声明方法可能抛出的异常类型   6.如果类的所有方法可能抛出同一个异常,那么可以在类的注释里进行说明
处理底层API抛出的异常包括3种方法: 1.上层API先检查输入参数,然后调用下层API以避免触发异常   2.上层API捕获下层API触发的异常后,使用日志进行记录。上层API不触发任何异常   3.上层API捕获下层API触发的异常后,封装为上层API的异常类对象抛出。此方式又称为异常传递链,如下: try{ //.... }catch(LowerLevelException cause){ //下层异常对象作为引起上层异常的cause传递给上层异常对象 //可以调用异常对象的getCause()获取引起此异常的原因 throw new HigherLevel ...
常用异常类包括: IllegalArgumentException 输入参数值不合法 IllegalStateException 对象状态不适合调用当前方法,比如调用某个业务方法时对象还未正常初始化,此时应抛出此异常 NullPointerException 空指针异常 IndexOutOfBoundExcep ...
checked exception要求调用者必须使用try/catch进行捕获,否则编译时会提示错误。假如异常是不可恢复的,或者调用者捕获后只能进行如下处理,那么不要使用checked exception: try{//...} catch(TheCheckedException e){ throw new AssertionError();//无意义的处理 } try{//....} catch(TheCheckedException e){ e.printStackTrace(); System.exit(i);//无意义的处理 }   如果方法仅抛 ...
Java的异常包括checked exception和unchecked exception,后者又包括runtime exception和error。使用基本原则包括: 1.如果异常是可恢复的,那么应使用checked exception。调用者必须使用try/catch捕获checked exception并处理(如果捕获那么编译时会提示错误)   2.如果异常是不可恢复的,那么应使用unchecked exception。其中runtime exception用于表示编程错误,error表示系统错误   3.自定义checked exception应继承Exception类, ...
如下代码错误的使用了异常判断,此种用法难以调试,并且JVM很难对其进行优化: public void sayHello(String[] names){ int i=0; try{ while(true) System.out.println(names[i++]);//never do this }catch(ArrayIndexOutOfBoundsException e){ e.printStackTrace(); } }   正确的用法是: public void sayHello(String[] names){ ...
字面上的命名约定: 包 1.使用域名反写 2.每部分不要超过8个字符 3.不要使用java,javax开头 com.bingo.hello 类型(类,接口,Annotation) 1.首字母大写 2.尽量不要使用缩写 HttpUrl(建议不要使用HTTPURL) 方法和属性 1.首字母小写 2.尽量不要使用缩写 3.JavaBean必须使用getter/setter   常量 全部大写 MIN_VALUE 局部变量 首字母小写  
基本原则包括: 1.努力写出好的程序而不是快的程序,不要为了性能而牺牲程序架构原则。好的程序应尽可能的遵守高内聚,低耦合(information hiding)原则。如果程序模块/层次分明,那么后期可以较轻松的进行性能优化   2.努力避免做出影响性能的设计决定。需要考虑的方面包括:与外部系统的交互,系统内部模块之间的交互,通讯协议,数据格式,API。   3.考虑API设计对性能优化的影响。如:频繁创建不可变类的对象可能影响性能,使用继承会增加耦合度进而影响后期修改。但是不要为了性能优化而使用反常的API,否则后期可能会导致灾难性结果   4.系统开发完成后进行性能测试。如果 ...
Global site tag (gtag.js) - Google Analytics