首页
首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
EffectiveJava
今阳
创建于2021-08-24
订阅专栏
收录EffectiveJava系列文章
等 1 人订阅
共10篇文章
创建于2021-08-24
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
EffectiveJava-10-序列化
1. 使这个类的到处API永远的束缚在该类的内部表示法上; 2. 消耗过多的空间;(如上链表项只是实现细节,不值得记录在序列化形式中,会消耗过多空间) 3. 消耗过多时间;(序列化逻辑并不了解对象图的拓扑关系,所有它必须经过一个昂贵的图遍历,但上面例子中沿着next引用遍历是非…
EffectiveJava-9-并发
1. 将它保存在静态域中,作为类初始化的一部分; 2. 将它保存在volatile域,final域或者通过正常锁定访问的域中; 3. 将它放到并发的集合中; 1. 重用线程池中的线程,避免线程的创建和销毁所带来的性能开销; 2. 能有效控制线程池中的最大并发数,避免大量线程之间…
EffectiveJava-8-异常
1. 异常机制的设计初衷适用于不正常的情形,so,很少有JVM对其进行优化; 2. 把代码放在try-cache中阻止了现代JVM实现本来可能要执行的某些特定优化; 3. for遍历并不会导致冗余的检查,有些现代的JVM会将它们优化掉; 1. 使api更加易于学习和使用(通用,…
EffectiveJava-7-通用程序设计
性能优势,对于数组索引的边界值只计算一次。 1. 过滤:如果需要遍历集合,并删除选定的元素,就要使用显示的迭代器,以便调用其remove方法 ; 2. 转换:如果需要修改集合或数组的值,就需要集合的迭代器或数组索引了; 3. 平行迭代:如果需要并行的遍历多个集合或数组,就需要用…
EffectiveJava-6-方法
1. 可能在处理过程中失败,并产生令人费解的异常 2. 更糟糕的情况是正常返回,但计算出错误的结果 3. 最糟糕的是正常返回,但使得某个对象处于被破坏但状态,在将来某个不确定的时候,某个不想干的点上引发错误 对于某些参数,方法本身没有用到,却被保存起来供以后使用,检验这类参数的…
EffectiveJava-5-枚举和注解
1. int枚举: 引入枚举前,一般是声明一组具名的int常量,每个常量代表一个类型成员,这种方法叫做int枚举模式。 int枚举模式是类型不安全的,例如下面两组常量:性别和动物种类,二者不存在任何关系,然而却可以将ANIMAL_DOG传入一个需要性别参数的方法中,编译器不会出…
EffectiveJava-4-泛型
1. 数组是协变的, 如果Sub是Super的子类,那么数组Sub[]也是Super[]的子类; 2. 数组是具体化的,在运行时才知道并检查它们的元素类型约束;
EffectiveJava-3-类和接口
1. 不提供任何修改对象状态的方法 2. 保证类不会被扩展:用final修饰或将所有构造方法私有化并提供公有的静态工厂方法 3. 使所有域都是final的(实际上只要没有方法能够对域产生外部可见的改变即可,如延迟初始化,懒汉单例等,都不能让该域是final的) 4. 使所有域都…
EffectiveJava-2-对于所有对象都通用的方法
1. equals通用约定: 2. 不需要覆盖equals对情况: 3. 需要覆盖equals的情况: 4. 注意equals方法的写法: 1. hashCode通用约定: 2. 为不相等的对象产生不相等的散列码(hashCode方法的返回值):
EffectiveJava-1-创建和销毁对象
一. 使用静态工厂方法代替构造器 1. 一个类对外提供获取自身实例对象的方法: 2. 静态工厂方法的优势 : a. 可以随意组合要初始化的属性,通过不同的命名,不仅可以避免构造器的限制(一个类只能有一个带有指定签名的构造器),而且可以做到顾名思义; b. 可以不用在每次调用时都…