自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

heihei

carryall

  • 博客(18)
  • 资源 (3)
  • 收藏
  • 关注

原创 Effective Java之使可变性最小(十五)

为了使类变成可变类,需要遵循以下原则: 1.不要提供任何修改对象状态的方法。 2.保证类不会被扩展,声明类为final。 3.保证所有的域都是final的。 4.保证所有的域都是私有的。不可变类的优点: 1.不可变类 简单,它在生命周期内只有一种状态。 2.不可变对象线程安全,不要求同步。 3.对于频繁使用的值,可以提供公有的静态final方法,并将其缓存起来,降低内存和垃圾回收成本。

2017-12-19 21:36:15 169

原创 Effective Java之在公有类中使用访问方法而非公有域(十四)

1.对于公有类来说,如果类可以在它所在的包的外部进行访问,就提供访问方法,以保留将来改变该类的内部表示法的灵活性。 如果公有域暴露了他的数据域,要想在将来改变它的内部表示法是不可能的,因为公有类的客户端代码已经遍布各处了。2.如果类是包级私有或者是私有的嵌套类时,直接暴露数据域是没有本质错误的,原因是包级私有或者是私有的嵌套类时,并不会把api暴露在外面,所以将来改变其内部表示法,并不会对客户端产

2017-12-14 11:37:24 197

原创 Effective Java之使类和成员的可访问性最小化(十三)

对于类对于类,只有public和package-private两种访问级别。1.对于顶层的类来说,只有包级私有和公有两种可能,区别是包级私有意味着只能在当前包中使用,不会成为导出api的一部分,而公有意味着导出api,你有责任去永远支持它。所以,为了使访问最小化,能包级私有就应该声明为包级私有。2.对于包级私有类来说,如果只在某一个类中被使用,那么就直接让这个包级私有类成为这个类的嵌套类,这样就能让

2017-12-14 11:05:00 202

原创 Effective Java之谨慎地覆盖clone(十一)

Clone提供一种语言之外的机制:无需调用构造器就可以创建对象。它的通用约定非常弱:创建和返回该对象的一个拷贝。这个拷贝的精确含义取决于该对象的类。一般含义是,对于任何对象x,表达式x.clone() != x 将会是true,并且,表达式x.clone().getClass() == x.getClass() 将会是true,但这些不是绝对的要求,通常情况下,表达式 x.clone().equal

2017-12-13 20:46:07 290

原创 Effectice Java之始终覆盖toString(十)

为什么始终覆盖toString呢?首先我们看一下toString约定,“被返回的字符串应当是简洁的,但是内容丰富的,并且易于阅读的表达方式,建议所有的子类都覆盖toString方法!“很简单,覆盖了toString方法后,就能产生像Student:name = tom ,ID = 2 这么简洁易懂的字符串,否则产生这种Student@21bf23这样让人产生一脸问号的字符串,只能让人清楚这不是nul

2017-12-13 16:41:47 211

原创 Effective Java之避免使用终结方法(七)

1.终结方法的缺点1.终结方法不能保证及时执行,因此注重时间的任务不应该由终结方法来完成。例如:用终结方法去关闭已经打开的文件,这是一种严重错误,因为打开文件描述符是一种很有限的资源,如果jvm延迟终结方法,导致多个文件处于打开的状态。2.终结方法不能保证一定会被执行。如果企图通过终结方法释放共享资源上的永久锁,会使整个分布式系统挂掉。3.不要被System.gc和System.runFinaliz

2017-12-13 15:32:53 248

原创 Effective Java之覆盖equal时要遵守通用约定(八)

终结方法的缺点1.终结方法不能保证及时执行,因此注重时间的任务不应该由终结方法来完成。例如:用终结方法去关闭已经打开的文件,这是一种严重错误,因为打开文件描述符是一种很有限的资源,如果jvm延迟终结方法,导致多个文件处于打开的状态。2.终结方法不能保证一定会被执行。如果企图通过终结方法释放共享资源上的永久锁,会使整个分布式系统挂掉。3.不要被System.gc和System.runFinalizat

2017-12-12 21:35:41 484

原创 Effective Java之消除过期的引用(六)

