为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

WebGame服务器Java编码技巧版本1.0.txt

2017-11-14 5页 doc 18KB 11阅读

用户头像

is_036899

暂无简介

举报
WebGame服务器Java编码技巧版本1.0.txtWebGame服务器Java编码技巧版本1.0.txt 一.常用技巧 1.避免使用不易理解的数字,用有意义的常量来代替。 2.不要使用难懂的技巧性很高的语句。 3.在处理String的时候,推荐使用StringBuffer类。 String类将StringBuffer类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用StringBuffer来实现大部分的工作,当工作完成后将StringBuffer对象再转换为需要的String对象。如果用String对象代替St...
WebGame服务器Java编码技巧版本1.0.txt
WebGame服务器Java编码技巧版本1.0.txt 一.常用技巧 1.避免使用不易理解的数字,用有意义的常量来代替。 2.不要使用难懂的技巧性很高的语句。 3.在处理String的时候,推荐使用StringBuffer类。 String类将StringBuffer类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用StringBuffer来实现大部分的工作,当工作完成后将StringBuffer对象再转换为需要的String对象。如果用String对象代替StringBuffer对象的话,会花费许多不必要的创建和释放对象的CPU时间。 ? StringBuffer description = new StringBuffer(); ? description.append(str1).append(str2) .append(str3); ? model.setDescription(description.toString()); × String description = “”; × description = str1 + str2 + str3; × model.setDescription(description); 但是在上述例子中,如果被拼接的对象是静态常量的话,直接使用“+”来拼接会效率更高一些。 4.为了避免死锁,请不要滥用或者使用不必要的synchronized关键字,应该在必要的时候才使用它。 5.在写代码的时候,请考虑性能的问题。但是并不是说要花很多时间在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。 6.内存中的静态集合类要清楚的知道何时清理,否则可能出现内存泄露的情况。 7.避免使用while循环时出现死循环或者长时间无法跳出的情况。 8.对Collection,Map接口的类对象初始化时最好要先分配好合理的空间大小(建议),并且根据自己的需求选择合适的对象,我们常用的集合对象包括ArrayLIist,HashMap,TreeMap,当然还包括Concurrent类库,ConcurrentHashMap,CopyOnWriteArrayList等。 大家调用ArrayList的构造函数时,其源码为: public ArrayList() { this(10); } 9.不要用Timer定时执行任务,因为Timer有很多弊端,其采用单线程方式执行所有的TimeTask,如果某个TimerTask很耗时则会影响到其他TimerTask的执行。另外Timer不会捕获由TimerTask抛出的未检查的异常,故当有异常抛出时,Timer会终止,导致未执行完得TimerTask不再执行,新的TimerTask也不能被调度,最后Timer对调度的支持是基于绝对时间的。 所以我们选择jdk1.5引入的ScheduledThreadPoolExecutor或者ScheduledExecutorService。 10.开发人员慎用线程,除了上面的定时任务执行使用的ScheduledExecutor,因为如果线程不当的话,会造成很大的麻烦。 11.注意优化循环体,循环是重复运行的地方,如果循环次数很大的话,循环体内不好的代码将被放大而突出。 12尽量少用new实例,尽量在使用时再创建该对象,尽量重用对象。如ByteBuffer,每次不要都申请一个空间,而要clear后复用。 13.尽可能的优先使用Jdk提供的API,而不是自己写,如数组复制等,因为一般API都处于了性能的考虑。 14.针对异常处理,一定要调用e.printStackTrace()方法打印堆栈而不是调用e.getMessage()这样的方法。 15.统一用Log4j等log工具而不是用System.out.println()等方法打印调试,非常不方便维护。 16.一定要有缓存的概念,玩家游戏的一个操作都不能直接操作db,都是直接更新缓存中的数据,最常用的缓存就是本地内存。 17.对于DB的处理,大家最好同一规范,都用一个专门的JdbcTemplate或者一个封装数据库操作,接口的facade。 18.慎用反射,反射效率很低。 19.字符串操作很复杂的话,推荐使用强大的正则达式进行处理。 20.到游戏中状态的判断,推荐使用位运算。 21.用统一的序列化接口序列化游戏中的数据。 22.游戏服务器代码中除了注释通常不能出现中文。 23.服务器通讯时能用byte的不用short,能用int的不用String,尽量减少通讯时的数据承载。 24.尽量不要在方法上加synchronized,这样效率会非常低。 25.涉及到到db编码时,原则即"一个东西不能存到两个地方",保证唯一性,避免不一致。 26.时间处理上要统一,统一用秒。 27.数据运算过程中,要注意数据的溢出处理。 28.对Concurrent类库有足够熟悉后才可以使用,不要认为用了就不必同步了。 29.尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快。 30.写代码过程中要结合Junit反复测试,要写测试文档,画UML图等。 二.面向对象设计原则 1.单一职责原则:SRP-single responsibility principle 每个类应该只有一个职责,对外提供一种功能。 2.开闭原则:OCP-open for extendsion,close for modification 对类的改动是通过增加代码进行的,而不是改动现有的代码。 3.里氏替换原则:LSP-liskov substitution principle 在任何出现父类的地方都可以用它的子类来替代;同一个继承体系中的对象应该有共同的行为特征。 4.依赖注入原则:DIP-dependence inversion principle 要依赖于抽象,不要依赖于具体的实现。 5.接口分离原则:ISP-interface segregation principle 不应该强迫客户端程序依赖他们不需要使用的方法,一个接口不需要提供太多的行为。 6.迪米特原则:LOD-law of demeter 降低各个对象之间的耦合,提高系统的可维护性。在模块之间,应该通过接口进行通信, 而不会理会模块的内部的工作原理。 7.优先使用组合而不是继承原则:CARP-composite/aggregate reuse principle 复用对象的时候,优先考虑组合,而不是继承。因为在使用继承时,父类的任何改变都 可能影响子类的行为。 三.附eclipse开发最常用快捷键 Ctrl+L-查找行数 Ctrl+T-查找当前接口的实现类 Ctrl+ShiftO-快速生成import/去掉未使用的import声明 Alt+/-内容辅助 Ctrl+O-显示大纲 Ctrl+/-行注释,取消行注释 Ctrl+D-删除当前行 Ctrl+K-快速向下查找 Ctrl+Shift+K-快速向上查找 Ctrl+Shift+T-查找当前workspace的type Ctrl+Shift+R-查找resource Ctrl+Shift+G-查找类方法和属性的引用 Ctrl+Shift+F-格式化代码 Alt+左右方向键-前进和后退历史 F2-重命名(Alt+Shift+R) F3-快速定位光标位置的类,方法或属性 F4-显示类的继承关系 Ctrl+Shit+/-块注释 Ctrl+Shift+\-取消行注释 Ctrl+1-快速修正 Ctrl+G/Ctrl+鼠标左键-查找当前元素的声明 Ctrl+H-综合搜索 Ctrl+Alt+上下方向键-复制一份代码
/
本文档为【WebGame服务器Java编码技巧版本1.0.txt】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索