自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 第十六条:复合优先于继承

实现继承:当一个类扩展另一个类的时候 接口继承:当一个类实现一个接口的时候,或者当一个接口扩展另一个接口的时候。 本篇的继承说的是实现继承。继承使用不当会导致软件变得很脆弱,在包的内部使用,以及使用专门为了继承而设计并有很好文档说明的类来说,使用继承是非常安全的。但是,对普通的具体类进行跨越包边界的继承,则是非常危险的。导致子类脆弱的原因:第一种:子类依赖于其超类中特定功能的实现细节。与方法调用不同的是,继承打破了封装性。换句话说,子类依赖于其超类中特定功能的实现细节。超类的实现有可能随着发行版.

2021-05-22 10:24:50 114

原创 第十五条:使可变性最小化

一、不可变类是什么?不可变类只是其实例不能被修改的类。 每个实例中包含的所有信息都必须在创建该实例的时候就提供,并在对象的整个生命周期内固定不变。Java平台类库中包含许多不可变的类,其中有String、基本类型的包装类、BigInteger和BigDecimal。二、使类成为不可变类,应遵循的五条规则1、不要提供任何会修改对象状态(属性)的方法。2、保证类不会被扩展。 为了防止子类化,一般做法是使这个类成为final的。这样可以防止粗心或者恶意的子类假装对象的状态已经改变,从而破坏该类的不可变行为

2021-05-21 08:59:25 154

原创 第十四条:在公有类中使用访问方法而非公有域

公有类不应该直接暴露数据域。反例:java.awt.Point正确做法:如果类可以在它所在的包的外部进行访问,就提供访问方法。总结:公有类永远都不应该暴露可变的域。虽然还是有问题,但是让公有类暴露不可变的域其危害比较小。但是,有时候会需要用包级私有的或者私有的嵌套类来暴露域,无论这个域是可变还是不可变的。...

2021-05-20 08:47:24 91

原创 第十三条:使类和成员的可访问性最小化

一、信息隐藏(封装)软件设计基本原则之一:信息隐藏(封装)是说良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰地隔离开,模块之间只通过它们的API进行通信。信息隐藏的好处:1、有效解除组成系统的各模块之间的耦合关系2、有效地调节性能3、提高了软件的可重用性4、降低了构建大型系统的风险二、访问控制访问控制机制决定了类、接口和成员的可访问性。实体的可访问性是由该实体声明所在的位置,以及该实体声明中所出现的访问修饰符共同决定的。正确地使用这些修饰符对于信息隐藏至关重要。尽可能地使每个类

2021-05-19 09:08:09 189

原创 第十二条:考虑实现Comparable接口

类实现了Comprable接口,就表明它的实例具有内在的排序关系。为实现Comparable接口的对象数组进行排序就这么简单:Arrays.sort(a);对于存储在集合中的Comparable对象进行搜索,计算极限值以及自动维护工作都非常简单。例如,下面的程序依赖于String实现了Comparable接口,它去掉了命令行参数列表中的重复参数,并按字母表顺序打印出来:/** * @description: 单词列表 * @author: lty * @create: 2021-05-17

2021-05-18 09:03:22 208

原创 第十一条:谨慎地覆盖clone

Clone方法的通用约定非常弱:创建和返回该对象的一个拷贝。这个拷贝的精确含义取决于该对象的类。一般含义是,对于任何对象x,表达式x.clone() != x将会是true,并且,表达式x.clone().getClass() == x.getClass()将会是true,但这些都不是绝对的要求,虽然通常情况下,表达式x.clone().equals(x)将会是true,但是,这也不是一个绝对的要求。拷贝对象往往会导致创建它的类的一个新实例,但它同时也会要求拷贝内部的数据结构。这个过程中没有调

2021-05-17 08:46:20 161

原创 第十条:始终要覆盖toString

java.lang.Object提供了toString方法public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());}返回的字符串:类的名称+“@”+散列码toString的通用约定1、被返回的字符串应该是一个“简洁的,但信息丰富,并且易于阅读的表达形式”。目前Object的toString只能说简洁和易于阅读,但是信息不算丰富。2、建议所有的子类都覆盖

2021-05-16 11:07:23 93

原创 第九条:覆盖equals时总是要覆盖hashCode

在每个覆盖了equals方法的类中,也必须覆盖hashCode方法。一、Object.hashCode的通用约定1) 只要对象的equals方法的比较操作所用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法都必须始终如一的返回同一个整数。在一个应用程序的多次执行过程中,每次执行所返回的整数可以不一致。2)如果两个对象根据equals方法比较是相等的,那么调用这两个对象中任意一个对象的hashCode方法都必须产生同样的整数结果。3)如果两个对象根据equals方法比较是不相等的,

2021-05-15 23:37:08 330

原创 第八条:覆盖equals时请遵守通用约定

一、不需要覆盖equals方法的情况(1)类的每个实例本质上都是唯一的。对于代表活动实体而不是值(value)的类来说,例如Thread。Object提供的equals实现对于这些类来说正是正确的行为。(2)不关心类是否提供了“逻辑相等(logical equality)”的测试功能。例如,java.util.Random覆盖了equals,以检查两个Random实例是否产生相同的随机数列,但是设计者并不认为客户需要或者期望这样的功能。在这样的情况下,从Object继承的equals实现就已经足够了

2021-05-14 22:40:17 196

原创 第七条:避免使用终结方法

终结方法通常是不可预测的,也是很危险的,一般情况下是不必要的。终结方法的缺点:第一条:不能保证会被及时地执行。从一个对象变得不可到达开始,到它的终结方法被执行,所花费的这段时间是任意长的。这意味着,注重时间的任务不应该由终结方法来实现。例如:垃圾回收算法的一个主要功能,及时地执行终结方法,但是这种算法在不同的JVM实现中大相径庭。如果程序依赖于终结方法被执行的时间点,那么这个程序的行为在不同的JVM中运行的表现可能就会截然不同。一个程序在你测试用的JVM平台上运行得非常好,而在你的最重要顾客的JVM

2021-05-13 08:43:44 90

原创 第六条:消除过期的对象引用

即使是使用具有垃圾回收功能的语言,我们也需要考虑内存管理的事情。例如:/** * @description: 消除过期的对象引用 * @author: lty * @create: 2021-05-10 15:30 **/public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16;

