
Java语言
文章平均质量分 90
五星上炕
君子悟本,本立而道生。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java中的final关键字
final的字面意思是不变的,可以修饰类中的成员、类中的方法、类中方法的参数,类。为什么要使用final呢?这个问题,在不同的场景下有不同的原因。1、用final修饰类中的成员final修饰类中的成员又分为两种大的情况,一种是普通成员,另一种是对象成员。1.1.修饰普通成员修饰普通成员又分成三种情况,第一种是编译时赋值,第二种载入时赋值,第三种构建时赋值。1.1.1.编译时赋值...原创 2018-12-06 19:30:33 · 304 阅读 · 0 评论 -
Java过滤器模式
过滤器模式用于对一组对象实现过滤。首先定义一个过滤器接口。然后为过滤器接口提供不同的实现。再通过装饰器模式,允许不同的过滤器实现各种组合,如逻辑与逻辑或等。示例代码:import java.lang.reflect.InvocationTargetException;import java.util.ArrayList;import java.util.Collectio...原创 2019-01-09 15:38:39 · 1065 阅读 · 0 评论 -
Java设计模式之观察者模式
观察者模式原理很简单,当被观察者发生某个消息时,由观察者调用注册过的观察者的某个方法,将消息通知给观察者。这也可以说是一种发布定阅模式。Java JDK为实现观察者模式提供了相关的接口、抽象类有如下场景,发布者可以讲笑话、唱歌、讲故事,定阅者接收以上信息。可以有多个发布者、多个定阅者,并且是多对多的关系。1、Observable抽象类、Observer接口实现方式基本的实现过程是被...原创 2019-01-21 14:58:58 · 209 阅读 · 0 评论 -
Java设计模式之代理模式
平时在公司内网使用浏览器时,一般要设计代理服务器。因为我们的浏览器无法直接访问外网,而代理服务器能,因此将请求发送给代理服务器,由代理服务器替我们访问网页并返回结果。代理模式原理也是这样,不直接访问目标对象,而是中间加一个代理,再由代理访问真正的对象,当然代理一定实现了某些逻辑,否则就没有必要使用代理了。1、静态代理接口:public interface MyInterface ...原创 2019-01-15 21:09:39 · 4383 阅读 · 4 评论 -
Java设计模式之状态模式与策略模式
1、概念应用场景:一个对像处于不同的状态,调用相同的方法时产生不同的行为。目的:将对象本身的表示与对象状态的变迁逻辑解耦。角色:状态角色、上下文角色。状态代表上下文所处的状态,上下文为状态中方法的实现提供支持。实现方法:为状态定义抽象类,其中包含对上下文对象的引用,以便调用上下文的方法。包含负责改变、迁移状态的方法。 上下文类的实现包含一个状态实...原创 2019-01-21 18:15:20 · 1719 阅读 · 0 评论 -
Java设计模式之空对象模式
空对象模式很简单,不怎么重要。一般与工厂模式结合使用。工厂根据用户提供的条件创建具体的类,如果用户提供的条件工厂都不满足,那么就创建一个默认实现而不是返回null,这样的话程序还是可以继续运行下去。示例代码:package com.zhangxf.nullobject;// 电脑接口interface Computer { public void show(); publi...原创 2019-01-21 18:43:36 · 398 阅读 · 0 评论 -
Java设计模式之模板模式
从名字上看模板模式与元型模式有点像,但实际上它们有很大的不同。元型模式是创建系列中的模式,它的实现是先为类创建一个实例,然后对这个实例进行初化,并当成是元型。以后再需要这个类的实例时,不再是从头开始new,而是从已有的元型clone。当然,元型可能不只一个,这个时候就要用集合类进行管理了,在clone之前先去集合里查找匹配的元型。模板模式是行为系列中的模式。它的实现方式是在抽象类中定义一个...原创 2019-01-21 19:16:32 · 172 阅读 · 0 评论 -
Java设计模式之责任链模式
代码:package com.zhang.ReponsibilityChain;import java.awt.Toolkit;// 抽象基类abstract class MyLogger { public final static int DEBUG = 0; public final static int INFO = 1; public final static int ...原创 2019-01-16 16:29:59 · 151 阅读 · 0 评论 -
Java设计模式之命令模式
代码:package com.zhangxf.command;import java.util.ArrayList;import java.util.List;// 股票class Stock { // 股票名称 private String name; public Stock(String name) { this.name = name; } public...原创 2019-01-16 20:28:03 · 161 阅读 · 0 评论 -
Java设计模式之访问者模式
1、概念访问者模式涉及两个角色,一个是访问者,另一个是被访问的资源。访问者有多个具体的实现,资源也有多个具体的实现。访问者与资源可以有多种组合,假如有三种类型的访问者与三种类型的资源,则它们的组合方式就有3 * 3 = 9种。访问者解决的问题就是每种组合都能产生不同的行为。2、示例访问者模式解决的问题在日常工作中很常见,比如基于角色的访问权限控制。假如有三种类型的文档:普...原创 2019-01-22 16:57:31 · 1440 阅读 · 0 评论 -
Servlet Session属性监听器深入探索
Servlet关于对象属性监听器,接口有三类:HttpSessionAttributeListener、ServletContextAttributeListener、ServletRequestAttributeListener。每种接口有三个方法attributeAdded、attributeReplace、attributeRemove,分别对应监控属性的添加、替换、移除。如果仔细考究的话,...原创 2019-02-02 18:22:18 · 924 阅读 · 0 评论 -
DelayQueue实现原理及应用场景分析
DelayQueue基本原理DelayQueue是一个没有边界BlockingQueue实现,加入其中的元素必需实现Delayed接口。当生产者线程调用put之类的方法加入元素时,会触发Delayed接口中的compareTo方法进行排序,也就是说队列中元素的顺序是按到期时间排序的,而非它们进入队列的顺序。排在队列头部的元素是最早到期的,越往后到期时间赿晚。消费者线程查看队列头部的元素,注...原创 2019-04-02 19:49:24 · 23430 阅读 · 5 评论 -
LinkedBlockingDeque应用场景
BlockingDeque是多线程双头队列接口,LinkedBlockingDeque是其一种实现。Deque的特点是可以同时在队列的两头put、take元素。在TCP协议中,数据报有一个URG指针。正常情况下,接收者按数据包到达本机的顺序处理,而对于设置URG标志的数据报则会优先处理。本文用BlockingDeque模拟TCP的单工通道。正确情况下发送者按顺序将数据追加到Deque的...原创 2019-04-02 23:51:26 · 3382 阅读 · 1 评论 -
Java桥接模式
一个类有可能多个变化的维度。比如坦克大战游戏,一局游戏,可以选择地图,也可以选择坦克,坦克游戏这个类有变化两个维度。坦克有很多种、地图也有很多种,并且坦克与地图的种类会逐步的添加。所以,为每种坦克与地图的组合都创建一个类,以后每当新增加一种坦克时,都需要与所有的地图组合添加新类,添加地图也是这样,这会产生类爆炸问题。在桥接模式中,应该分别定义坦克与地图的接口并分别实现,而坦克游戏类则只包含坦克...原创 2019-01-08 18:01:19 · 133 阅读 · 0 评论 -
Java设计模式这备忘录模式
备忘录模式是一种行为模式,用来记录的中间状态,在需要时使对象恢复到某个中间状态。我们在写代码时,发现代码结构不理想或者出错,恢复到过去的某种状态就是这种情况,代码如下:package com.zhang.memento;import java.util.ArrayList;import java.util.List;// 备忘录类class Memento { privat...原创 2019-01-18 16:56:12 · 165 阅读 · 0 评论 -
Java设计模式之中介者模式
比如下五子棋,选手与选手之间通过“棋盘”交互的,而不是彼此之间直接交互。两个选手就是参与通信的角色,而棋盘就是中介者,它要记录选手共用的棋盘。代码如下:package com.zhangxf.mediator;import java.util.Scanner;// 选手类class Player { private String name; // 选手名字 private ch...原创 2019-01-17 21:39:20 · 1703 阅读 · 0 评论 -
Java中的访问控制符
Java中的访问控制符有四种:public、protected、default、private。它们的作用如下表:public表示全部开放,所有地方的类、子类都可以直接访问、覆盖,这个很好理解。protected表示受保护,记住一点,对于同一个包内的类,包括派生出的子类,它相当于public。另外对于包外的派生出的子类,它也相当于public。defalut就是没有修饰符,被称为友...原创 2018-12-06 19:55:56 · 278 阅读 · 0 评论 -
Java中回收资源的方法
1.回收对象占用的内存对于内存的回收,JAVA与C++不同。在C++中,对象占用的内存,其回收是明确无误的。在栈中分配的对象,当代码的运行离开对象的作用域时,系统自动调用对象的析构函数,然后回收内存。对于在堆中为对象分配的内存,即使离开分配时的作用域,系统也不回收内存,只有开发者调用如delete这样的操作符时,系统才会调用对象的析构函数,然后回收内存。如果发开者忘记调用delete回收堆中分...原创 2018-12-06 21:13:36 · 2686 阅读 · 0 评论 -
Java中的继承与多态
封装、继承、多态是面向对象语言的三大特性。多态本质上是将接口与实现细节分离,在具体的程序设计中是实现高扩展性的关键。特别是一些框架类型的项目,框架定义接口并提供默认的接口实现,开发者也可以提供自己的接口实现,从而实现框架的高可扩展性。1、多态与向上转型向上转型(upcasting),就是将派生类当成基类使用,这个理论上很容易理解。因为基类拥有的方法、成员,派生类一定也有,派生类中的方法、成...原创 2018-12-07 12:24:15 · 311 阅读 · 0 评论 -
Java中的接口
1、前言首先明确一点,本文接下来描述的接口,遵守的是Java的默认行为,比如在定义接口的方法时,没有加任何特定的关键字,这个时候java会默认为方法加上public访问控制符,在为接口定义成员时,Java会自动为其加上public static final修饰。在默认行为下,接口看起来会更纯粹。在JAVA最新的版本中,接口已经不像刚开始时那样单纯了。现在的版本中,可以通过default关键...原创 2018-12-07 16:30:21 · 155 阅读 · 0 评论 -
Java设计模式之装饰器模式
1、什么是装饰器模式?装饰器模式的核心是要有一个共通接口,然后共通接口又分成两大类实现。一种实现是被修饰者,它实现接口的主体功能。另一种是修饰者,它相当于一个饰品的功能,不改变被修饰者的实现,只是在原有实现上再加上点“修饰”。最后是构建者,它负责将被修饰者与“饰品”就是修饰者组装起来。装饰器模式涉及到的四个角色:共通接口 被修饰者:它实现共通接口,是主体功能。 饰品:这也实现共通接...原创 2018-12-20 18:16:41 · 720 阅读 · 0 评论 -
Java内部类典型用法
将一个类的定义嵌套在另一个类内部就是内部类(内部接口也可以),另一个类就是外部类。形式上很简单,关键问题是内部类有什么用,它能解决什么别人解决不了的问题?在Java编程思想第四版中文版中有如下说法“内部类对我们非常有用,因为利用它可以对那些逻辑上相互联系的类进行分组,并可控制一个类在另一个类里的可见性”。1、利用内部类实现分组先看“因为利用它可以对那些逻辑上相联系的类(或者接口)进行分...原创 2018-12-10 12:35:32 · 707 阅读 · 1 评论 -
Java构建器多态问题
示例代码如下:package com.zhangxf.test;class BaseClass { BaseClass() { System.out.println("BaseClass.BaseClass()"); show(); } void show() { System.out.println("BaseClass.show()"); }}public...原创 2018-12-11 16:22:48 · 224 阅读 · 0 评论 -
Java内部类的高级用法
1、内部类链接到外部类普通内部类可以访问外部类的一切,包括私有成员与方法。示例:public class Tree { class MyRoot implements Interface.Root { @Override public void show() { System.out.println("Root of " + NAME); } } private...原创 2018-12-11 15:00:50 · 559 阅读 · 0 评论 -
请教Java中的Lambda表达式有什么用?
1、问题不明白Java为什么要引入Lambda表达式。只有在很少的情况下用它来替换匿名类可能会少那么三、四行代码,可是,我们成千上万的代码都写了,谁会在乎这么一点呢?并且,Lambda表达式限制条件比匿名类多,匿名类它是类,类是面向对象语言的核心,它比Lambda表达式功能强多了。Lambda与性能也没有什么关系。想提高性能要优化算法、充分利用计算资源,与Lambda表达式有什么关系呢?...原创 2018-12-17 20:56:39 · 2472 阅读 · 1 评论 -
Java模式之工厂模式
一般理解,工厂就是批量生产某种东西的地方,相对的,Java中的工厂模式就是创建对象的地方,是创建类模式中的一种。它解决的主要问题就是将“对象的创建逻辑与操作对象的业务逻辑分离解耦”,分别在不同的地方实现,而不是混杂在一起,目的是提供更清晰更容易扩展的代码。工厂模式有简单工厂、方法工厂、抽象工厂三类。1、简单工厂模式简单工厂模式适用于生产的“产品”种类很少,只需要提供一种工厂的场景。假设...原创 2019-01-03 16:44:18 · 230 阅读 · 0 评论 -
Java设计模式之迭代器模式
迭代器用来按某种顺序取出集合中的元素。代码:package com.zhangxf.iterator;// 迭代器接口interface MyIteratorInf<T> { public boolean hasNext(); public T next();}// 支持正向迭代器的类要实现这个接口interface ForwardIteratorAble&l...原创 2019-01-17 15:32:26 · 228 阅读 · 0 评论 -
Java NIO AIO介绍、示例及性能分析
参考:http://tutorials.jenkov.com/java-nio/index.html1、Java NIO TutorialNIO最早出现在Java 1.4版本中,从那个时候开始,Java至少有两套可用的IO方面的API集,一套是标准的,另一套就是NIO,两者的工作原理不同。Java NIO: Channels and Buffers在标准IO系统中,用户直接与字节流...原创 2019-04-12 17:52:10 · 3825 阅读 · 0 评论