自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

朱小厮的博客

你若盛开 蝴蝶自来 你若精彩 天自安排

原创 设计模式:模板方法模式(Template Method)

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。一次性的实现一个算法的不变部分,并将可变的行为留给子类来实现。 模板方法的关键是:子类可以置换掉父类的可变部分,但是子类却不可以改变模板方...

2016-03-30 19:52:03 2588 1

原创 设计模式:代理模式(Proxy)

代理模式:为其他对象提供一种代理以控制对这个对象的访问。 代理模式中的角色: 抽象主题角色(Subject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。 具体主题角色(RealSubject):也称为委托角色或者被代理角色。定义了代理对象所代表的...

2016-03-29 21:38:09 8288 9

原创 设计模式:享元模式(Flyweight)

运用共享技术有效地支持大量细粒度的对象。又名“蝇量模式”。  在Java语言中,String类型就是使用了享元模式。String对象是final类型,对象一旦创建就不可改变。在JAVA中字符串常量都是存在常量池中的,Java会确保一个字符串常量在常量池中只有一个拷贝。譬如:String a = ...

2016-03-29 21:31:30 2516 2

原创 设计模式:外观模式(Facade)

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式又称门面模式。 外观模式的角色 1. 门面角色:客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来...

2016-03-29 21:25:14 2528 1

原创 设计模式:装饰模式(Decorator)

动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式想必生成子类更为灵活。  装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。 装饰模式中的角色有: 1. 抽象构件角色(Component):给出一个抽象接口,以规范...

2016-03-29 21:22:13 2864 1

原创 设计模式:组合模式(Composite)

将对象组合成属性结构以表示“部分-整体”的层次结构。组合使得用户和单个对象和组合对象的使用具有一致性。 组合模式设计的角色: 1. Component:是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component. 2. Leaf:在组合...

2016-03-29 21:16:50 2607 1

原创 Java对象大小内幕浅析

最近突发奇想,忽然对Java对象的内存大小感兴趣,去网上搜集了一些资料,并且做一下整理,希望能够各位帮助。  如果:你能算出new String(“abc”)这个对象在JVM中占用内存大小(64位JDK7中压缩大小48B,未压缩大小64B), 那么看到这里就可以结束了~ Java对象的内存布局...

2016-03-29 18:59:00 12959 10

原创 设计模式:桥接模式(Bridge)

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 意图:将抽象与实现解耦。  桥接模式主要应对的是由于实际的需要,某个类具有两个或者两个以上的维度变化(违反了SRP原则),如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。桥接模式所涉及的角色 1. Abstractio...

2016-03-28 19:02:57 7951 3

原创 设计模式:适配器模式(Adapter)

适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。  适配器模式有类适配器模式和对象适配器模式两种不同的形式。 类适配器  类适配器模式把适配的类的API转换成目标类的API  适配器模式所涉及的角色: 目标角色(...

2016-03-28 18:56:23 5587 0

原创 设计模式:原型模式(Prototype)

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。  举个例子: 1 原型(实际上是implements了Cloneable接口,进而重写clone()方法)public class ProtoType implements Cloneable { priv...

2016-03-25 16:07:26 1880 0

原创 设计模式:建造者模式(Builder)

建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。  建造者模式通常包括下几个角色: 1. builder(抽象建造者):给出一个抽象结论,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的那些部分的创建,并不涉及具体的对象部件的创建。 ...

2016-03-25 11:18:54 6119 1

原创 设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象...

2016-03-24 21:42:17 4899 4

原创 设计模式:单例模式(Singleton)

  单例模式在23个设计模式中算得上是最简单的一个了,也许你会有异议,那就换成“最简单之一”,这样就严谨了很多。   单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。   适用性:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展...

2016-03-23 21:37:46 7433 5

原创 设计模式:开篇

  最近在整理设计模式这个系列,这里做一下全局的概括。本系列的文章对于初识设计模式的朋友也许不太适应,对于那些了解过或者使用过设计模式的人比较适应,本系列的文章对设计模式的关键点做了一个终结性的陈述,也列举了相关例子方便理解和记忆,但是并没有循序渐进的讲解。譬如,在适配器模式中,博主阐述了适配器的...

2016-03-23 21:32:44 4800 5

原创 Java集合框架:总结

最近博主对于Java集合框架这个系列做了一个整理,主要包括: Map系:HashMap, LinkedHashMap, TreeMap, WeakHashMap, EnumMap; List系:ArrayList, LinkedList, Vector, Stack; Set系:HashSet...

2016-03-18 17:03:32 3959 9

原创 Java集合框架:Collections工具类

java.util.Collections工具类提供很多有用的方法,使得程序猿操作集合类的时候更加的方便容易,这些方法都是静态的。整个Collections工具类源码差不多有4000行,我们针对一些典型的方法进行阐述。1. 调用一个空List,Set,Mappublic static final ...

2016-03-18 16:44:16 8849 1

原创 Java集合框架:Arrays工具类

java.util.Arrays类能方便地操作数组,它提供的方法都是静态的。整个Arrays工具类的实现有3000+行,但是归纳总结一下可知它有以下功能(9个):1. asList定义: @SafeVarargs public static <T&a...

2016-03-18 16:34:48 6015 0

原创 Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)

Set概述 Set几乎都是内部用一个Map来实现, 因为Map里的KeySet就是一个Set,而value是假值,全部使用同一个Object。Set的特征也继承了那些内部Map实现的特征。HashSet1. 定义package java.util; public class HashSet&am...

2016-03-17 21:37:57 3696 3

原创 Java集合框架:LinkedList

LinkedList以双向链表实现,允许重复。(如下Node的实现)并保留头指针和尾指针。链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作。按下标访问元素—get(i)/set(i,e) 要悲剧的遍历链表将指针移动到位(如果i>数组大小的一半,会从末尾移起)。插...

2016-03-17 20:13:57 2759 2

原创 Java集合框架:ArrayList

  **ArrayList以数组实现,允许重复。超出限制时会增加50%的容量(grow()方法中实现,如下所示),每次扩容都底层采用System.arrayCopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入...

2016-03-17 20:08:01 4164 8

原创 Java集合框架:EnumMap

EnumMap的key不允许为null,value可以为null,按照key在enum中的顺序进行保存,非线程安全。可以用工具类Collections进行包装成线程安全的: ``` Map<EnumKey, V> m = Collections.synchronizedMap(new ...

2016-03-17 19:59:15 8966 0

原创 Java集合框架:WeakHashMap

&amp;emsp;&amp;emsp;WeakHashMap实现了Map接口,是HashMap的一种实现,它比HashMap多了一个引用队列: ``` private final ReferenceQueue&lt;Object&gt; queue = new...

2016-03-17 19:48:56 7148 2

原创 Java集合框架:TreeMap

&amp;emsp;&amp;emsp;TreeMap继承AbstractMap,实现NavigableMap、Cloneable、Serializable三个接口。其中AbstractMap表明TreeMap为一个Map即支持key-value的集合, NavigableMap则...

2016-03-17 19:38:29 3200 8

原创 Java集合框架:LinkedHashMap

如无特殊说明,本文以jdk7为准进行说明。package java.util; import java.io.*; public class LinkedHashMap&lt;K,V&gt; extends HashMap&lt;K,V&gt; ...

2016-03-17 17:42:51 3122 4

原创 Java集合框架:HashMap

Java集合框架概述  Java集合框架无论是在工作、学习、面试中都会经常涉及到,相信各位也并不陌生,其强大也不用多说,博主最近翻阅java集合框架的源码以及搜索一些相关资料整理出Java集合框架的系列。一方面是做一个总结,方便以后查阅,另一方面希望各位小伙伴能够提出不足之处,我会及时更新修改。 ...

2016-03-17 12:55:29 8352 22

原创 Java引用类型

博主最近在整理Java集合框架时,在整理到WeakHashMap的时候,觉得有必要先阐述一下Java的引用类型,故此先整理的这篇文章,希望各位多提提意见。   闲话不多说,直接进入主题。Java中提供了4个级别的引用:强引用、软引用、弱引用和虚引用。这四个引用定义在java.lang.ref的包...

2016-03-16 19:12:55 6436 6

原创 Comparable与Comparator浅析

  今天博主在翻阅TreeMap的源码,发现其键必须是实现Comparable或者Comparator的接口时产生了一些兴趣,比如在TreeMap中的put方法分别对Comparable和Comparator接口分别进行处理。那么疑问就来了,Comparable和Comparator接口的区别是什...

2016-03-15 19:56:41 19596 27

原创 Java虚拟机类加载机制——案例分析

在《Java虚拟机类加载机制》一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬念。建议先看完《Java虚拟机类加载机制》这篇再来看这个,印象会比较深刻,如若不然,也没什么关系~~ 下面是程序代码: package jvm.clas...

2016-03-09 19:16:33 12563 33

原创 Java类加载器(二)——自定义类加载器

用户定制自己的ClassLoader可以实现以下的一些应用: 自定义路径下查找自定义的class类文件,也许我们需要的class文件并不总是在已经设置好的Classpath下面,那么我们必须向办法来找到这个类,在这种清理下我们需要自己实现一个ClassLoader。 确保安全性:Java自己吗很容...

2016-03-08 19:09:57 4142 3

原创 Java类加载器(一)——类加载器层次与模型

类加载器虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。类加载器层次(等级)从JVM的角度来讲,只存在两种不同的类加载器。 第一类是启动类...

2016-03-08 19:03:05 3755 5

原创 Java虚拟机类加载机制

看到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎么加载,博主有很长一段时间也是这么认为的。随着编程经验的日积月累,越来越感觉到了解虚拟机相关要领的重要性。闲话不多说,老规矩,先来一段代码吊吊胃口。 public class SSClass { static...

2016-03-08 18:52:08 17815 32

原创 Javac编译过程

Javac编译过程大致分为4个过程,分别是: 词法分析 语法分析 语义分析 代码生成 词法分析   词法分析是将源代码的字符流转变为标记(Token)集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,关键字、变量名、字面量、运算符都可以成为编辑,如“int a+b...

2016-03-04 17:50:02 4990 1

原创 Java自动装箱与拆箱

自动装箱与拆箱机制在实际使用中非常常见,不过也特别容易出错,博主在面对下面一道题的时候自信满满,可还是没有能够全对,所以写下这篇博文,给自己对自动装箱与拆箱机制做一下知识巩固,也给各位朋友做一下参考。   首先有这样一道题,给出下面代码的输出结果:public class AutoBoxing...

2016-03-04 13:47:48 2027 2

原创 通过Java反编译揭开一些问题的真相

博主在上一篇《 Java语法糖之foreach》中采用反编译的形式进行探讨进而揭开foreach语法糖的真相。进来又遇到几个问题,通过反编译之后才了解了事实的真相,觉得有必要做一下总结,也可以给各位做一下参考。   相信很多朋友刚开始见到反编译后的内容的时候,肯定会吐槽:WTF!其实只要静下心来...

2016-03-02 12:24:47 10341 0

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