自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Song's Blog

Just Enjoy Coding

  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 设计模式之观察者模式(Observer)与Java委托

1.观察者模式的概念观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。2.观察者模式的结构图 Subject类:抽象通知者,它把所有对观察者对象的引用保存在一个聚集里,每个通知者都可以有任何数量的观察者。抽象通知者提供一个接口,可以增加和删除观察者对象。 ConcreteSu...

2018-05-10 09:05:09 1388

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

2018-05-09 19:05:01 908

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

1.原型模式的概念用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。2.原型模式的结构图 Prototype(原型类):声明一个克隆自身的类或接口,这个类或接口通常会实现Cloneable接口。 ConcretePrototype(具体原型类):被复制的对象,实现一个克隆自身的操作。 Client(客户端):让一个原型克隆自身,从而创建一个新的对象。3.原...

2018-05-08 23:28:43 356

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

1.外观模式的概念外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,它是一种对象结构型模式。2.外观模式的结构图 Facade类:外观类,知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象。 SubSystem Classes:子系统类集合,实现子系统的功能,处理Facade对象指派的任务。注意子类中没有...

2018-05-08 08:18:07 256

原创 设计模式之模板方法模式(TemplateMethod)

1.模板方法模式的概念模板方法模式,定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。2.模板方法模式的结构 AbstractClass:实现一个模板方法,定义了算法的骨架,具体子类将重定义PrimitiveOperation以实现一个算法的步骤。AbstractClass其实就是一个抽象模板,定义并实现...

2018-05-07 23:52:10 13579 2

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

1.建造者模式的概念  建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。   建造者模式又叫“生成器模式”,建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到他们,而具体建造的过程细节就不需要知道了。2.建造者模式的结构图...

2018-05-07 16:31:42 198

原创 设计模式之工厂方法模式(Factory)

1.工厂方法模式的概念定义一个创建对象的工厂接口,让子类决定实例化哪一个类,将实际创建工作推迟到子类当中。2.工厂方法模式结构图 AbstractCreator(抽象工厂):声明工厂方法,该方法返回一个Product类型的对象。任何在模式中创建对象的工厂类必须继承或者实现这个接口,在实际的系统中,这个类常用Java抽象类来实现。 ConcreteCreator(具体工厂):重定义工...

2018-05-05 13:01:26 705

原创 设计模式之简单工厂模式(SimpleFactory)

1.简单工厂模式概念  简单工厂模式又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式(同属于创建型模式的还有工厂方法模式,抽象工厂模式,单例模式,建造者模式)。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。2.简单工厂模式的结构由上面的结构图可以看到,...

2018-05-05 09:47:02 345

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

1.代理模式的概念为其他对象提供一种代理,以控制对这个对象的访问。2.代理模式的结构 Subject类:定义了RealSubject和Proxy的公共接口,这样就在任何使用RealSubject的地方都可以使用Proxy RealSubject类:定义Proxy所代表的真实实体 Proxy类:保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代...

2018-05-04 22:25:13 291

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

1.装饰模式的概念  动态的给一个对象添加一些额外的职责,同时又不改变其结构。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。就增加功能来说,装饰模式比生成子类更加灵活。2.装饰模式的结构抽象组件角色(Component):定义一个对象接口,可以给这些对象动态的添加职责。具体组件角色(ConcreteComponent):被装饰者,定义了一个将要被装饰...

2018-05-04 10:07:54 161

原创 泛型总结之通配符

一、介绍通配符之前  首先在引出通配符之前先看看数组的一种特殊行为:可以向导出类型的数组赋予基类型的数组引用,先看看代码:package com.jxs.chapeter15;class Fruit{}class Apple extends Fruit {}class Jonathan extends Apple {}class Orange extends Fruit...

2018-04-13 00:20:21 463

原创 静态变量、静态代码块、成员变量和构造函数在Java中的初始化顺序

一、Java的初始化顺序的测试有一次在看代码的时候突然想到这些静态变量,静态代码块,成员变量,非静态代码块和构造函数在初始化的时候到底谁在前谁在后呢?带着这个问题LZ写了一个代码来对他们的初始化顺序进行了研究,先看看代码和执行结果吧:package com.jxs.chapeter5.initialization;import org.junit.Test;class Fath...

