1).如果你曾经学习过第二种语言,并尝试在课堂之外使用这种语言,那么你该知道有三件事情是必须掌握的:
1. 这门语言的结构如何(语法)
2. 如何命名你想谈论的事物(词汇)
3. 如何用习惯和高效的方式来表达事物(用法)
在课堂山只是涉及到前面两点,而当你努力使对方明白你的意思的时候,你常常发现当地人对你的表述忍俊不禁!
对于程序设计语言,也是如此。你需要理解语言的核心:它是面向算法的,还是面向函数的,或者是面向对象的? 你需要知道词汇表:标准库提供了那些数据结构、操作和功能设施? 你还需要熟悉如何用习惯和高效的方式来构建代码。关于程序设计语言的书籍通常只是涉及到前面亮点,或者只是蜻蜓点水般地介绍一下用法。也许原因在于,前面亮点更加容易编写。语法和词汇是语言本身固有的特性,但是用法则反映了使用这门语言的群体的特性。
-- Guy Steele ,Sun研究院的杰出工程师,程序涉及语言领域的世界级 专家,Scheme语言的设计者之一.
2)记住:多使用Map entrySet()和valueSet()方法而不是使用keySet()方法.
3)要想区别一个设计良好的模块与一个设计不好的模块,最重要的因素是,这个模块对于外部的其他模块而言,是否隐藏了内部的数据和其他的实现细节。一个设计良好的模块会隐藏所有的实现细节,把它的API与实现清晰地隔离开来。
然后,模块之间只通过它们的API进行通信,一个模块不需要知道其他模块的内部工作情况。这个概念被称为信息隐藏 或 封装,是软件设计的基本原则之一.
4) 静态成员类 非静态成员类 匿名类 局部类 (后三种称为内部类)
优先考虑静态成员类,静态成员类的一种通常用法是作为公有的辅助类,仅当与它的外部类一起使用时才有意义;
非静态成员类的每一个实例都隐含着与外围类的一个外围实例紧密关联在一起,在非静态成员类的实例方法内部,调用外围实例上的方法是有可能的,或者使用经过修饰的this也可以得到一个外围实例的引用;
如果一个嵌套类的实例可以在它的外围类的实例之外独立存在,那么这个嵌套类不可能是一个非静态成员类:在没有外围实例的情况下要想创建非静态成员类的实例是不可能的;
当匪静态成员类的实例被创建的时候,它和外围实例之间的关联也随之被建立起来,而且,这种关系以后不能被修改,参见Map.Entry;
如果你声明的成员类不要求访问外围实例,那么请记住把static修饰符放到成员类的声明中,如果你省略了static,则每个实例都将包含一个额外的指向外围对象的引用,维护这份引用要消耗时间和空间,但有没有相应的好处;
私有静态成员类的一种通常用法是用来代表外围类对象的组件,考虑一个Map实例,它吧键(key) 和 值(value)关联起来,Map实例内部通常有一个Entry对象对应于Map中的每一个键-值对;
## 匿名类
匿名类的一个通常用法是创建一个函数对象(functional object):
Arrays.sort(args, new Comparator(){
public int compare(Object o1,Object o2)..
}
匿名类的另一个常见用法是创建一个过程对象(process object),比如Runnable ,Thread ,TimerTask实例
第三个用法是在一个静态工厂方法的内部
第四种用法是在复杂的类型安全枚举类型中,用于公有的静态final域的初始化器中
四种嵌套类使用总结:
如果一个嵌套类需要在单个方法之外仍然是可见的,或者它太长了,不适合放在一个方法id内部,那么应该使用成员类
如果成员类的每一个实例都需要一个指向其它外围实例的引用,则把成员类做成非静态的,否则就做成静态的
假设一个嵌套类属于一个方法的内部,如果你只需要在一个地方创建它的实例,并且已经有了一个预先存在的类型可以说明这个类的特征,则把它做成匿名类;否则就做成局部类。
Tip: 对于重载方法(overloaded method)的选择是静态的,而对于改写的方法(overridden method)的选择是动态的。对于被改写的方法,选择正确的版本是在运行时刻进行的,选择的依据是被调用方法所在对象的运行时类型。
Tip: 因为改写机制是规范,而重载机制是例外,所以,改写机制满足了人们对于方法调用行为的期望。一个安全而保守的策略是:永远不要导出两个具有相同参数数目的重载方法。
## 常用命名规则
run call enable/disable
返回不同类型的独立对象的方法:toType: toString toArray
返回一个试图,试图的类型不同于接收对象的类型的方法:asType :asList ,asMap
返回一个与被调用对象同值的原语类型的方法,一般命名为:typeValue :intValue booleanValue
静态工厂的常用名字为valueOf 或者 getInstance
Tip 最常用的可重用异常:
IllegalArgumentException 参数的值不合适
IllegalStateException 对于这个方法调用而言,对象状态不合适
NullPointerException 在Null被禁止的情况下参数为null
IndexOutOfBoundException 下标越界
ConcurrentModificationException 在禁止并发修改的情况下,对象检测到并发修改
UnsupportedOperationException 对象不支持客户请求的方法
总结一条规则:作为方法规范的一部分,任何一个异常都不应该改变对象调用该方法之前的状态。如果这条规则被违反,则API文档应该清楚地之指明对象将会处于什么样的状态。
- 职业生涯
- 如何提升你的能力?给年轻程序员的几条建议
- 那些年,那些事
- 阿里巴巴离职DBA 35岁总结的职业生涯
- 人生的四种选择
- 程序人生的四个象限和两条主线
- 几缕代码与闲思
- 张小龙-学习笔记
- Web前端
- 移动Web手册
- 精通CSS: 高级Web标准解决方案
- 悟透JavaScript
- 架构设计
- 大型网站技术架构
- 周爱民-大道至简
- RESTful Web Services Cookbook - 读书笔记
- 大话设计模式
- Unix编程艺术
- 把程序员修炼之道读薄
- 学习能力
- 奇特的一生:读书笔记
- zhh-看源码那些事
- 一个创业者怎么看待读书和写作
- 程序员修炼之道
- 2015/1/5 头脑风暴
- 书单计划
- 2014年我读过的那些书
- 我的后端开发书架2015
- 别人的书单
- 读书笔记
- 浪潮之巅
- 达内时期自己笔记整理
- Effective Java
- 打造facebook: 读书笔记
- 面试整理
- 阿里面试的一点感受
- 腾讯的三轮面试
- 三十之惑–面霸
- 前端面试问题汇总
- 八爪网络面试总结
- 2015面试总结总结
- 找工作流程梳理
- 最全前端面试问题及答案总结
- 前端开发面试题收集
- 百度web前端--2015一面
- 百度web前端--2015二面