2021-05-12 09:04:54 116

原创 第五条:避免创建不必要的对象

第一种情况:如果对象是不可变的,它就始终可以被重用。一般来说,最好能重用而不是每次需要的时候就创建一个相同功能的新对象。重用方式既快速,又流行。例子:/** * Don't do this */String s = new String("避免创建不必要的对象");该语句每次被执行的时候都创建一个新的String实例,但是这些创建对象的动作全是不必要的。如果这种用法是在一个循环里面,或者是一个被频繁调用的方法中,就会创建出成千上万不必要的String实例。改进后:String s = "

2021-05-11 08:59:43 88

原创 第四条:通过私有构造器强化不可实例化的能力

像java.util.Arrays,java.lang.Math这种工具类,不希望被实例化,实例对它们没有任何意义。然而,在缺少显示构造器的情况下,编译器会自动提供一个公有的,无参的缺省构造器。企图通过将类做成抽象类来强制该类不可被实例化,这是行不通的。该类可以被子类化,并且该之类也可以被实例化。由于只有当类不包含显示构造器时,编译器才会生成缺省的构造器,因此我们只要让这个类包含私有构造器,它就不能被实例化了。例如:Math类用final表示它不可以被继承。/** * @descriptio

2021-05-10 11:23:57 90

原创 第三条:用私有构造器或者枚举类型强化Singleton属性

Singleton指仅仅被实例化一次的类。在Java 1.5发版之前,实现Singleton有两种方法(饿汉式以及懒汉式)。这两种方法都要把构造器保持为私有的,并导出公有的静态成员,以便允许客户端能够访问该类的唯一实例。第一种:饿汉式/** * @description: 饿汉式----实现单例 * @author: lty * @create: 2021-05-06 17:34 **/public class SingleTonEh { /** * 私有化构造器

2021-05-09 07:18:15 183

原创 第二条:遇到多个构造器参数时要考虑用构建器

静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数。问题:当存在一个类有几个属性是必需的,还有一些属性是可选的,对于这样的类,我们可以用什么方法去编写呢?第一种:重叠构造器模式。在这种模式下,提供的第一个只有必要的参数的构造器,第二个构造器有一个可选参数,第三个构造器有两个可选参数,依次类推,最后一个构造器包含所有可选的参数。示例:/** * @description: 重叠构造器模式 * @author: lty * @create: 2021-05-07 16:3

2021-05-08 08:45:07 118

转载 第一条:考虑用静态工厂方法代替构造器

转载链接:https://www.jianshu.com/p/ceb5ec8f1174序:什么是静态工厂方法在 Java 中,获得一个类实例最简单的方法就是使用 new 关键字,通过构造函数来实现对象的创建。就像这样:Fragment fragment = new MyFragment();// orDate date = new Date();不过在实际的开发中,我们经常还会见到另外一种获取类实例的方法: Fragment fragment = MyFragment.newIntan

2021-05-07 12:41:38 137

原创 Postman 设置环境变量

问:在工作中,使用Postman时测试时如果切换环境,就需要改变调用接口的ip和端口,有时候还不记得对应环境ip和端口还需要去查询文档或者是寻找,就感觉很麻烦有没有,那Postman有没有什么解决该问题的方法???答:当然有,Postman可以设置环境变量,切换环境的时候,只需要切换环境变量即可。问:那怎么操作呢???答:那请继续往下看吧。...

2021-05-07 08:56:05 140

原创 Singleton(单例)实现三种方法

第一种:饿汉式/** * @description: 饿汉式----实现单例 * @author: lty * @create: 2021-05-06 17:34 **/public class SingleTonEh { /** * 私有化构造器 */ private SingleTonEh(){} private static SingleTonEh singleTonEh = new SingleTonEh(); public

2021-05-06 18:09:50 161

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除