`
TonyLian
  • 浏览: 401466 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
这两天在研究通过Hessian远程连接Java和C#。功能强大而稳定,有着跨平台、集群化优势的Java,就像勤劳勇敢的“牛郎”;极具用户亲和力与体验感、天生与Office系列有着良好关系的.Net,就像美貌的“织女”,这样的强强联手是多么美好呀!但是,只是用户和我们这些人觉得美好,人家MS就不觉得美好。以至于如此有生命力的组合,至今还是隔着银河,很难牵手。Hessian是个好东西(最近国人的PHPRPC也大有后来居上的劲头),所以我正在研究如何让“牛郎”和“织女”尽早“鹊桥会”。以至于这几天的《笔记》有些迟缓了。       有了进展,我会贴出来的,现在还是言归正传,继续今天的《笔记》吧。 ...
《第7章 通用程序设计》   本章主要讨论Java语言的语法细节。和上一章类似,很多条目都同样适用于其他面向对象的开发语言,尤其是类C语言们。     【第29条】将局部变量的作用域最小化       将局部变量的作用域最小化,可以增加代码的可读性和可维护性,并降低出错的可能性。C语言要求局部变量必须声明在代码块的开始处,出于习惯很多人依然这样做。但是现在应该打破这一习惯了。为了使局部变量的作用域最小化,最好的办法就是在第一次使用的时候再声明之。换句话说,就是在你还没有足够的信息初始化一个变量时,应该推迟它的声明。也就是说几乎每一个局部变量的声明都应该包含一个初始化表达式(有些tr ...
   float和double型,的底层实现是二进制的。十进制中的一个有限位数小数,转换成二进制就不一定是有限位数了,一旦位数超过的float和double型的位数宽度,就会出现“精度溢出”。所以float和double型是为了科学计算而设计的,并不适合精确的十进制计算,尤其不适合用来表示货币。       我以前也曾出货类似于为什么 2.0f - 1.9f 的结果不是 0.1f 之类的面试题。原因前面已经说了,其实不管什么语言,只要是标准的单精度浮点和双精度浮点类型的实现,就都存在此问题。VB.Net、C#甚至AS3中的Number型(从精度上看应该是Double)也都如此。      ...
    Java语言的丰富多彩,很大程度上是体现在丰富的类库上的。加之其开源,不计其数的各种第三方包就更不胜枚举。面对这些前人的财富,我们没有理由“装看不见”,而一定是要为我所用的。       第三方包姑且不论,只说JDK中的类库,我们应该掌握。只是到知道都有哪些功能的地步,用的时候可以再细查文档。最怕那些“乃不知有汉”的程序员。       还有一种程序员并非“乃不知有汉”型,而是无视既有的类库,属于“科研”型。其实,通过使用标准类库,你可以充分利用这些编写标准类库的专家的知识,以及在你之前其他人的使用经验。所以,不必浪费时间为那些与你工作关系不大的问题提供特别的解决方案,你应该把时 ...
    Javadoc真是个好东西。它简直太奇妙了,简直就是“懒人乐”。       其实,不仅仅是受“懒人”欢迎,它还有标准化、一元化等其他好处...       那么,懒人们可听好了:为了正确地编写API文档,你必须在每一个被导出的类、接口、构造函数、方法和域声明之前加上文档注释。每一个方法的文档注释应该简洁地描述出它和使用者之间的约定。       具体的@语法,这里就不介绍了。       【Effective Java 学习笔记】系列连载专题请见: http://tonylian.iteye.com/categories/64208
   这一条从题目上即可了解几乎所有信息。虽然简单的没有什么可说的,但它真的非常让我“吃惊”。是呀,这么简单的道理怎么之前从没想过?为什么翻开我的代码,return null; 遍地开花!?      如果非要解释一下原因,那只有一句话:避免给调用者带来过的的保护性检查的麻烦。      那么,我们能否接着推论一下呢? —— 返回一个新new的实例,而不是null。如果从“避免给调用者带来过的的保护性检查的麻烦”,是有益处的,但同时可能会增加数据的传输量,尤其是在不同系统间、网络间。     这条很“简单”,就写这么点儿了       【Effective Java 学习笔 ...
    重载是OO的一个重要特性,然而过度的重载只会带来更多的麻烦。书中一上来就举了一个通过超类与子类类型的参数来重载的例子。       当我们希望根据传入参数的类型来选择重载方法时,由于Java对重载方法的选择是静态的,所以尽量避免通过有继承关系的不同类型来重载。如果一个方法的参数类型(以仅有一个参数为例)是String,而另一个重载的参数类型是int,这样是安全的。而一个是List,另一个是Collection就不安全了。因为重载(overload)方法的选择是静态的,编译时就决定的。与之形成对比的是改写(override)方法的选择是动态的,执行的时候才决定。       有一句 ...
本文我们讨论 Ajax 开发的基础知识,但是将侧重于许多 Java Web 开发人员最关心的问题:为客户机生成数据。 多数 Java 开发人员已经把模型-视图-控制器(MVC)模式应用在他们的 Web 应用程序上。在传统的 Web 应用程序中,视图组 ...
正在研读Joshua Bloch的《Effective Java》一书。书中至少在两条中提到了“优先使用接口而不是类”,一是第25条中的“参数类型优先使用接口而不是类”;另一个是第34条中的“通过接口引用对象”。   两条中所提及的例子一个是Map,一个是List(因为此书的作者就是Collection Framwork的作者)   Map ht = new Hashtable();   String value= doSomething(ht);   private String doSomething(Map pram) {     .....     // 比如这里需要 ...
    本条是一些小的技巧(或者说好习惯)的总结。   1)谨慎选择方法的名字     你选用的名字应该遵循标准命名习惯(见【第38条】),选择易懂的、并和他人保持风格一致的名字。比如用remove还是delete,通过看JDK文档的字母索引你就会发现前者比后者多得多。但是,我还是在一个方法中使用了delete。那是因为它确实是一个对数据表中数据的delete操作方法,而且在java.sql.*中也能见到与DB删除操作相关的方法正式那些数量有限的delete开头的方法。       在以往的项目中,甚至见到一些人喜欢用汉语拼音或日文的罗马字来命名(甚至是命名数据库的表名和字段名!),这 ...
    Java受欢迎的一个重要原因是它是一门安全的语言。它对于缓冲区溢出、数组越界、非法指针以及其他内存破坏错误自动免疫。       但是,这并不是说你可以高枕无忧,正如前面【第5条】中所述的,某些情况下你还是要自行回收过期引用的。现在我们再来说一下你不得不做的“自我防卫”性工作。       【第5条】中的回收过期引用,即使你没有这么做,顶多是浪费一些内存资源。但是,如果本条所述的“自我防卫”工作你没有到位的话,那后果就可能是灾难性的了,而其错误所在往往不容易被发现。        如果一个方法或构造函数允许可变对象进/出,那么就要考虑一下使用者是否有可能改变它。如果是的话,那 ...
《第6章 方法》       方法,或称之为函数,是我们要最常打交道的。这一章讲述了“如何写好方法”,重点是可用性、健壮性和灵活性。这章中介绍的“技巧”都可以作为提高基本功素质的教材。     【第23条】检查参数的有效性       绝大多数方法和构造函数都对传入的参数有某些限制,如索引必须是非负数,对象引用不能是null,等等。如果一个无效的参数传入,应该首先对参数进行检查,如果有问题方法应很快失败,并清楚地抛出一个适当的异常(exception)指明错误的原因。同时应该使用Javadoc的@throws标签来说明。       检查参数有效性的方法和形式可能因具体情况而异 ...
    C语言中的函数指针又叫回调(callback)。是用参数传入一个函数指针,调用函数就可以根据不同的传入参数,实际上调用不同的函数了。       这种回调在ActionScript3语言中就是Function类型,Flex的事件监听器就是一个典型的使用场景。将一个Function类型所表示的函数作为参数传给事件监听器,当此事件发生时,就自动调用这个函数。       在设计模式中的策略模式也是一个典型的应用场景。C语言程序通常使用函数指针来实现策略模式。Java中没有指针,我们可以使用类和接口来替代之。       具体的例子可以看书,也可以看看这位高人写的《设计模式》htt ...
普朗克常数   参考: http://zh.wikipedia.org/w/index.php?title=%E6%99%AE%E6%9C%97%E5%85%8B%E5%B8%B8%E6%95%B0&variant=zh-cn   http://zh.wikipedia.org/wiki/%E9%A9%AC%E5%85%8B%E6%96%AF%C2%B7%E6%99%AE%E6%9C%97%E5%85%8B   http://baike.baidu.com/view/44352.htm   拉格朗日点   参考: http://zh.wikipedia.org ...
要先说明一下:本书写作于2001年,正值作者参与建设JDK1.4的时期。后来到了JDK1.5,Java又将抛弃了多年的enum枚举重拾了起来。所以本条是在没有enum的时候写的。       JDK1.4及以前版本省略了enum。其实enum也是一种struct,我们当 ...
Global site tag (gtag.js) - Google Analytics