![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java运行
java.雅玲
IT互联网
展开
-
在java中使用sax解析xml
在java中,原生解析xml文档的方式有两种,分别是:Dom解析和Sax解析Dom解析功能强大,可增删改查,操作时会将xml文档以文档对象的方式读取到内存中,因此适用于小文档Sax解析是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档本文主要讲解Sax解析,其余放在后面Sax采用事件驱动的方式解析文档。简单点说,如同在电影院看电影一样,从头到尾看一遍就完了,不能回退(Dom可来来回回读取)在看电影的过程中,每遇到一个情节,一段泪水,一次擦肩,你都会调动大脑和神经去接收或处理这些原创 2020-12-31 21:54:03 · 294 阅读 · 0 评论 -
Java获取URL对应的资源
认识IP、认识URL是进行网络编程的第一步。java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源。一、认识URL类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。简单的可以把URL理解为包含:协议、主机名、端口、路径、查询字符串和参数等对象。每一段可以独立设置。应用程序也可以指定一个“相对 URL”,它只包含到达相对于另一个 URL 的资源的足够信息。原创 2020-12-30 17:40:39 · 650 阅读 · 0 评论 -
一文带你搞懂JAVA多线程之死锁
一、死锁的定义多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。所谓死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。下面我们通过一些实例来说明死锁现象。先看生活中的一个实例,两个人面对面过独木桥,甲和乙都已经在桥上走了一段距离,即占用了桥的资源,甲如果想通过独木桥的话,乙必须退原创 2020-12-28 15:05:48 · 218 阅读 · 1 评论 -
Java中的ThreadLocal详解
一、ThreadLocal简介多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建一乐ThreadLoc原创 2020-12-27 22:29:49 · 324 阅读 · 0 评论 -
Java对象的克隆和深浅问题
Java实现克隆的方式Java实现克隆的方式有如下两种, 推荐采用实现Cloneable接口的方式•实现Cloneable接口, 重写clone方法, 调用父类的clone方法•还有另一种方法, 不实现Cloneable接口, 但是重写了clone方法, 调用了父类clone方法, 也可以实现克隆能力,Cloneable接口和Serializable接口一样, 是一个声明式接口, 无需重写其中的方法, 当某个类实现了此类接口时, 标明具备了某种能力, 如序列化和可克隆性.Object的clone原创 2020-12-27 18:28:11 · 198 阅读 · 1 评论 -
Java雪花算法的原理和实现
SnowFlake 算法是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的。这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。给大家举个例子吧,比如下面那个 64 bit 的 long 型数字:第一个部分是 1 个 bit:0,这个是无原创 2020-12-27 16:15:09 · 251 阅读 · 1 评论 -
java的类加载机制
一、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文原创 2020-12-26 22:36:51 · 143 阅读 · 1 评论 -
【JAVA】设计模式之桥梁模式
桥梁模式(Bridge Pattern)也叫做桥接模式,是一个比较简单的模式,其定义如下:Decouple an abstraction from its implementation so that the two can vary independently.(将抽象和实现解耦,使得两者可以独立地变化。)桥梁模式的使用桥梁模式的重点是在“解耦”上,如何让它们两者解耦是我们要了解的重点,我们先来看桥梁模式的通用类,如图29-4所示。一、桥梁模式的属性我们先来看桥梁模式中的4个角色。Abs原创 2020-12-26 22:17:25 · 200 阅读 · 1 评论 -
java 性能优化:35 个小细节,让你提升 java 代码的运行效率
前言代码 优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。代码优化的目标是:减原创 2020-12-26 22:06:37 · 202 阅读 · 1 评论 -
《Java数据结构》Java B+树结构
前言在学习MySQL的时候遇到了B+树,MySQL通过B+树来提升SQL语句的查询效率。接下来我们就来分析一下B+树的原理和写一个demo模拟B+树的实现。B+树原理1. 什么是B+树B+树是一种B树的变形,看看B+树结构根据图我们可以看出B+树存在重复元素的存储。物理存储空间要比一般的树暂用的多,不过多的空间并不多。上图是一个简图,实际一个三层B+树可以存储很多数据,我们按照MySQL的逻辑计算一下一个3层B+树可以存多少数据,MySQL 中一页是16KB, 一个主键bigint字段暂用原创 2020-12-26 21:37:18 · 497 阅读 · 1 评论 -
全面了解 Java 原子变量类
一、原子变量类简介为何需要原子变量类保证线程安全是 Java 并发编程必须要解决的重要问题。Java 从原子性、可见性、有序性这三大特性入手,确保多线程的数据一致性。确保线程安全最常见的做法是利用锁机制(Lock、sychronized)来对共享数据做互斥同步,这样在同一个时刻,只有一个线程可以执行某个方法或者某个代码块,那么操作必然是原子性的,线程安全的。互斥同步最主要的问题是线程阻塞和唤醒所带来的性能问题。volatile 是轻量级的锁(自然比普通锁性能要好),它保证了共享变量在多线程中的可见性原创 2020-12-26 21:02:18 · 192 阅读 · 1 评论 -
java的动态代理机制详解
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾。在java的动态代理机制中,有两个重要的类或接口,一个shiInvocationHandler(Interface)、另一个则是 Proxy(Class),这原创 2020-12-25 21:56:34 · 150 阅读 · 2 评论 -
java中重载与重写的区别
首先我们来讲讲:重载(Overloading)(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相原创 2020-12-25 21:39:34 · 165 阅读 · 2 评论 -
Java终止线程的三种方式
停止一个线程通常意味着在线程处理任务完成之前停掉正在做的操作,也就是放弃当前的操作。在 Java 中有以下 3 种方法可以终止正在运行的线程:使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程中止。使用 stop() 方法强行终止线程,但是不推荐使用这个方法,该方法已被弃用。使用 interrupt 方法中断线程。1. 使用标志位终止线程在 run() 方法执行完毕后,该线程就终止了。但是在某些特殊的情况下,run() 方法会被一直执行;比如在服务端程序中可能会使用 while(原创 2020-12-25 21:22:10 · 647 阅读 · 2 评论 -
腾讯程序员带你使用【java web】服务器端解决跨域问题
服务器端解决跨域问题的三种方法跨域是指html文件所在的服务器与ajax请求的服务器是不同的ip+port,例如:‘192.168.1.1:8080’ 与 ‘192.168.1.2:8080’是不同的域。‘192.168.1.1:8080’ 与 ‘192.168.1.1:8081’是不同的域。解决此类问题的方法很多,有需要客户端和服务端都要更改的,例如jsonp,iframe等等;有只需要客户端更改的,这种情况只能出现在hybrid app开发中,即通过调用native方法来进行网络请求;有原创 2020-12-25 20:57:46 · 176 阅读 · 0 评论 -
java动态代理: JDK和cglib
JAVA的动态代理代理模式代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。按照代理的创建时期,代理类可以分为两种。静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。原创 2020-12-25 19:42:32 · 201 阅读 · 0 评论 -
Java中继承多数是有害的
最近研究java的方法覆盖时发现了一篇蛮好的文章,记录下来分享下:首先申明:static的方法和变量只能隐藏,不能覆盖大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系)。实际上80%的代码应该完全用interfaces写,而不是通过extends。“Java设计模式”一书详细阐述了怎样用接口继承代替实现继承。这篇文章描述设计者为什么会这么作。xtends是有害的;也许对于Charles Manson这个级别的不是,但是足够糟糕的它应该在任何可能的时候被避开。“JAVA设计模式”原创 2020-12-24 21:00:27 · 209 阅读 · 2 评论 -
比较Java Swing中三种注册事件的方法
Swing 是目前Java中不可缺少的窗口工具组,是建立图形化用户界面(GUI)程序的强大工具。Java Swing组件自动产生各种事件来响应用户行为。Java将事件封装成事件类,并且为每个事件类定义了一个事件监听器。一个组件注册事件监听器方法,表明该组件要响应指定事件。也就是说我们可以通过注册监听器,监听事件源产生的事件,从而在事件处理程序中处理我们所需要处理的用户行为。Java Swing中处理各组件事件的一般步骤是:1. 新建一个组件。2. 将该组件添加到相应的面板。3. 注册监听器以原创 2020-12-24 20:42:03 · 228 阅读 · 2 评论 -
java中的foreach循环
foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。foreach的语句格式:for(元素类型t 元素变量x :原创 2020-12-24 20:06:55 · 1201 阅读 · 0 评论 -
【JAVA】浅谈java枚举类
一、什么情况下使用枚举类?有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便?二、为什么不用静态常量来替代枚举类呢?public static final int SEASON_SPRING = 1;public static final int SEASON_SUMMER = 2;public static final int SEASON_FALL = 3;public static final int SEASON_WINTER = 4;枚举类更加直观,类型安全。使原创 2020-12-24 14:14:41 · 187 阅读 · 2 评论 -
java之LRU缓存实现
LRU缓存实现(Java)LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,比如我们缓存10000条数据,当数据小于10000时可以随意添加,当超过10000时就需要把新的数据添加进来,同时要把过期数据删除,以确保我们最大缓存10000条,那怎么确定删除哪条过期数据呢,采用LRU算法实现的话就是将最老的数据删掉,废话不多说,下面来说下Java版的LRU缓存实现Ja原创 2020-12-23 15:17:16 · 335 阅读 · 2 评论 -
面试官:兄弟,说说Java到底是值传递还是引用传递
面试官:兄弟,说说Java到底是值传递还是引用传递七年前,我从温和湿润的苏州回到古色古香的洛阳,抱着一幅“天下我有”的心态“约谈”了几位面试官。其中有一位叫老马,让我印象深刻。因为他当时扔了一个面试题把我砸懵了:说说 Java 到底是值传递还是引用传递吧。我当时年轻气盛,自认为所有的面试题都能对答如流,没想到被老马“刁难”了——原来洛阳这块互联网的荒漠也有技术专家啊。现在回想起来,脸上不自觉地就泛起了羞愧的红晕:当时真菜!不管怎么说,是时候写篇文章剖析一下值传递还是引用传递的区别了。将参数传递给方法原创 2020-12-22 17:00:08 · 158 阅读 · 1 评论 -
Java中的逆变与协变
java中queue的使用Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队原创 2020-12-21 16:19:46 · 189 阅读 · 1 评论 -
聊聊Java IO之 NIO那些事儿
漫谈Java IO之 NIO那些事儿NIO,也叫做new-IO或者non-blocking-IO,就暂且理解为非阻塞IO吧。为什么选择NIO那么NIO相对于IO来说,有什么优势呢?总结来说:1.IO是面向流的,数据只能从一端读取到另一端,不能随意读写。NIO则是面向缓冲区的,进行数据的操作更方便了2.IO是阻塞的,既浪费服务器的性能,也增加了服务器的风险;而NIO是非阻塞的。3.NIO引入了IO多路复用器,效率上更高效了。NIO都有什么那么NIO都提供了什么呢?1.基于缓冲区的双向原创 2020-12-19 17:15:23 · 180 阅读 · 1 评论 -
超硬核的Java工程师分享,什么是Java?为什么我要做Java,我是如何学习Java的?
超硬核的Java工程师分享,什么是Java?为什么我要做Java,我是如何学习Java的?Java是啥?新手程序员通常会走入一个误区,就是认为学习了一门语言,就可以称为是某某语言工程师了。但事实上真的是这样吗?其实并非如此。今天我们就来聊一聊,Java 开发工程师到底开发的是什么东西。准确点来说,Java后端到底在做什么?基础大家都知道 Java 是一门后端语言,后端指的就是服务端,服务端代码一般运行在服务器上,通常我们运行Java 程序的服务器都是 Linux 服务器。这些服务器在互联网公司原创 2020-12-19 16:34:57 · 381 阅读 · 1 评论 -
java 三种工厂模式
java 三种工厂模式一、简单工厂模式一个栗子:我喜欢吃面条,抽象一个面条基类,(接口也可以),这是产品的抽象类。public abstract class INoodles { /** * 描述每种面条啥样的 */ public abstract void desc();}先来一份兰州拉面(具体的产品类):public class LzNoodles extends INoodles { @Override public void des原创 2020-12-18 21:56:34 · 289 阅读 · 1 评论 -
今年32岁女生,刚开始自学 java,给自己一年时间有出路吗?
看你32岁要从体制里出来学java,而且看样子已经下定决心了,我真的替你感到悲哀。我也是java培训出来,转行到互联网的,所以我觉得我可以回答这个问题。跟我一起培训的同学大部分也还在做,我们这些人有的是24岁刚毕业出来的,有的是毕业两年三年出来的,也有一个30多岁研究生刚毕业来学的。到现在已经快两年了,可是我们这些同学中,除去一些比较年轻的。剩下很大一部分想的却是继续转行做别的,有的人想做自媒体,有的人想开淘宝店,还有人想进入体制内……几乎很少有人愿意继续做java开发。你可能会问了,既然都转行进来原创 2020-12-18 21:28:35 · 1053 阅读 · 1 评论 -
Java的深拷贝和浅拷贝
关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象。可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用传递将会有更深的理解。1、创建对象的5种方式①、通过 new 关键字这是最常用的一种方式,通过 new 关键字调用类的有参或无参构造方法来创建对象。比如 Object obj = new Object();②、通过 Class 类的 newInstance() 方法这种默认是调用类的无参构造方法创建对原创 2020-12-18 20:52:27 · 259 阅读 · 2 评论 -
阿里Java架构师教你编码规范-如何校验参数?
1 参数校验的意义大多数方法对传递给它们的参数值有限制。例如,索引值必须非负,对象引用必须非空。应该清楚地在文档中记录所有这些限制,并在方法主体的开头使用检查来实施它们。应该在错误发生后尽快找到它们,这是一般原则。如果不这样做,就不太可能检测到错误,而且即使检测到错误,确定错误的来源也很难。若一个无效参数被传递给一个方法若该方法在执行前检查参数,这过程将迅速失败,并引发异常若方法未检查参数,可能会在处理过程中出现:莫名其妙的异常而失败正常返回,但会悄悄计算错误结果正常返回,但会使某对象原创 2020-12-18 19:30:01 · 240 阅读 · 2 评论 -
Java语言已经过时了,当你听到这里,作为一名Java开发人员有何感想?
Java语言已经过时了,当你听到这里,作为一名Java开发人员有何感想?某天开了个会,讨论一个桌面版的程序应该如何开发,使用什么样的技术开发。当向小组成员表示,还是使用JAVA的语言、JAVA的框架开发时,有一位未曾写过JAVA语言的队员,和一位写过一年JAVA语言的队员,他俩异口同声:啊,还用JAVA呀,JAVA已经过时了呀!?紧接着,建议接踵而至,可以使用python,还可以使用GO语言,它们都简单的很,一学就会,没有基础都行。python语言最近炒得很火,谁又不知呢?可是只听说过用python原创 2020-12-17 22:04:49 · 368 阅读 · 2 评论 -
详细解析 java 自动装箱与拆箱
java 自动装箱与拆箱这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆:java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱,解包装称为拆箱);其实按照我自己的理解自动装箱就可以简单的理解为将基本数据类型封装为对象类型,来符合java的面向对象;例如用int来举例://声明一个Integer对象Integer num = 10;//以上的声明就是用到了自动的装箱:解析为Integer num =原创 2020-12-17 20:11:44 · 192 阅读 · 2 评论 -
java序列化,只需看这篇就够了
一、序列化的含义、意义及使用场景•序列化:将对象写入到IO流中 •反序列化:从IO流中恢复对象•意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。•使用场景:所有可在网络上传输的对象都必须是可序列化的,比如RMI(remote methodinvoke,即远程方法调用),传入的参数或返回的对象都是可序列化的,否则会出错;所有需要保存到磁盘的java对象都必须是可序列原创 2020-12-17 18:42:14 · 217 阅读 · 2 评论 -
谈谈JAVA中的Voletile
谈谈JAVA中的Voletile内存可见性volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的庞大开销,倘若能恰当的合理的使用volatile,自然是美事一桩。为了能比较清晰彻底的理解volatile,我们一步一步来分析。首先来看看如下代码public class TestVolatile { boolean原创 2020-12-17 17:06:05 · 343 阅读 · 0 评论 -
狗屎的Java规范
狗屎的Java规范规范标题真有点侮辱了狗。贴内容:把五只猴子关在一个笼子里,上头有一串香蕉实验人员装了一个自动装置。一旦侦测到有猴子要去拿香蕉,马上就会有水喷向笼子,而这五只猴子都会一身湿。首先有只猴子想去拿香蕉,当然,结果就是每只猴子都淋湿了。之后每只猴子在几次的尝试后,发现莫不如此。于是猴子们达到一个共识:不要去拿香蕉,以避免被水喷到。后来实验人员把其中的一只猴子释放,换进去一只新猴子A。这只猴子A看到香蕉,马上想要去拿。结果,被其他四只猴子海K了一顿。因为其他四只猴子认为猴子A原创 2020-12-17 14:18:39 · 1058 阅读 · 1 评论 -
阿里P7揭秘Java神秘的三种代理模式
Java的三种代理模式1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎原创 2020-12-16 21:57:44 · 214 阅读 · 0 评论 -
深入解析【Java enum】的用法
Java enum的用法详解用法一:常量在JDK1.5 之前,我们定义常量都是: public static fianl… 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switchJDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。enum Signal { G原创 2020-12-16 21:56:19 · 224 阅读 · 0 评论 -
看阎宏博士专业讲解装饰模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述装饰**(Decorator)**模式的:装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展。装饰模式的类图如下: 在装饰模式中的角色有:● 抽象构件(Component)角色:原创 2020-12-16 20:28:59 · 210 阅读 · 0 评论 -
带你深入了解Java的运行原理
带你深入了解Java的运行原理在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode)(class文件的内容),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节原创 2020-12-15 20:07:25 · 1315 阅读 · 8 评论