Java
文章平均质量分 68
木_樨
大数据爱好者,欢迎大家关注我!
展开
-
final关键字解析
1、修饰类该类称为“final类”。该类不能被其他类继承。该类的成员变量可根据需要用final修饰。该类的成员方法默认被final修饰。2、修饰方法该方法不能被子类重写。注意:private方法会隐式将其指定为final方法。3、修饰变量修饰基本数据类型变量时(如int、float、double等),变量的值不能被修改;修饰引用数据类型变量时(如Integer等),引用不能被修改(不能将其他引用指向原创 2017-03-16 13:54:14 · 255 阅读 · 0 评论 -
Java设计模式概述之结构型模式(代理模式)
二、代理模式我们在实践过程中,常常需要对一个类的功能进行完善和增强。于是,我们经常会用继承类和实现接口的方式来增强一个类,但这样或多或少会造成类与类之间的耦合:继承类之后不能再继承其他类;实现接口的话必须实现接口中的所有方法,且若接口的方法发生改变,实现接口类也必须做出改变,这样不利于最大限度扩展。代理模式(Proxy)使用代理类来增强原始类。代理类需要与原始类建立逻辑关系的代码,而原始类不需要任何原创 2017-02-06 13:38:35 · 189 阅读 · 0 评论 -
Java设计模式概述之结构型模式(装饰器模式)
在Java中,装饰器模式使用场景非常普遍,例如BufferedInputStream就利用了装饰器模式。装饰器模式与代理模式非常相似,相似点可总结如下:1、都是对原始类功能、特性的增强。 2、都是通过注入原始类的应用来实现类的增强。 3、其增强原始类的方式都是非侵入的,可插拔的。 4、被扩展后的代码具有良好的扩展性。当然,不同点如下:1、注入方式不同。装饰器模式是通过其构造方法接受原始类的实例原创 2017-02-06 14:10:09 · 224 阅读 · 0 评论 -
Java设计模式概述之结构型模式(组合模式)
四、组合模式(Composite)组合模式相对不好阐述。引用大话设计模式的片段:“当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式了。”组合模式与树形结构程序设计是密不可分的。组合模式很好的体现了“整体——部分”的关系。下面给大家一段自己写的有关组合模式的代码:import java.util.Enumera原创 2017-02-06 14:42:17 · 214 阅读 · 0 评论 -
Java设计模式概述之结构型模式(享元模式)
五、享元模式(Flyweight)享元模式简介Flyweight本意是拳击中的绳量级,在这里是指代共享的元素。享元模式指多个元素共享使用。把生活中的公共设施比作这里的元素,每个人都能享用元素,人人共享资源。享元模式最大的特点就是资源共享性。Java中String类型利用了享元模式。代码如下:String a = "abc";String b = "abc";System.out.println(a原创 2017-02-06 21:20:23 · 261 阅读 · 0 评论 -
Java设计模式概述之结构型模式(外观模式)
六、外观模式(Facade)概述外观模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。外观模式的中的外观是一个抽象的概念,泛指外部的对象。外观对象中包含了若干的内部对象,内部的各个对象存在某些逻辑关联,从而组成简单或复杂的内部系统。外观模式使外观对象将若干内部对象的逻辑细节封装,使得外界不必直接调用内部对象,只需通过调用外观对象来实现某些功能。应用原创 2017-02-07 15:34:32 · 394 阅读 · 0 评论 -
Java设计模式概述之结构型模式(桥接模式)
七、桥接模式概念小插曲将抽象与具体分离就是桥接模式。我勒个去,GOF里面的这一句想必很难理解。这句话的确很抽象,但我们仔细琢磨琢磨,还是会柳暗花明的。桥接模式的“桥”字,说实话我也不明白为什么要以“桥接”来命名这一模式,所以先请大家把“桥接模式”抽象地看作“**模式”,不再为名字而迷惑。解释在Java中,“抽象”大概可以指interface,abstract class,因此,大家暂时把“抽象”理解原创 2017-02-07 21:49:28 · 202 阅读 · 0 评论 -
Java设计模式之行为型模式(责任链模式)
责任链模式概述责任链模式是将多个处理事件的行为组合成一条链,通过调用链来对事件进行批处理。与单一事件处理不同,责任链模式强调多个事件连续处理,注重事件处理的序列化。适用场景一个简单事件运行有一个前提:被触发。一个简单事件只有收到运行的请求才会运行。在程序设计中,若单个简单的事件越来越多,就必然会重复发送许多条相同的请求事件运行的命令。责任链模式就是针对这一问题的。责任链模式将多个事件集成为一个序列化原创 2017-02-08 14:35:02 · 203 阅读 · 0 评论 -
Java设计模式之行为型模式(命令模式)
命令模式(Command)1、概述命令模式由三部分构成:Invoker(命令触发器)、Executor(命令处理器)、Responder(命令响应器)。命令模式将客户端(也就是这里的Invoker命令触发器)与服务端(Responder命令响应器)两者解耦。客户端只需要关注自己发送哪一条命令,而无需关注服务端的实现细节;服务端只需关注命令是什么,根据命令作出相应响应,而无需与客户端建立直接联系。命令原创 2017-02-08 16:11:40 · 292 阅读 · 0 评论 -
Java设计模式之行为型模式(迭代器模式)
迭代器模式(Iterator)1、概述迭代器模式针对的对象是集合类(Tips:这里的集合类泛指存入多个元素的类),使得该集合类拥有访问该集合类所有元素的迭代器类,并通过迭代器类获取该集合类的每一个元素,而且不暴露内部元素细节。2、应用场景①应用的对象必须是可遍历的集合类②需要对集合类的内部元素进行批量取出③不能暴露内部元素的细节我们所熟知的Java Collection架构就利用到了迭代器模式,所有原创 2017-02-08 17:06:23 · 197 阅读 · 0 评论 -
Java设计模式概述之结构型模式(适配器模式)
结构型模式清单:适配器模式、桥接模式、复合模式、装饰模式、外观模式、元模式、代理模式。其中,适配器模式、装饰模式、元模式、代理模式适用场景较多,须重点掌握。一、适配器模式适配器模式分为类适配器模式、对象适配器模式、缺省适配器模式。适配器模式思想原理很简单。举个简单的例子:笔记本电脑充电。笔记本电脑充电的过程涉及三个元件:笔记本、电源适配器、插座。大家可以思考为什么有电源适配器。首先,插座并不知晓笔记原创 2017-02-06 11:31:20 · 289 阅读 · 0 评论 -
Java设计模式概述之创建型模式
Java一共有23种设计模式,23种设计模式大致分为三大类:创建模式、结构化模式、行为模式。Tip:由于23三种设计模式的篇幅较长,先来介绍我们比较熟悉的建造者模式。一、单例模式(Singleton)单例模式中的单例是指唯一的实例对象。Java API中的Calendar类就利用了单例模式。相信大家应该对这条语句不陌生:Calendar.getInstance()。这条语句创建了一个单例。再如在某些原创 2017-02-03 21:08:20 · 244 阅读 · 0 评论 -
CGLIB动态代理
1、概述我们知道,Java动态代理使用起来非常简单,但也有其局限性。使用Java动态代理时,被代理的类必须实现一个或多个接口,若想给没有实现接口的类实现动态代理,就需要使用CGLIB动态代理。CGLIB(Code Generation Library)是一个高性能开源代码生成包,它的底层通过ASM(Java字节码操控框架)来转换字节码,为一个类创建子类,然后对子类进行增强,解决无接口代理问题。CGL原创 2017-02-26 11:27:51 · 212 阅读 · 0 评论 -
Java线程状态转换
1、概述2、线程的优先级和线程让步yield()线程的让步是通过Thread.yield()来实现的。yield()方法的作用是:暂停当前正在执行的线程对象,并执行其他线程。要理解yield(),必须了解线程的优先级的概念。线程总是存在优先级,优先级范围在1~10之间。JVM线程调度程序是基于优先级的抢先调度机制。在大多数情况下,当前运行的线程优先级将大于或等于线程池中任何线程的优先级。但这仅仅是大原创 2017-03-24 21:16:54 · 327 阅读 · 0 评论 -
你真的了解try{ return }finally{}中的return吗?
谁能给我我解释一下这段程序的结果为什么是2而不是3?class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) { } finally { ++x; }转载 2017-03-24 20:47:25 · 306 阅读 · 0 评论 -
“==”与 equals 方法的区别
“==”比较的是栈内存中两个引用(reference)在堆内存中的对象的内存地址值。equals 用于自定义比较法则,一般情况下,多用于比较两个对象值的大小。在 Object 类中,“==”与 equals 方法的作用完全相同,equals 方法体内就是“==”。这是 Object 中有关 equals 方法的源代码:public boolean equals(Object obj) {原创 2017-03-07 22:25:08 · 248 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一转载 2017-03-06 14:42:00 · 316 阅读 · 0 评论 -
归并排序(Merge Sort)
1、概述归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中原创 2017-02-27 14:13:16 · 354 阅读 · 0 评论 -
堆排序(Heap Sort)
1、算法原理堆是完全二叉树,堆分为小根堆和大根堆,这里主要讲大根堆,也就是堆的最顶部比其他任何一个子节点都要大(或者等于)。堆的排序复杂度为O(nlogn)。①时间复杂度它是不稳定的排序方法。(排序的稳定性是指如果在排序的序列中,存在前后相同的两个元素的话,排序前 和排序后他们的相对位置不发生变化)②算法稳定性堆排序的时间,主要由建立初始堆和反复重建堆这两部分的时间开销构成,它们均是通过调用Heap原创 2017-03-05 21:51:16 · 440 阅读 · 0 评论 -
Java 字节流和字符流的区别
转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,如图12-6所示。 下面以两个写文件的操作为主转载 2017-03-08 11:08:15 · 259 阅读 · 0 评论 -
Spring-Bean之基于注解(Annotation)装配解析
1、概述在Spring中,尽管使用XML配置文件可以实现Bean的装配工作,但如果XML配置的bean非常的多,XML配置文件代码将变得非常臃肿,不利于代码的后期维护。自从JDK 1.5之后,Java提供了注解(Annotation)功能,与此同时,Spring 3也提供了Annotation的全面支持,如注解装配Bean、注解实现AspectJ AOP编程等。在Spring 3中,常用的注解如下:原创 2017-02-26 15:19:32 · 912 阅读 · 0 评论 -
JVM解析
1、JVM概述JVM(Java Virtual Machine)即 Java 虚拟机。虚拟机就是抽象计算机(虚拟计算机)。Java 虚拟机将 Java 、Scala、Kotlin、Groovy、JRuby、Jython、PHP8(IBM) 等基于 Java 虚拟机的高级语言所编写的程序代码转换为本地的机器指令,这些机器指令经过专用的编译器编译之后,交给 CPU(Central Processing原创 2017-03-05 14:02:05 · 262 阅读 · 0 评论 -
Java设计模式之行为型模式(中介者模式)
中介者模式(Mediator)1、背景类与类之间会产生直接的交互,这在实际的编码中是常见的,例如,A类调用B类的方法。我们常说的“对扩展开放,对修改关闭”原则就是要防止某处修改导致处处修改的情景,因为这样极不利于后期维护。当A类直接调用B类的方法时,A类对B类产生了直接的依赖关系:A类直接依赖B类的方法。当B类的方法发生修改时(例如B类方法的方法名发生改变,B的类名发生改变),A类中的调用B类的方法原创 2017-02-08 22:02:18 · 279 阅读 · 0 评论 -
Java设计模式之行为型模式(备忘录模式)
备忘录模式1、背景在日常生活中,当我们重装电脑系统时,或多或少都会将之前的系统备份,以防日后电脑发生故障时能够及时恢复。备份思想无处不在,在编码工作中亦如此。Java是面向对象的编程语言,核心的思想就是对象。我们在使用对象的过程中,可能会频繁的修改对象的相关值,若这些相关值每一个都意义(或都很重要),就需要对以前的值进行备份操作。备忘录模式正是针对的对象的备份。2、概述①定义备忘录模式将对象的数据做原创 2017-02-09 10:39:52 · 311 阅读 · 0 评论 -
Java设计模式之行为型模式(观察者模式)
观察者模式(Observer)1、背景在软件开发中,当一个类发生变化,需要通知其他类,并让其他类做某些逻辑操作,观察者模式应运而生。2、概述①定义将主类与其他多个类建立一种“一对多”的通信关系,当“主类“发生某些操作时,与之建立从属关系的类作出反应。②应用场景监听某个类的运行情况被监听类分发信息、监听类订阅信息场景多个程序的同步更新同步产生程序运行日志③优势一次修改处处运行,提高程序运行原创 2017-02-09 15:35:53 · 256 阅读 · 0 评论 -
Java动态代理
1、概述建议大家在看这篇博文之前,去我的博客中阅读Java代理模式一文。里面讲解了代理模式的相关概念。①代理模式我们在实践过程中,常常需要对一个类的功能进行完善和增强。于是,我们经常会用继承类和实现接口的方式来增强一个类,但这样或多或少会造成类与类之间的耦合:继承类之后不能再继承其他类;实现接口的话必须实现接口中的所有方法,且若接口的方法发生改变,实现接口类也必须做出改变,这样不利于最大限度扩展。代原创 2017-02-21 15:33:04 · 432 阅读 · 0 评论 -
快速排序(Quick Sort)
概述快速排序(Quick Sort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。注意!一定要用到递归!算法原理设要排序的数组是a[0]…a[N-1],原创 2017-02-21 12:00:10 · 609 阅读 · 0 评论 -
Java数据类型
Java数据类型结构图Java基本数据类型概述1 byte = 8 bit,也就是一字节(byte)占八位(bit)①整型 类型 存储需求 bit数 取值范围 byte 1字节 1*8 (-2的31次方到2的31次方-1) short 2字节 2*8 -32768~32767 int 4字节 4*8 (-2的63次方到2的63次方-1原创 2017-02-21 11:29:53 · 272 阅读 · 0 评论 -
Hadoop之MapReduce单词计数经典实例
MapReduce实现单词计数示意图MapReduce实现单词计数实例代码(Java)①Mapperimport java.io.IOException;import org.apache.commons.lang.StringUtils;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;impo原创 2017-02-20 19:25:45 · 1740 阅读 · 0 评论 -
Java网络编程实例
UDP传输1、接收端import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;/** * @author Hanlin Wang */public c原创 2017-02-28 21:42:11 · 720 阅读 · 0 评论 -
希尔排序(Shell Sort)
1、概述希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序按其设计者希尔(Donald Shel原创 2017-02-18 16:01:12 · 237 阅读 · 0 评论 -
插入排序(Insertion Sort)
1、概述有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n²)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一原创 2017-02-18 14:35:57 · 397 阅读 · 0 评论 -
Java面试题集锦
抽象类是否可实现(implements) 接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的 main 方法?抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的 main 方法。多态一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。Java中实现多态的机制是原创 2017-02-27 20:53:02 · 273 阅读 · 0 评论 -
选择排序(Selection Sort)
1、概述选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。排序趟数为n-1次,n为元素大小。2、算法原理对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续原创 2017-02-17 17:12:43 · 404 阅读 · 0 评论 -
Java IO流经典实例
IO流框架字节流1、FileInputStream&FileOutputStreamimport java.io.FileInputStream;import java.io.FileOutputStream;/** * @author Hanlin Wang */public class FileStream { public static void main(String[] ar原创 2017-03-01 21:38:27 · 2468 阅读 · 1 评论 -
Java遍历方法
Java中有几种我们常用的遍历数组或集合的方式,下面我来给大家简要总结一下这些遍历方式的各自的使用场景。一、for循环for循环的循环条件中定义了一个int类型的局部变量(变量名通常是i)。由于数组(Array)的元素可以通过角标访问,我们如果在循环体里得到了数组的角标,就可以对数组的一个或多个元素进行自定义的逻辑操作。同样的,对于有序集合(List),例如ArrayList、LinkedList,原创 2017-01-25 17:00:35 · 510 阅读 · 0 评论 -
Java匿名内部类
匿名内部类的全称是Anonymous inner type。注意,这里的“类”指代的是“type”,而不是class这个关键字。抽象类和接口可以使用匿名内部类。这里是一个小的匿名内部类的demo:public class Q { public static void main(String[] args) { A a = new A(); a.use(new原创 2017-01-25 16:14:02 · 210 阅读 · 0 评论 -
Java设计模式之行为型模式(状态模式)
状态模式(State)1、概述①定义状态模式允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。②适用场景一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。③结构State类为状态类,用来存储一些状态信息。Context类为上下文类,用来存储State。React类为反应器,根据Con原创 2017-02-09 20:35:39 · 247 阅读 · 0 评论 -
Java设计模式之行为型模式(策略模式)
策略模式(Strategy)1、概述①定义《JAVA与模式》一书中是这样定义策略模式的:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。策略模式的策略是什么意思?有朋友可能会疑惑:在Java中,“策略”和“方法”有什么区别?首先,策略与方法含义相近,都指应对问题的办法手段。策略比方法更加宏观,更加正式,策略更加强调地位作用,可原创 2017-02-09 21:54:26 · 248 阅读 · 0 评论 -
Java设计模式之行为型模式(模板模式)
模板模式1、概述①定义模板模式使用一个抽象类将各个具体类中相同或相近的成分抽取出来,并让各个具体类继承该抽象类,共享相同或相近的成分。具体类通过继承抽象类也可以重写模板类的方法。②结构UML图:Template为模板类,它是一个抽象类,集成了ConcreteClassA、ConcreteClassB、ConcreteClassC的相同部分:publicField属性,publicMethod()方原创 2017-02-10 10:53:56 · 287 阅读 · 0 评论