2018-04-10 18:49:51 1516

原创 this关键字总结

经常使用到this这个关键字,关于这个关键字的用法和注意有哪些呢,这里对this关键字做一个总结,加深自己对这个关键字的理解和印象。一、this的三种常见用法1.this调用本类中的属性,也就是类中的成员变量感觉用代码表述更为直白,代码示例:package com.jxs.chapeter5;import org.junit.Test;/** * Create...

2018-04-10 14:40:35 3747

原创 Java中String的无意识的递归现象

  Java中的每个类从根本上都是继承Object,标准容器类自然也不。因此容器类都有toString()方法,并且覆写了这个方法,使得它生成的String结果能够表达容器自身,以及容器所包含的对象。例如ArrayList.toString(),它会遍历ArrayList中包含的所有对象,调用每个元素上的toString()方法: Generator接口:package com.jxs....

2018-04-08 15:20:59 470

原创 Spring学习笔记之事务管理

一、事务的概念1.什么是事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。 2.事务的特性(1)原子性...

2018-03-30 21:50:02 167

原创 Spring学习笔记之jdbctemplate操作

一、Spring对不同持久化技术的支持1.Spring框架为一站式框架,针对每一层都有解决技术,在Dao层,使用jdbcTemplate2.对ORM持久化技术的模板类 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core.JdbcTemplate Hibernate org.springframew...

2018-03-30 21:35:17 246 1

原创 Spring学习笔记之Aop

一、Aop概述1.Aop概念面向切面编程,扩展功能通过不修改源代码实现;Aop采用横向抽取机制,取代了传统纵向继承体系重复性代码2.Aop原理原始修改代码的过程:public class User { // 添加用户的用法 public void add() { // 添加逻辑 // 修改源代码,添加日志逻辑(功能...

2018-03-30 21:32:45 182

原创 Spring学习笔记之注解

一、Spring注解开发准备1.导入jar包commons-logging-1.2.jarlog4j-1.2.17.jarspring-beans-5.0.4.RELEASE.jarspring-context-5.0.4.RELEASE.jarspring-core-5.0.4.RELEASE.jarspring-expression-5.0.4.RELEASE.jar...

2018-03-30 21:28:52 172 1

原创 Spring学习笔记之IOC

一、Spring的相关概念1.Spring是开源的轻量级框架2.Spring核心主要两部分:(1)aop:面向切面编程,扩展功能不是修改源代码实现。 (2)ioc:控制反转。 例如有一个类,在类里面有个方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象。3.Spring是一站式框架(1)Spring在j...

2018-03-30 21:23:45 146

转载 log4j.properties 详解与配置步骤

一、入门实例1.新建一个JAva工程,导入包log4j-1.2.17.jar,整个工程最终目录如下:2.src同级创建并设置log4j.properties### 设置###log4j.rootLogger = debug,stdout,D,E### 输出信息到控制抬 ###log4j.appender.stdout = org.apache.log4j.Console...

2018-03-30 21:14:27 492

转载 Java中连接字符串时使用+号与使用StringBuilder的区别

字符串是Java程序中最常用的一种数据结构之一。在Java中的String类已经重载的”+”。也就是说,字符串可以直接使用”+”进行连接,如下面代码所示:String s = "abc" + "ddd";  但这样做真的好吗?当然,这个问题不能简单地回答yes orno。要根据具体情况来定。   在Java中提供了一个StringBuilder类(这个类只在J2SE5及以上版本提供,以前

2018-01-29 16:35:10 1905 1

转载 MySQL的查询、子查询及连接查询

一、mysql查询的五种子句where(条件查询)、having(筛选)、group by(分组)、order by(排序)、limit(限制结果数)1、where常用运算符:比较运算符> , < ,= , != (< >),>= , <= in(v1,v2..vn) between v1 and v2 在v1至v2之间(包含v1,v2)逻辑运算符not ( ! ) 逻辑

2017-12-28 10:31:38 250

转载 提高SQL的查询效率

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null;可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t

2017-12-27 20:42:58 186

转载 JAVA深入研究——Method的Invoke方法

在写代码的时候,发现Method可以调用子类的对象,但子类即使是改写了的Method,方法名一样,去调用父类的对象也会报错,虽然这是很符合多态的现象,也符合java的动态绑定规范,但还是想弄懂java是如何实现的,就学习了下Method的源代码。 Method的invoke方法1.先检查 AccessibleObject的override属性是否为true。 AccessibleObject是Me

2017-12-27 13:50:52 381

转载 Java反射详解

本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。 下面开始正文。 【案例1】通过一个对象获得完整的包名和类名package Reflect;/** * 通过一个对象获得完整的包名和类名 * */class Demo{ //other codes...}class hel

2017-12-27 13:46:36 136

原创 Servlet详解(二)

1.配置Servlet初始化参数在Servlet的配置文件中,可以使用一个或多个标签为servlet配置一些初始化参数。 Servlet配置文件web.xml代码如下:web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst

2017-10-27 09:07:18 225

原创 使用Intellij IDEA新建Web项目

在学习Servlet的过程中,发现大多数的教程都是使用MyEclipse或者Eclipse来创建Web项目,这让一直使用高逼格的LZ很是不爽,于是自己配置了一下使用Intellij IDEA新建了Web项目。LZ这里使用的Intellij IDEA 2017.1.4版本。我们先来看看这个版本的IDEA骚气的启动界面吧~~1.启动了IDEA后,在开始界面处点击Create New Project2.选

2017-10-24 14:25:18 30830 12

原创 Servlet详解(一)

1.Servlet简介Servlet是sun公司提供的一门用于开发动态web资源的技术。 Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: (1)编写一个Java类,实现servlet接口。 (2)把开发好的Java类部署到web服务器中。 按照一种约定俗成的称呼习惯,通常我们也把实现了ser

2017-10-24 12:11:21 247

原创 Tomcat安装配置及CATALINA_HOME environment variable is not defined correctly问题的解决

1.安装Tomcat服务器登录Tomcat的官方网站对Tomcat进行下载,LZ下载的是Tomcat 9版本,网站https://tomcat.apache.org/download-90.cgi 选择相应版本下载即可。然后下载到电脑上进行解压,切记解压后的Tomcat文件夹不可放在含有中文或者空格的路径下。2.配置Tomcat的环境变量配置Tomcat的环境变量也比较简单,在系统变量中新建,在变量

2017-10-18 14:10:36 53663 34

原创 使用Dom4j解析XML文档

1.Dom4j简介Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。Dom4j是一个非常优秀的Java XML的API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括

2017-10-16 09:40:12 444 1

原创 使用JAXP进行DOM解析

1.JAXPJAXP 开发包是J2SE的一部分,它由javax.xml、org.w3c.dom 、org.xml.sax 包及其子包组成。在 javax.xml.parsers 包中,定义了几个工厂类,程序员调用这些工厂类,可以得到对xml文档进行解析的 DOM 或 SAX 的解析器对象。2.使用JAXP进行DOM解析javax.xml.parsers 包中的DocumentBuilderF

2017-10-10 18:53:10 218

原创 SAX解析

1.为何要使用SAX进行及解析在使用 DOM 解析 XML 文档时,需要读取整个XML文档,在内存中构架代表整个DOM树的Doucment对象,从而再对XML文档进行操作。此种情况下,如果XML文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。而SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。2.SAX解析机制SAX采用事件处理的方式解析XML文

2017-10-10 16:44:33 388

原创 使用BeanUtils操作Javabean

最近学习使用到了BeanUtils对Javabean进行一些操作和处理,回想从安装BeanUtils到使用其对Javabean进行操作处理和运用,此处做个简单的总结:  首先是下载BeanUtils工具包,注意需要下载logging.jar并导入后才可使程序正常运行:  1.登录https://commons.apache.org/proper/commons-beanutils/down

2017-09-27 15:16:46 1173

原创 大话数据结构(七)——二叉树创建与遍历(递归、非递归)的java实现

什么是二叉树呢?二叉树是n(n>=0)个结点的有限组合,该集合或者为空集,或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。二叉树的具体结构如下图所示:    二叉树的遍历这里介绍三种方法:前序遍历,中序遍历和后序遍历。前序遍历:前序遍历的规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再遍历右子树。若前序遍          

2017-05-30 11:05:27 477 2

原创 大话数据结构(六)——队列的两种java实现方式

记得说桟的时候用了羽毛球的例子:羽毛球盒只有一个端口,取出和放入都得从这个口进行,并且放入和取出的原则遵循“后入先出”的原则。而队列与桟的原则相反,桟的原理就好比这个羽毛球盒子是两头开的,放入的时候从一个口放入,而取出的时候从另一端取出,这样就使得先放入的先取出,后放入的后取出。这种先进先出的数据结构就是队列。    说的官方一点,队列就是只允许在一端进行插入操作,而在另一端进行删除操作的线性

2017-05-27 18:46:10 1160

原创 大话数据结构(二)——线性表链式存储结构(单链表)的java实现

线性表的链式存储结构的特点是用一组任意的存储单元存储线性表中的数据元素,这组存储单元可以是连续的,也可以是不连续的。这也就意味着这些数据可以存在内存未被占用的任意位置。在链式存储结构中由于存在以上特性,所以它除了要存数据元素信息外,还要存储它的后继元素的存储地址。    因此,为了表示每个数据元素a[i]与其直接后继数据元素a[i+1]之间的逻辑,对数据元素a[i]来说,除了存储其本身的信息之

2017-05-25 09:55:46 565

原创 大话数据结构(一)——线性表顺序存储结构的java实现

在看《大话数据结构》的时候,里面诙谐的语言和讲解吸引了我,但是这本书是用C来实现的,但是作为一个手撸java的人就想着用java来实现一下这些数据结构,于是就有了这些大话数据结构之java实现。哈哈,感觉这样会让自己的理解加深不少。    好了,不多说啦,今天是实现线性表顺序存储结构,首先我们来看看什么是线性表。    每次去食堂吃饭就会看到排的一条条的长队,其实每一条队伍就是一个线性表,

2017-05-25 09:19:32 981 2

原创 大话数据结构(五)——栈的两种java实现方式

在我们生活当中经常会看到这样一种操作,比如我们往一个空羽毛球盒子里面放羽毛球(个人比较喜欢羽毛球,嘿嘿),放完后再将羽毛球一个一个取出的时候会发现,最先放进去的羽毛球往往最后才取出来,相反,最后放入的羽毛球往往最先取出。这个例子形象的说明了栈的操作方式,下面我们来看看什么是栈,以及栈的一些操作。    那么什么是栈呢?栈就是限定在表尾进行插入和删除操作的线性表。我们将允许插入和删除的一端称为栈

2017-05-24 12:44:52 738

原创 大话数据结构(四)——双向链表的java实现

在实现了单向链表后,我们在使用单向链表中会发现一个问题:在单向链表中查找某一个结点的下一个结点的时间复杂度是O(1),但是查找这个结点的上一个结点的时候,时间复杂度的最大值就变成了O(n),因为在查找这个指定结点的上一个结点时又需要从头开始遍历。    那么该如何解决这个困难呢?我们可以在单链表的每个结点中,再设置一个指向前驱结点的指针域,这就构成了双向链表。在双向链表中含有两个指针域,一个指

2017-05-23 16:47:54 484

原创 大话数据结构(三)——单向循环链表的java实现

首先,我们来说说什么是单向循环链表:单向循环链表就是单链表的另外一种表现形式,其结构特点是最后一个指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环,就像将一根铁链子首尾连接形成一个铁链环一样。在单链表中,由于每个结点只存储了向后的指针,到了尾标志就停止了向后链的操作,这样当中的某一结点就无法找到他的前驱结点了,即无法回到之前的结点。这就体现出了单链循环链表的

2017-05-22 22:42:24 1600 1

空空如也

空空如也

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

TA关注的人

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