容易出现内存泄漏问题的情景:1.自己管理内存的类。书中举出了一个内存泄漏的stack例子class Stack{public Object[] elements;//原文为private,但这里改为public为了测试下面代码public int size=0;public Stack(int initialCapacity){this.elements=new Object[initialCapa

2017-12-12 16:47:20 470

原创 Effective Java之避免创建不必要的对象(五)

1.对于不可变类(immutable),他始终可以被重用。如:String类 String s = new String(“string”); 这种方法创建了两个String对象,因为传入String构造器的参数本身就是一个String实例,new再创建一个对象,由s指向它,事实上这样做浪费了两倍内存。 所以应该这样: String s = “string”;又如:Integer类等包装类

2017-12-12 16:13:56 616

原创 Effective Java之通过私有构造器强化不可实例化能力(四)

比如很多工具类,成员都是静态的,你写这个类的原因是想拿来直接用,而不需要实例化的但是在缺少显示构造函数的时候,编译器会给你默认生成一个构造函数,这样这个类就有可能实例化企图将类做成抽象类来强制该类不被实例化,这是行不通的(因为子类可以实例化,而且你写这个类不又不是用来继承的)将构造器设置为private来解决问题:public class UtilityClass { // Suppress

2017-12-12 15:20:47 541

原创 Effective Java之用私有构造器或者枚举类型强化Singleton属性(三)

1.饿汉式加载类加载时就创建public class MaYun {private static Mayun instance = new Mayun();private static getInstance() {return instance;}private MaYun() {//MaYun诞生要做的事情}public void splitAlipay() {System.o

2017-12-12 14:54:42 552

原创 Effective Java之多个构造参数考虑用构建器(二)

静态工厂方法和构造器都有一个共同的特点–>无法扩展到大量的参数。对于大量的参数类,我们有以下方案: 1.重叠构造器。这个源码中经常可以看到,例如HashMap: public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < 0) throw new IllegalA

2017-12-12 13:56:07 454

原创 Effective Java之静态工厂代替构造器(一)

优势1:它们有名称,所以在多个构造器时,能够根据静态工厂的方法的名称找到哪个构造器。优势2:能够实现单例模式,不必在每次调用重新创建新对象。优势3:当创建参数化参数实例时,使用静态工厂方法更加简单。优势4:它们可以返回原返回类型的任何子对象。 书中提到了展示这个优势的“服务提供者框架”,我们以jdbc为例,来看一下jdbc是如何利用静态工厂的。定义 多个服务提供者实现一个服务,系统为服务提供

2017-12-12 12:34:55 459

原创 ConcurrentHashMap源码解析

ConcurrentHashMap在jdk1.6,1.7中采用了简单的分段锁,有效地提高了并发,但是1.8的ConcurrentHashMap发生了巨大的变化。1.成员变量hashmap中存在的成员变量: private static final int MAXIMUM_CAPACITY = 1 << 30; private static final int DEFAULT_CAPACITY =

2017-12-06 22:18:03 428

原创 HashMap源码分析

1.hashMap的工作原理当我们执行put存值时,hashmap会先调用key的hashcode方法的到哈希码,也就是桶的索引bucketIndex,根据哈希码找到该桶,然后遍历桶用equal方法来比较key,如果桶为空,就把kv放入桶中,如果桶存在该key,就用新value代替旧value,返回旧value,如果不存在就放入桶中,每个桶用单链表维护。下面是原理图: 2.成员变量要理解成员变量,必

2017-12-06 10:40:48 451

转载 JDK8新特性:接口的静态方法和默认方法

在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的。由于这些修饰符都是默认的,所以在JDK8之前,下面的写法都是等价的。 public interface JDK8BeforeInterface { public static final int field1 = 0;

2017-12-05 10:24:46 497 1

原创 Java多线程之并发容器(五)

1.hashtable和vector它们是支持并发操作的并发容器,hashtable只不过是在hashmap的基础上,所有的方法上都加上synchronized关键字,vector在ArrayList的基础上,所有的方法上都加上synchronized关键字来达到同步的目的。 2.Collections中的方法![这里写图片描述](http://img.blog.csdn.net/2017120

2017-12-04 15:42:07 505

原创 Java多线程之迭代器问题(四)

1.迭代器的问题无论是直接迭代还是for-each循环(for-each内部也是用迭代器实现)语句,对容器迭代的标准方式都是Iterator。但是,即使是使用迭代器,也无法避免在迭代器在迭代期间对容器加锁。这是因为设计同步容器的迭代器时并没有考虑并发修改的问题。它们表现出的行为是及时失败的,也就是容器在迭代的过程中如果被修改,就会抛出ConcurrentModificationException失败

2017-12-04 12:28:56 5484 1

jetty-distribution-9.4.11.v20180605

Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。

2018-11-30

activemq-all-5.15.0.jar

activemq-all-5.15.0.jar

2017-08-28

activitymq实战 源代码

activitymq实战 源代码

2017-08-28

空空如也

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

TA关注的人

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