摘要:概念: 不可变类是其实例不能被修改的类,不可变类比可变类更加易于设计 实现和使用.它们不容易出错,而且更加安全. 优点 1.不可变对象只有创建时状态. 2.不可变对象本质上是线程安全的,它们不要求同步 3.不可变对象和其内部信息可以被自由共享.这条导...
阅读全文
02 2017 档案
摘要:1.公有类永远都不应该暴露可变的域.如果域是不可变的,暴露公有类的危害就要小一些. 但是,有时候需要用包级私有的或者私有的嵌套类来暴露域,无论这个类是否可变 2.如果公有类暴露了它的访问域,要想在将来改变其内部表示法是不可能的,因为公有类的客户端代码已经遍布隔出来当域被读取的时候,...
阅读全文
摘要:1.为什么要使类和成员可访问性最小化 它可以有效地解除组成系统的各模块之间的耦合关系,使得这些模块可以独立的开发 测试 优化 使用 理解和修改.提高软件的可重用性 2.成员的访问级别 私有(private):只有在声明该成员的顶层类内部才可以访问这个成员 包...
阅读全文
摘要:考虑实现Comparable接口compareTo方法 Comparable接口的唯一方法,允许进行简单的等同性比较,允许执行顺序比较 Comparable接口被所有值类实现.所以如果一个值类有非常明显的内在排序关系,应该考虑实现该接口 public...
阅读全文
摘要:java中的cloneclone构造器及其静态工厂的变形 优点:它们不依赖于某一种很有风险的,语言之外的对象创建机制; 它们不要求遵守尚未制定好文档的规范 他们不会于final域的正常使用发生冲突 它们不会抛出不必要的受...
阅读全文
摘要:覆盖equals是视情况覆盖toString 1.toString返回字符串 className@163b91 -calssName 类的名称 @ @ 163b91 散列码的无符号十六进制表示法 2.toString方法应该返回对象中包含的所有值得关注的信息 ...
阅读全文
摘要:覆盖equals是总要覆盖hashCode通过散列函数将集合中不相等的实例均匀的分布在所有可能的散列值上 1.把某个非零的常数值保存在一个名为result的int类型变量中 2.对于对象中每个关键域f(指equals方法中涉及的每个域),完成以下步骤: a.为该域计算int...
阅读全文
摘要:覆盖equals是要遵守的约定1.覆盖种类: -类的每个1实例本质上都是唯一的 -不关心类是否提供了”逻辑相等”的测试功能(Random测试是否能随机相同数字) -超类已经覆盖了equals,从超类继承过来的行为对于子类也是合适的(Set List Map)...
阅读全文
摘要:避免使用终结方法1.使用终结方法会导致行为不稳定,性能降低,以及可移植性的问题.(终结线程的优先级过低) 终结方法不能保证被及时的执行(从一个对象变得不可到达开始,到中介方法被执行,所花费的时间是任意长的)2.怎么不编写终结方法:提供一个显式的终止方法,并要求该类的客户端在每个...
阅读全文
摘要:消除过期对象的引用过期引用 – 在操作集合类的时候,未清理过期的对象引用(即:过期引用),常会导致内存泄露.从而报outOfmemory错误. 1.过期对象导致内存泄漏. 2.一旦对象引用过期,清除这些引用 3.如果一个过期对象中引用了其他对象,那么其引用的对象也不会被清除 4.W...
阅读全文
摘要:避免创建不必要的对象1.通过延迟初始化对象提高性能 调用功能方法时调用静态工厂方法,而不是调用类时使用 2.适配器:把功能委托给一个后备对象,从而为后备对象提供一个接口的对象 3.自动装箱:优先使用基本类型而不是装箱的基本类型,要当心无意识的自动装箱 自动装箱类型每次使用的...
阅读全文
摘要:通过私有构造器强化不可实例化的能力原理:只有当类不包含显式的构造器时,编译器才会生成缺省的构造器,因此只要让这个类包含私有构造器,他就不能被实例化 这种方式下,子类没有可访问的超类构造器可调用 //只有当类不包含显式的构造器时,编译器才会生成缺省的构造器,因此只要让这个类包含私有...
阅读全文
摘要:使用是由构造器或枚举类型强化singleton普通singleton:借助AccessibleObject.setAssess方法,通过反射机制调用私有构造器.抵御这种攻击可以修改构造器,让其再被要求创建第二个实例的时候抛出异常 //允许创建一个实例,当通过反射调用private ...
阅读全文
摘要:** 应对多个构造函数应当使用构建器** 静态工厂和构造器都不能很好的扩展到大量的可选参数,遇到大量参数有大量可选域时,只能重复生成可选参数递增的构造方法,这种构造模式叫做重叠构造器模式javaBeans模式 调用一个无参构造器来创建对象,然后调用...
阅读全文
摘要:构造器和静态工厂方法**构造器是大家创建类时的构造方法,即使不显式声明,它也会在类内部隐式声明,使我们可以通过类名New一个实例.静态方法是构造器的另一种表现形式**主题要点:何时以及如何创建对象,何时以及如何避免创建对象,如何确保对象能够适时的销毁,以及如何管理对象销毁之前必须进...
阅读全文
摘要:要学习设计模式,首先要明白设计模式,就是为实现某一种或某一组功能提供的代码编码方式.它没有固定的套路,只有约定俗成的风格.所有编码者可以根据已有的设计模式开放思维,设计出自己的设计模式,也会在无意中使用某些设计模式. 接下来我们举几个常用的模式例子 一..>单例模式 1.作用 -保证整个应用...
阅读全文
摘要:Junit测试用例不是用来证明你是对的,而是用来证明你没有错 1.功能 -在项目未在浏览器运行之前对获得的结果和预期的结果进行比较调试,减少BUG和发布时的修复工作 2.测试类和代码类应分开存放.在src目录下new一个Test资源目录 3.JUnit Test ...
阅读全文
摘要:1.概念 -Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建/报告和文档的软件项目管理工具 2.命令 -mvn -v --查看mvn版本 -mvn compile --编译项目 -mvn test --测试项目 -mvn package --...
阅读全文
摘要:1.AspectJ的概念 @AspectJ类似于Java注解的普通Java类 Spring可以使用AspectJ来做切入点解析 AOP的运行时仍旧是纯的Spring AOP,对AspectJ的编译器或者织入无依赖性. 2.配置方式 注解方式 -- @Configuration ...
阅读全文
摘要:1.事务的特性 原子性:事务中的操作是不可分割的一部分 一致性:要么同时成功,要么同时失败(事务执行前后数据保持一致) 隔离性:并发互不干扰 持久性:事务一旦被提交,它就是一条持久性的数据 2.Spring事务管理高层抽象3个接口 PlatformTransa...
阅读全文