编程语言
文章平均质量分 88
java.雅玲
IT互联网
展开
-
Java设计模式 — 外观模式
外观模式外观模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的外观对象进行。外观模式是一个高层次的接口,使得子系统更易于使用。医院的例子现代的软件系统都是比较复杂的。假如把医院比作一个子系统,按照部门职能,这个系统划分为挂号、门诊、划价、化验、收费、取药等。看病的人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事。解决这种不便的方法便是引入外观模式,医院可以设置一个接待员的位置,由接待员负责代为挂号、划价、缴费、取药等。病人只需要接触接待员,由原创 2021-02-27 15:30:42 · 299 阅读 · 0 评论 -
Java设计模式 — 建造者模式
什么是建造者模式?发现很多框架的源码使用了建造者模式,看了一下觉得挺实用的,就写篇文章学习一下,顺便分享给大家。建造者模式是什么呢?用一句话概括就是建造者模式的目的是为了分离对象的属性与创建过程,是的,只要记住并理解红字的几个部分,建造者模式你就懂了。为什么需要建造者模式?建造者模式是构造方法的一种替代方案,为什么需要建造者模式,我们可以想,假设有一个对象里面有20个属性:属性1属性2…属性20对开发者来说这不是疯了,也就是说我要去使用这个对象,我得去了解每个属性的含义,然后在构造函数原创 2021-02-27 14:35:10 · 272 阅读 · 0 评论 -
Java — package和import关键字
1. package包其实就是目录,特别是项目比较大,java 文件特别多的情况下,我们应该分目录管理,在java 中称为分包管理,包名称通常采用小写。软件包机制:①为了解决类的命名冲突问题,在类名前加命名空间(包机制)。②在java中使用package语句定义包.(单包,复包)。③package语句只能出现在.java源文件的第一行。④package定义的格式,通常采用公司域名倒叙方式。例如:com.bjpowernode.oa.system;以上包含义:bjpowernode公司开发o原创 2021-02-26 22:02:42 · 426 阅读 · 0 评论 -
Java分支和if else循环
1. 分支结构1.1 if 结构1 if (/* 判断语句 true false */) {2 // 语句体3 }4 /*5 执行流程:6 当程序运行到if结构时,首先判断if之后的小括号里面的判断语句是否为true,如果为true,执行语句体,如果为false,执行大括号以外的内容7 */1.2 if - else 结构1 if (/* 判断语句 true false */) {2 // true语句体3 } else {4 // false 语原创 2021-02-26 21:27:20 · 311 阅读 · 0 评论 -
Java并发编程:同步容器
为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。今天我们就来讨论下同步容器。一.为什么会出现同步容器?在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。注意Collection和Map是一个顶层接口,而List、Set、Queue则继承了Collection原创 2021-02-23 22:10:11 · 168 阅读 · 1 评论 -
《JAVA与模式》— 简单工厂模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。那么简单工厂模式是在什么场景下使用呢,下面就以本人的理解举例说明:就拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证、域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中验证用户)。那么自然的做法就是建立一个各种登录方式都适用的接口,如下图所示:pub原创 2021-02-23 21:38:00 · 138 阅读 · 0 评论 -
《JAVA与模式》— 抽象工厂模式
场景问题举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如CPU、硬盘、内存、主板、电源、机箱等。为讨论使用简单点,只考虑选择CPU和主板的问题。事实上,在选择CPU的时候,面临一系列的问题,比如品牌、型号、针脚数目、主频等问题,只有把这些问题都确定下来,才能确定具体的CPU。同样,在选择主板的时候,也有一系列问题,比如品牌、芯片组、集成芯片、总线频率等问题,也只有这些都确定了,才能确定具体的主板。选择不同的CPU和主板,是每个客户在组装电脑的时候,向装机公司提出原创 2021-02-22 23:07:40 · 121 阅读 · 0 评论 -
《JAVA与模式》— 工厂方法模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述工厂方法模式的:工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。那么工厂方法模式是在什么场景下使用呢,下面就以本人的理解举例说明:相信很多人都做过导入导出功能,就拿导出功能来说。有这么一个需求:XX系统需要支持对数据库中的员工薪资进行导出,并且支持多种格式如:HTML、原创 2021-02-21 23:06:13 · 127 阅读 · 0 评论 -
《JAVA与模式》— 建造模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述建造(Builder)模式的:建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。产品的内部表象一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,它们通常又叫做产品的内部表象(internal representation)。不同的产品可以有不同的内部表象,也就是不同的零件。使用建造模原创 2021-02-21 22:59:06 · 191 阅读 · 0 评论 -
《JAVA与模式》— 原型模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述原型(Prototype)模式的:原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是选型模式的用意。原型模式的结构原型模式要求对象实现一个可以“克隆”自身的接口,这样就可以通过复制一个实例对象本身来创建一个新的实例。这样一来,通过原型实例创建新的对象,就不再需要关心这个实例本身的类型,只要实现了克隆自身的方法,就可以通过这个方法来获取新的对象,而无须再去通过new来创建原创 2021-02-21 22:47:33 · 281 阅读 · 0 评论 -
《JAVA与模式》— 合成模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述合成(Composite)模式的:合成模式属于对象的结构模式,有时又叫做“部分——整体”模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。合成模式合成模式把部分和整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待。比如,一个文件系统就是一个典型的合成模式系统。下图是常见的计算机XP文件系统的一部分。从上图可以看出,文件系统是一个树原创 2021-02-21 22:30:01 · 276 阅读 · 0 评论 -
《JAVA与模式》— 门面模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述门面(Facade)模式的:门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。医院的例子现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个原创 2021-02-21 13:10:02 · 203 阅读 · 1 评论 -
《JAVA与模式》— 不变模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述不变(Immutable)模式的:一个对象的状态在对象被创建之后就不再变化,这就是所谓的不变模式。不变模式的结构不变模式可增强对象的强壮型(robustness)。不变模式允许多个对象共享某一个对象,降低了对该对象进行并发访问时的同步化开销。如果需要修改一个不变对象的状态,那么就需要建立一个新的同类型对象,并在创建时将这个新的状态存储在新对象里。不变模式只涉及到一个类。一个类的内部状态创建后,在整个生命周期都不会发生变化时,这样的类称作不变类。这种使原创 2021-02-21 12:54:14 · 106 阅读 · 0 评论 -
《JAVA与模式》— 模板方法模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述模板方法(Template Method)模式的:模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。模板方法模式的结构模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负原创 2021-02-20 23:02:59 · 172 阅读 · 0 评论 -
《JAVA与模式》— 迭代子模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述迭代子(Iterator)模式的:迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation)。聚集和JAVA聚集多个对象聚在一起形成的总体称之为聚集(Aggregate),聚集对象是能够包容一组对象的容器对象。聚集依赖于聚集结构的抽象化,具有复杂化和多样性。数组就是最基本的聚集,也是其他的JAVA聚集对象的设计基础。JAVA聚集对象是实现原创 2021-02-20 22:08:43 · 126 阅读 · 0 评论 -
《JAVA与模式》— 调停者模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述调停者(Mediator)模式的:调停者模式是对象的行为模式。调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。为什么需要调停者如下图所示,这个示意图中有大量的对象,这些对象既会影响别的对象,又会被别的对象所影响,因此常常叫做同事(Colleague)对象。这些同事对象原创 2021-02-19 22:44:03 · 245 阅读 · 0 评论 -
《JAVA与模式》— 解释器模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述解释器(Interpreter)模式的:解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式的结构下面就以一个示意性的系统为例,讨论解释器模式的结构。系统的结构图如下所示:模式所涉及的角色如下所示:(1)抽象表达式(Expression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方法原创 2021-02-19 22:05:29 · 98 阅读 · 0 评论 -
JAVA — 访问者模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述访问者(Visitor)模式的:访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。分派的概念变量被声明时的类型叫做变量的静态类型(Static Type),有些人又把静态类型叫做明显类型(Apparent Type);而变量所引用的对象的真实类型又叫做变量的实际类型(Actual Type)。比如:List list = null;list =原创 2021-02-19 17:07:01 · 1007 阅读 · 0 评论 -
LinkedHashMap如何保证顺序性
一. 前言先看一个例子,我们想在页面展示一周内的消费变化情况,用echarts面积图进行展示。如下:我们在后台将数据构造完成HashMap<String, Integer> map = new HashMap<>();map.put("星期一", 40);map.put("星期二", 43);map.put("星期三", 35);map.put("星期四", 55);map.put("星期五", 45);map.put("星期六", 35);map.put("星原创 2021-02-06 22:58:04 · 2972 阅读 · 0 评论 -
Java集合 LinkedList的原理及使用
LinkedList和ArrayList一样是集合List的实现类,虽然较之ArrayList,其使用场景并不多,但同样有用到的时候,那么接下来,我们来认识一下它。一. 定义一个LinkedListpublic static void main(String[] args) { List<String> stringList = new LinkedList<>(); List<String> tempList = new ArrayList<&原创 2021-02-06 22:37:32 · 218 阅读 · 0 评论 -
TreeMap原理实现及常用方法
一. TreeMap概述TreeMap存储K-V键值对,通过红黑树(R-B tree)实现;TreeMap继承了NavigableMap接口,NavigableMap接口继承了SortedMap接口,可支持一系列的导航定位以及导航操作的方法,当然只是提供了接口,需要TreeMap自己去实现;TreeMap实现了Cloneable接口,可被克隆,实现了Serializable接口,可序列化;TreeMap因为是通过红黑树实现,红黑树结构天然支持排序,默认情况下通过Key值的自然顺序进行排序;二.原创 2021-02-06 22:09:43 · 3349 阅读 · 0 评论 -
JAVA设计模式 — 观察者模式(事件监听实现)
设计模式----观察者模式,其实这种设计模式,我们早就接触过,做过GUI编程的同学肯定会知道,事件的注册监听等机制,其实这个机制的实现就是利用了观察者模式。可能在程序中,我们需要在某些数据变化时,其他的类做出一些响应,我们总不能开一个线程,每隔一段时间就去检测数据有没有发生变化吧,那样效率很低,我们更希望那些具有变化属性的类能够主动将自己的变化推送给,希望检测这些变化的其他类。正如我们去医院排队,不能隔两分钟就去问大夫“轮到我了吗”,而是坐在那里等大夫的通知,大家都接收到一个名字信号,叫到谁谁就去~ 而观原创 2021-02-04 22:50:23 · 673 阅读 · 0 评论 -
Java 如何有效地避免OOM:善于利用软引用和弱引用
前言想必很多朋友对OOM(OutOfMemory)这个错误不会陌生,而当遇到这种错误如何有效地解决这个问题呢?今天我们就来说一下如何利用软引用和弱引用来有效地解决程序中出现的OOM问题。一.了解 强引用、软引用、弱引用、虚引用的概念在Java中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了。从Java SE2开始,就提供了四种类型的引用:强引用、软引用、弱原创 2021-02-03 21:38:35 · 110 阅读 · 0 评论 -
深入理解Java的接口和抽象类
对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。一.抽象类在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:abstract void fun();抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstr原创 2021-02-03 17:28:50 · 149 阅读 · 1 评论 -
Java应用中使用ShutdownHook友好地清理现场
在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。Java中得ShutdownHook提供了比较好的方案。JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用:1)程序正常退出2)使用System.exit()3)终端使用Ctrl+C触发的中断4)系统关闭5)使用Kill pid命令干掉进程注:在使原创 2021-02-03 17:18:52 · 86 阅读 · 0 评论 -
Java finally语句到底是在return之前还是之后执行?
网上有很多人探讨Java中异常捕获机制try…catch…finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的:(1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。(2)在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟原创 2021-02-02 23:07:22 · 98 阅读 · 0 评论 -
Java线程原语弃用
为什么是线程停止不赞成?因为它本质上是不安全的。停止线程会使其解锁其锁定的所有监视器。(当ThreadDeath异常在堆栈上传播时,监视器将被解锁。)如果以前受这些监视器保护的任何对象处于不一致状态,其他线程现在可能会以不一致的状态查看这些对象。据说这些物品被损坏了。当线程对损坏的对象进行操作时,可能会导致任意行为。这种行为可能是微妙的,很难被发现,也可能是被宣布的。与其他未经检查的异常不同,ThreadDeath无声地杀死线程;因此,用户没有警告他的程序可能已损坏。腐败在实际损害发生后的任何时候都会显现原创 2021-02-02 22:42:10 · 129 阅读 · 0 评论 -
Java跳出多重循环的方法
我们一般用break和cuntinue来控制单个循环,但是如果遇到有多个循环的情况呢,比如下面这个:for (int i=0; i<10; i++) { for (int j=0; j<10; j++) { for (int k=0; k<10; k++) { } } }如果有以下需求一般怎么做呢?(1)当j原创 2021-01-31 23:05:14 · 907 阅读 · 0 评论 -
Java Socket编程基础及深入讲解
一、Socket通信基本示例这种模式是基础,必须掌握,后期对Socket的优化都是在这个基础上的,也是为以后学习NIO做铺垫。package yiwangzhibujian.onlysend;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;public class SocketServer { public static void main(String[] args) thro原创 2021-01-30 23:14:31 · 326 阅读 · 0 评论 -
【Java并发】Thread及ThreadGroup杂谈
一、前言最近开始学习Java并发编程,把学习过程记录下。估计不是那么系统,主要应该是Java API的介绍(不涉及最基础的概念介绍),想要深入系统学习推荐看一本书《Java Concurrency in Practice 》(建议看英文,也可以看中文译本:《 Java 并发编程实战》)。并发编程的基础就是线程,所以这一篇对线程做初步了解。二、Thread和ThredGroup的关系因为Thread的构造函数中有关于ThradGroup的,所以了解它们之间的关系是有必要的。ThradGroup之间的关原创 2021-01-30 22:52:07 · 230 阅读 · 0 评论 -
【Java 并发】详解 ThreadPoolExecutor
前言线程池是并发中一项常用的优化方法,通过对线程复用,减少线程的创建,降低资源消耗,提高程序响应速度。在 Java 中我们一般通过 Exectuors 提供的工厂方法来创建线程池,但是线程池的最终实现类是 ThreadPoolExecutor,下面我们详细分析一下 ThreadPoolExecutor 的实现。基本使用我们首先看下线程池的基本使用。在下面的代码中我们创建一个固定大小的线程池,该线程池中最多包含 5 个线程,当任务数量超过线程的数量时,就将任务添加到任务队列,等线程空闲之后再从任务队列中原创 2021-01-30 22:24:23 · 178 阅读 · 0 评论 -
【Java并发】详解 AbstractQueuedSynchronizer
前言队列同步器 AbstractQueuedSynchronizer(以下简称 AQS),是用来构建锁或者其他同步组件的基础框架。它使用一个 int 成员变量来表示同步状态,通过 CAS 操作对同步状态进行修改,确保状态的改变是安全的。通过内置的 FIFO (First In First Out)队列来完成资源获取线程的排队工作。更多关于 Java 多线程的文章可以转到 这里AQS 和 synchronized在介绍 AQS 的使用之前,需要首先说明一点,AQS 同步和 synchronized 关键原创 2021-01-29 23:04:21 · 284 阅读 · 0 评论 -
Java 魔法类: sun.misc.Unsafe详细讲解
Java是一门安全的编程语言,防止程序员犯很多愚蠢的错误,它们大部分是基于内存管理的。但是,有一种方式可以有意的执行一些不安全、容易犯错的操作,那就是使用Unsafe类。本文是sun.misc.Unsafe公共API的简要概述,及其一些有趣的用法。Unsafe 实例在使用Unsafe之前,我们需要创建Unsafe对象的实例。这并不像Unsafe unsafe = new Unsafe()这么简单,因为Unsafe的构造器是私有的。它也有一个静态的getUnsafe()方法,但如果你直接调用Unsafe原创 2021-01-29 22:50:10 · 1087 阅读 · 0 评论 -
Java集合:整体结构
一、Java中集合Java中集合类是Java编程中使用最频繁、最方便的类。集合类作为容器类可以存储任何类型的数据,当然也可以结合泛型存储指定的类型(不过泛型仅仅在编译期有效,运行时是会被擦除的)。集合类中存储的仅仅是对象的引用,并不存储对象本身。集合类的容量可以在运行期间进行动态扩展,并且还提供很多很方便的方法,如求集合的并集、交集等。二、集合类结构Java中的集合包含多种数据结构,如链表、队列、哈希表等。从类的继承结构来说,可以分为两大类,一类是继承自Collection接口,这类集合包含List、原创 2021-01-28 23:11:54 · 100 阅读 · 0 评论 -
Java 并发编程:volatile的使用及其原理
一、volatile的作用在《Java并发编程:核心理论》一文中,我们已经提到过可见性、有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果对Synchronized原理有了解的话,应该知道Synchronized是一个比较重量级的操作,对系统的性能有比较大的影响,所以,如果有其他解决方案,我们通常都避免使用Synchronized来解决问题。而volatile关键字就是Java中提供的另一种解决可见性和有序性问题的方案。对于原子性,需要强调一点,也是大家容易原创 2021-01-28 23:01:15 · 105 阅读 · 0 评论 -
深入分析 ThreadLocal 内存泄漏问题
前言ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用 ThreadLocal,就可能会导致内存泄漏。下面,我们将围绕三个方面来分析 ThreadLocal 内存泄漏的问题ThreadLocal 实现原理ThreadLocal为什么会内存泄漏ThreadLocal 最佳实践ThreadLocal 实现原理ThreadLocal的实现是这样的:每个Thread 维护一个 Thre原创 2021-01-28 22:25:26 · 160 阅读 · 0 评论 -
Java 理论与实践 — 用弱引用堵住内存泄漏
要让垃圾收集(GC)回收程序不再使用的对象,对象的逻辑 生命周期(应用程序使用它的时间)和对该对象拥有的引用的实际 生命周期必须是相同的。在大多数时候,好的软件工程技术保证这是自动实现的,不用我们对对象生命周期问题花费过多心思。但是偶尔我们会创建一个引用,它在内存中包含对象的时间比我们预期的要长得多,这种情况称为无意识的对象保留(unintentional object retention)。全局 Map 造成的内存泄漏无意识对象保留最常见的原因是使用 Map 将元数据与临时对象(transient o原创 2021-01-28 22:04:33 · 256 阅读 · 0 评论 -
Java设计模式之单例模式
Java中单例模式是一种常见的模式,单例模式分为三种:懒汉式单例、恶汉式单例、登记式单例。单例模式有一下特点:.单例类只能有一个实例.单例类必须自己创建自己的唯一实例.单例类必须给所有其他对象提供这一实例单例模式必须确保只有一个实例,而且自行实例化并向系统提供这个实例。选择单例模式就是为了避免不一致状态。一、懒汉式单例package com.singleton;public class Singleton { //懒汉式单例,在第一次调用时实例化自己 private S原创 2021-01-27 23:12:37 · 108 阅读 · 1 评论 -
java深度搜索与广度优先搜索
图结构展示:实现过程:首先,我们来看看图结构在代码中的实现。有三块逻辑:1.图中的节点:[java] view plain copyprint?public class GraphNode { public List<GraphEdge> edgeList = null; private String label = ""; public GraphNode(String label) { this原创 2021-01-27 23:04:52 · 280 阅读 · 0 评论 -
Java虚拟机 — 类文件结构
我们知道计算机是由晶体管、电路板等组装而成的电子设备,而这些电子设备其实只能识别0与1的信号。那么问题来了,我们在操作系统上编写的Java代码(由字母、数字等各种符号组成),打包后部署到服务器上,是如何被计算机所识别并运行的呢?另外,操作系统有很多种,包括Windows系统,Linux系统,Mac OS系统等,而我们同样的Java代码,却可以不做任何处理在不同的系统上正常运行,这又是为啥呢?带着这些疑问,你将会在下面的介绍中得到答案!!!1、Java虚拟机的两个特性①、语言无关性对于Java语言,原创 2021-01-27 22:35:17 · 181 阅读 · 0 评论