java程序设计深入学习
文章平均质量分 93
从Java的基本语法、JVM相关知识、Java内存模型、Java的Collection、I/O等基础知识知道对于Spring等主流的框架的理解,还有Java相关的项目管理等工具的使用,边学习边总结
黎辰
其实一切只为一个理由,一切理由在一个人面前也都沦为借口
展开
-
Java PathFinder(一) Java PathFinder基于Eclipse的安装配置及使用
前言在研究JPF时,发现存在两个版本的JPF,一个是在sourceforge上代码库,自2006后不再更新,但用svn签出;一个是NASA软件工程实验室自建的Mercurial版本库服务器上代码库,现在依然在开发更新,并且提供的完整的在线WIkI文档。我们使用的是NASA的.准备材料:eclipsejpf-corejdk 1.8或以上安装过程TortoiseHg官网如果要下载JPF的相关组原创 2016-05-14 13:13:49 · 8073 阅读 · 8 评论 -
Java 设计模式(十三) 接口隔离原则(ISP)
接口隔离原则(Interface Segregation Principle)ISP基本概念接口实例接口(Object Interface):一个类的实例对象是对一个类型的事物的描述,这时一种接口。类接口(Class Interface):Java中interface关键定义的接口,也是我们通常理解的狭义的接口ISP定义客户端(模块)不应该依赖它不需要的接口(接口的纯粹性) 一个模块应该原创 2016-05-11 15:08:07 · 7831 阅读 · 0 评论 -
Java 设计模式(十二) 依赖倒置原则(DIP)
依赖倒置原则(Dependence Inversion Principle)依赖倒置原则(DIP)的基本概念原始定义高层模块不应该依赖低层模块,两者都应该依赖其抽象抽象不应该依赖细节细节应该依赖抽象Java中的具体含义模块间的依赖通过抽象发生 实现类之间不发生直接的依赖关系其依赖关系通过接口或者抽象类产生 接口或抽象类不依赖于具体实现实现类依赖接口或抽象类依赖倒置(DIP)的好处原创 2016-05-09 20:03:14 · 4749 阅读 · 0 评论 -
Java 设计模式(十一) 里氏替换原则(LSP)
里氏替换原则(Liskov Substitution Principle)LSP的基本概念定义: 所有引用基类的地方必须能透明地使用其子类的对象只要父类能出现的地方子类就可出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类(封装造成的多态性)规范 子类必须完全实现父类的方法 在类中调用其他类时必然要使用父类或者接口,如果子类中不支持父类中的方法,自然就原创 2016-05-08 19:30:40 · 3378 阅读 · 1 评论 -
Java 设计模式(十) 单一职责原则(SRP)
单一职责原则(Single Responsibility Principle)SRP 基本概念单一职责原则定义:应该有且仅有一个原因引起类的变更,也就是接口或类和职责的关系是一一对应的。难点:职责的划分: 在不同情景和生产环境下我们对职责的细化是不同的(职责单一的相对性)单一职责原则提出的是一个评价接口是否优良的标准,但是职责和变化原因是不可度量的,因项目而异,因环境而异(不可度量性)优势原创 2016-05-08 17:55:41 · 5201 阅读 · 3 评论 -
Java 设计模式(九) Strategy(策略)模式及Spring引申
Strategy基本概念策略模式(Strategy Pattern):定义一组算法,将每个算法都封装起来,并且他们之间可以互换。使用面向对象的继承和多态机制实现Strategy中的角色:Context封装角色: 它叫做上下文角色,起承上启下的封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。Strategy抽象策略角色: 策略,算法家族的抽象,通常为接口,定义每个策略或原创 2016-05-06 14:10:26 · 4271 阅读 · 0 评论 -
Java 设计模式(八) Proxy(代理)模式及Spring引申
Proxy基本概念代理模式(Proxy pattern)是一种使用率非常高的模式:为其他对象提供一种代理以控制对这个对象的访问代理模式也叫作委托模式,它是一项基本设计技巧Proxy中的角色Subject(抽象主题类):既可以是抽象类也可以是抽象的接口RealSubject(具体的主题角色):是被委托角色或者说是被代理角色Proxy(代理主题角色):是委托类或者代理类: 它负责对真实的角原创 2016-05-06 11:28:19 · 3951 阅读 · 0 评论 -
理解Tomcat(一) 利用Digester解析xml文件
Tomcat与Digester的关系我们利用Tomcat做服务器开发Web应用时,总会有一个配置文件web.xml,进行一些对象的实例化或是Servlet的映射的配置,所以要想理解Tomcat的一些配置问题,首先需要了解Tomcat是如何利用xml文件来进行配置的?答案就是利用开源的Digest进行XML的解析,然后构建响应的容器或者完成其他的配置,这些我会在单篇文章中具体深入讲解,作为这个专题的第原创 2016-05-01 09:34:29 · 7243 阅读 · 4 评论 -
Java设计模式(七) COR(责任链)模式及Tomcat引申
基本概念定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有对象处理它为止。COR(责任链)模式的角色分工: Handler:抽象处理者,定义一个处理请求的接口Concrete Handler: 具体处理者,处理请求的具体类,或者传给”下家”。Requester:发出请求等待处理的类,它无需关注到底是哪个具体的原创 2016-04-26 18:57:10 · 7641 阅读 · 0 评论 -
Java设计模式(六) Command(命令模式)及Tomcat引申
基本概念Command命令模式是一个高内聚的模式(满足单一职责原则)概念:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式在项目中频繁使用,封装性和拓展性都有很好的保障Command模式中的角色分工: Client:创建一个命令并决定接受者Command:命令接口,定义一个抽象方法Concrete Com原创 2016-04-26 13:08:35 · 6576 阅读 · 0 评论 -
Java设计模式(五) Observer(观察者)模式及Tomcat引申
基本概念Observer观察者模式(Observer Pattern)又称为发布订阅模式(Publish/subscribe)定义对象间的一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并且自动更新根据单一职责原则,每个类的职责是单一的,我们可以通过触发机制,形成一个触发链,把各个单一的职责串联成真实世界中的复杂的逻辑关系。观察者模式的角色分工(JDK中提供了原创 2016-04-25 19:38:03 · 6543 阅读 · 2 评论 -
Java设计模式(四) Facade(门面)模式及Tomcat引申
基本概念Facade的概念为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。我们需要以一种比原有方式更简单直接的办法与系统交互,对于讨论的复杂系统我们只有针对性地使用它的一个子集因为Facade模式可以封装多个子系统,可以减少客户必须处理的对象的数量要求一个子系统的外部与内部的通信必须通过一个统一的对象进行。也就是说Facade对象是外界对于子原创 2016-04-25 14:38:28 · 5742 阅读 · 0 评论 -
JVM基础(三) JVM内存管理
内存的划分本文所谈的内存是指的运行时数据区域,分为:共享的数据区: 堆(Heap)方法区(Method Area)线程隔离的数据区: 虚拟机栈(VM Stack)本地方法栈(Native Method Stack)程序计数器(Program Counter Register) Java线程栈的内存管理(隔离内存)线程隔离的性质意味着线程和栈是关联的,每个线程在创建时会创建自己的原创 2016-04-24 10:49:44 · 1370 阅读 · 0 评论 -
JVM基础(二) 实现自己的ClassLoader
为何要花时间实现自己的ClassLoader虽然人生的乐趣很大一部分来自于将时间花在有意思但是无意义的事情上,但是这件事绝对是有意思并且有意义的,有以下几个情景是值得我们花费时间实现自己的classLoader的:我们需要的类不一定存放在已经设置好的classPath下(有系统类加载器AppClassLoader加载的路径),对于自定义路径中的class类文件的加载,我们需要自己的ClassLoa原创 2016-04-20 16:37:51 · 3241 阅读 · 0 评论 -
JVM基础(一) ClassLoader的工作机制
对ClassLoader的理解顾名思义,Class loader 最基本的功能就是将Class加载到JVM中在加载过程中,Class loader 能够审查每个类应该由哪个class loader加载,采用双亲委派模型来实现除了加载外,class loader也负责将加载后的字节码重新解析成JVM同一要求的对象格式类加载器对于所加载类的影响每一个类加载器都有一个独立的命名空间独立的命名空原创 2016-04-19 22:59:11 · 6675 阅读 · 0 评论 -
Java设计模式(三) Visitor(访问者)模式及多分派场景应用
基本概念Visitor封装一些作用于数据结构中的各元素的操作,不同的操作可以借助新的visitor实现,降低了操作间的耦合性访问者可以将数据结构和对数据的操作解耦,使得增加对数据结构的操作不需要取修改数据结构,也不必去修改原有的操作,而执行时再定义新的Visitor时闲着就行了(在操作添加上易拓展)模式中角色分工Visitor:抽象访问者,在重载的visit函数中声明访问者可以访问的对象。原创 2016-04-14 15:32:41 · 8081 阅读 · 0 评论 -
Java设计模式(二) Decorator(装饰)模式及Java I/O引申
基本概念Decorator职能上: 动态地给一个对象添加一些额外的职责,就增加功能来说Decorator比从基类生成子类更灵活,而且能有效地控制子类的数量,防止子类爆炸(后面的特性会印证这个优势)。结构(工作原理)上: 可以创建始于Decorator对象(负责新功能的对象)终于原对象的一个对象链实现上: Decorator模式将Decrator对象(能够提供额外的功能)与这些对象的使用原创 2016-04-13 19:37:54 · 4704 阅读 · 0 评论 -
Java设计模式(一) Adapter(适配器)模式及I/O实例引申
基本概念适配器模式是一种补救模式,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。是包装模式(对类或者对象进行包装)的一种,分为类适配器和对象适配器,是从实现层面上划分。这个模式中包含三种角色:Target目标角色:该角色定义我们要将原接口转化为何种接口,也就是我们期望得到的接口(方便多态地使用)Adaptee源角色:需要利用适配原创 2016-04-13 13:59:03 · 2679 阅读 · 0 评论 -
Java I/O(一) NIO概述
基本概念BIO:是阻塞I/O,不管是磁盘I/O,还是网络I/O,数据在写入OutputStream和InputStream都可能发生阻塞,一旦有阻塞,线程会失去CPU的使用权(阻塞)。NIO:简单的说就是非阻塞式I/O(单个I/O阻塞时不阻塞线程),一个线程可以负责多个I/O连接(利用serverSocketChannels来接收),取一个准备好接收数据的连接(注册到Selector轮询调度),原创 2016-04-12 23:01:19 · 3346 阅读 · 0 评论 -
Maven项目管理(二) maven中心库映像替换解决墙的问题
Maven的线上仓库maven的线上仓库是maven正常执行的保障,因为国内的网络环境问题,maven的中心库可能会出现速度慢的现象,可以采取利用国内的镜像来替代中心库的方法解决这一问题Maven映像的配置我的环境是win10 首先maven - v 查找到maven的安装路径 找到路径后,根据这个路径找到目录下的conf文件夹下的settings.xml,最好用IDE打开,这样xml的树形原创 2016-04-07 18:47:29 · 1769 阅读 · 0 评论 -
Maven项目管理(一) IntelliJ Idea+Maven环境搭建与基于命令行的基本使用
MavenMAVEN是一个强大的构建工具,ItelliJ Idea 是个强大的IDE,帮他们联合起来使用,将会是多么美妙的事情。但是IDE中集成的Maven总使习惯使用命令行的我们头大,不想为了使用IDE重新学习如何使用怎么办,那么就通过配置环境兼容就好了。Maven的准备安装之前通过terminal输入java -version,查看是否已经安装JAVA的JDK和JRElinux下apt-ge原创 2016-04-06 21:29:46 · 16603 阅读 · 1 评论 -
Java并发容器(一) CocurrentHashMap的应用及实现
CocurrentHashMap的优势首先常用三种HashMap包括HashMap,HashTable和CocurrentHashMap:HashMap在并发编程过程中使用可能导致死循环,因为插入过程不是原子操作,每个HashEntry是一个链表节点,很可能在插入的过程中,已经设置了后节点,实际还未插入,最终反而插入在后节点之后,造成链中出现环,破坏了链表的性质,失去了尾节点,出现死循环。Has原创 2016-04-11 21:37:54 · 24478 阅读 · 8 评论 -
Java学习笔记(十一)Collections framework之collection接口,iterator接口
Collection最基本的集合接口,包含对于集合的基本的8个操作: 向集合中添加元素删除集合中的元素修改集合中的元素查找集合中的元素拷贝集合中的元素判断集合间的等价性获取集合的规模(大小)获取集合的hashCode 添加操作 函数头 函数描述 public boolean add(Object element) 向集合中添加单个元素,如果添加成功返回true,否则返原创 2015-08-07 00:01:29 · 766 阅读 · 0 评论 -
Java学习笔记(十)collections框架概述
框架的接口框架的接口就是该框架支持的抽象的数据类型。 包含四种核心的类型,根据是否有序,又延伸出了两种具体的类型。 CollectionColletion接口可以理解为是一个宽泛概念的存储数据元素的集合。它可能支持元素重复也可能不支持,它可能支持有序或者不支持,与它的具体实现相关。 - List接口是Collection的一个特化,它的元素会重复,但是有序。 - Set接口是Collecti原创 2015-08-05 23:42:17 · 1037 阅读 · 0 评论 -
Java学习笔记(九) Bitset
Bitsetbitset是Java的collections中不太常用的,它提供了高效的位操作的方法。创建bitsetpublic BitSet()public BitSet(int nbits)默认情况下初始是64位,如果设定了大小,那么会创建一个容量为最接近设定值的64的整数倍的空间的bitset操作bitset既可以对于bitset里的某一位进行操作,也可以针对整个bitset进行操作。操作单原创 2015-08-03 23:52:25 · 797 阅读 · 0 评论 -
Java学习笔记(八)Dictionary,HashTable,Properties
利用key进行索引的数据结构DictionaryDictionary是一个抽象类,它的所有方法都是抽象的,这些性质导致它更像一个intertace(接口).但是这个类出现时还不存在接口的概念. 函数结构如下: 函数名称 函数描述 Dictionary() 构造函数,被非抽象子类隐式调用 elements() 获得这个dictionary中的所有的key get( Obje原创 2015-08-01 23:16:26 · 7201 阅读 · 1 评论 -
Java学习笔记(七) Enumertation接口的理解和使用和StringTokenizer的使用
Enumeration接口接口中的函数 函数名称 函数的作用 hasMoreElements() 检查当前集合中还有没有下一个元素 nextElement() 获得集合中的下一个元素如果当前集合中已经没有元素,那么会返回NoSuchElementException异常。 一般情况下利用Enumeration接口来遍历采取下面的格式: Enumeration enum原创 2015-07-29 22:20:37 · 841 阅读 · 0 评论 -
java学习笔记(六) collections--stack
stack是很常用的一个数据结构,满足LIFO(后进先出)的性质,java对stack这个数据结构进行了封装它的函数也很简单,我们一个一个来学习----------------------------------构造stack---------------------------------------------public Stack()一个动态变化空间的栈,当空间不够的时候会原创 2015-07-28 22:33:25 · 801 阅读 · 0 评论 -
java学习笔记(五)collections--vector
Vector是很有用的一个数据集合,我们可以把它看成一个长度不确定的动态空间分配的数组,也可以看做一个链表,那么下面介绍一些vector中常用的操作涉及到的函数:----------------------------------------------创建一个vector------------------------------------------------------publi原创 2015-07-27 23:44:44 · 813 阅读 · 0 评论 -
java学习笔记(四)networkStream
----------------------------------------------URL----------------------------------------------------------------------java.net.URL代表对一个uniform resource locator(统一资源定位系统),类似http://metalab.unc.edu/ja原创 2015-07-25 23:41:49 · 1257 阅读 · 0 评论 -
java学习笔记(三) FileStream
文件的读取主要是用java.io.FileInputStreamjava.io.FileInputStream那么接下来我分为读文件和写文件两部分来介绍FileStream,也就是文件流-----------------------------------------FileInputStream---------------------------------------------原创 2015-07-22 23:30:24 · 1732 阅读 · 0 评论 -
java学习笔记(二) InputStream
这个类的命名空间结构如下:java.io.InputStream 它的函数结构如下:public abstract int read() throws IOExceptionpublic int read(byte[] data) throws IOExceptionpublic int read(byte[] data, int offset, int lengt原创 2015-07-18 22:39:55 · 683 阅读 · 0 评论 -
java学习笔记(一)OutputStreams
这篇博客主要介绍一下输入输出流中OutputStream这个抽象类首先介绍一下这个类的结构:OutputStream定义在java.id.OutputStream包含四个函数:public abstract void write(int b) throws IOExceptionpublic void write(byte[] data) throws IOException原创 2015-07-15 23:11:26 · 970 阅读 · 0 评论