Android应用开发提高系列(1)——《Practical Java 中文版》读书笔记(上)

 

前言

   从开始学习Android到现在,囫囵吞枣学了许多控件、布局的使用方法和技巧,看了许多相关的文章,也积累了不少项目经验。藉此通过归纳、总结和梳理相关知识,扎实基础,进一步提高Android开发技能。学好Android需要扎实的Java功底,所以将本文作为系列文章的开篇。本系列文章面向有一定Android开发经验的读者,欢迎交流!

 

声明

  欢迎转载,但请保留文章原始出处:) 

    博客园:http://www.cnblogs.com

    农民伯伯: http://over140.cnblogs.com

 

书籍

  《Practical Java 中文版》  03版  侯捷、刘永丹译  

  本书和《Effective Java》,对前述重要而基础的技术细微处有着详尽、深刻、实用的介绍、剖析和范例,又以独立条款之姿展现,在内容的扎实度、可读性及易读性上的表现均十分良好。

  本书围绕Java编程中遇到的实际问题展开。可以说书中所列专题正是那些令许多Java程序员困惑不已的FAQ。作者擅长采用恰如其分的示例来阐释问题,以平时的语言娓娓道出中肯的建议。这些建议往往一语中的,能直接融入编程工作中,可见它们确实是出自作者从实践中获得的真知灼见。

 

正文

  注意:条目和用语可能与书籍有所出入,但尽量保持原样加一些自己的理解。

  一、一般技术

    1.  Java唯一一种参数传递机制:by value(传值)。

    备注:当参数为对象时,以传值方式传递对象的引用。(个人理解:传递指针的拷贝)

 

    2.  对不变的data和object references使用final

    备注:当声明一个对象为final时,不能改变其指向,但能改变其对象的值。

 

    3.  缺省情况下所有非私有(non-private)、非静态(non-static)函数都可被覆写。

      3.1  如果函数不想被子类覆写,将函数声明为final即可。

      3.2  如果类不想被子类覆写,将类声明为final即可,从而禁止覆写该类所有函数。还能提高性能。

 

    4.  在数组和Vectors之间慎重选择。

 

数组

Vector

存储数据类型

基本类型、引用类型

引用类型

元素默认值

Yes

No

自动改变大小

固定不变

动态增长

速度快

Yes

No

     备注: Vector内部实际是以数组实现的。

 

    5.  多态优于instanceof,必要时才使用instanceof。

    备注:例如从父类转型为派生类时,需要使用instanceof。

 

    6.  一旦不需要的对象引用,就将它设为null。

    备注:如果局部变量的引用使用完离函数结束前还需要执行较大代码,可在使用完后设置为null,以便或许能使其在垃圾回收器下次运行时被回收。

 

  二、 对象与相等性

    1.  区别  == 和 equals()

    备注:请使用 == 测试两个基本类型是否完全相同,或测试两个对象引用是否指向同一个对象;使用equals()比较两个对象的内容是否相等。

 

    2.  不要依赖equals()缺省实现

    备注:所有Java对象都隐含继承了java.lang.Object,默认的equals()只是检查对象引用是否指向同一个对象。

 

    3.  实现equals()建议:

      3.1  请检查是否等于this

        备注:测试是否指向同一个对象

      3.2  优先考虑使用getClass()

        备注:getClass()返回某个对象的运行期类(runtime class)。确保只有相同class所产生的对象才有机会被视为相等。范例:

     public  class Base {

        @Override
         public boolean equals(Object obj) {
             if(obj !=  null && getClass() == obj.getClass()){
                 // 继续比较相等性或直接返回true
            }
             return  false;
        }
    }
      3.3  调用super.equals()唤起父类的相关行为

        备注:当你为一个派生类撰写equals()时,你必须检查除java.lang.Object之外所有父类,看看它们是否都实现了equals()。如果有,那么一定要调用super.equals()。

      3.4  在equals()函数中谨慎使用instanceof

        备注:如果允许派生类和父类进行比较,可能要采用instanceof(getClass()会恒返回false)。注意instanceof类似于is-a语义,需要注意位置,即(子类 instanceof 父类 -> 返回true;反之为false)。

 

  三、 异常处理

    1.  认识异常流程机制

      备注:try区段 -> [catch捕获区段][可选] -> finally终结区段。

 

    2.  处理异常

      如果异常产生却未被捕获,发生异常的线程将中断。处理异常:

      a). 捕获并处理它,防止进一步传播。

      b). 捕获并抛出一个新的异常给调用端。

        备注:应确保新抛出的异常包含原异常相关信息,以保证不丢失重要信息。

      c). 不捕获,任其传播给调用端。

      输出错误信息:

      a). 日志文件记录曾经发生过的异常

      b). 输出异常

        输出到标准错误串流:如e.printStackTrace()。

 

    3.  防止出现异常覆盖

      备注:如果在catch或finally区段又抛出了未捕获的异常,新的异常将覆盖try抛出的异常,只有一个异常可被传播到调用段。

 

    4.  throws子句

      备注:提供throws子句的用意在于,提醒函数调用者,告知可能发生的异常。编译器会强迫调用端捕捉这些被列出的异常,所以不要再开发周期的最后才添加。

        如果覆写对象(某个父类函数)没有抛出任何异常,那么覆写函数因为增加了代码而引发异常,那么你必须在新函数中捕捉异常并处理。

 

    5.  使用finally避免资源泄漏

      备注:finally区段代码无论是否发生异常都将执行,尤其适合维护对象内部状态和清理non-memory资源。

 

    6.  使用建议:

      a). 不要从try区段执行return、break或continue语句离开try区段

        备注:如果try区段和finally区段都return 数据,将返回finally区段return的数据。

      b). 将try/catch区段置于循环之外

        备注:异常对代码性能产生负面影响

      c). 不要将异常用于流程控制

      d). 在构造函数中抛出异常

      e). 抛出异常之前将对象恢复为有效状态

        备注:考虑下次执行这段代码时会发生什么事情,代码是否还能正常运行。

 

结束

  预计本系列前几篇文章为《Practical Java》和《Effective Java》的读书笔记,后续内容还在规划当中,也欢迎大家把感兴趣的内容反馈给我作为潜在的系列文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Practical Recommender Systems By 作者: Kim Falk ISBN-10 书号: 1617292702 ISBN-13 书号: 9781617292705 Edition 版本: 1 出版日期: 2019-02-02 pages 页数: (432 ) $49.99 Online recommender systems help users find movies, jobs, restaurants—even romance! There’s an art in combining statistics, demographics, and query terms to achieve results that will delight them. Learn to build a recommender system the right way: it can make or break your application! Practical Recommender Systems explains how recommender systems work and shows how to create and apply them for your site. After covering the basics, you’ll see how to collect user data and produce personalized recommendations. You’ll learn how to use the most popular recommendation algorithms and see examples of them in action on sites like Amazon and Netflix. Finally, the book covers scaling problems and other issues you’ll encounter as your site grows. Recommender systems are everywhere, helping you find everything from movies to jobs, restaurants to hospitals, even romance. Using behavioral and demographic data, these systems make predictions about what users will be most interested in at a particular time, resulting in high-quality, ordered, personalized suggestions. Recommender systems are practically a necessity for keeping your site content current, useful, and interesting to your visitors. What’s inside How to collect and understand user behavior Collaborative and content-based filtering Machine learning algorithms Real-world examples in Python
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值