JAVA
文章平均质量分 84
技术类
郑兆辉
这个作者很懒,什么都没留下…
展开
-
Java IO流知识体系
Java IO流知识体系IO流I/O(Input/Output)流,即输入/输出流,是Java中实现输入/输出的基础,它可以方便地实现数据的输入/输出操作。1.1同步与异步,阻塞与非阻塞同步,一个任务的完成之前不能做其他操作,必须等待(等于在打电话)异步,一个任务的完成之前,可以进行其他操作(等于在聊QQ)阻塞,是相对于CPU来说的, 挂起当前线程,不能做其他操作只能等待非阻塞,,无须挂起当前线程,可以去执行其他操作1.2什么是BIOBIO:同步并阻塞,服务器实现一个连接一原创 2021-08-30 20:05:05 · 248 阅读 · 0 评论 -
分享:关于 JVM 内存的 N 个问题和定位工具
JVM的内存区域是怎么划分的?JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问题的基础。那么JVM内存区域是怎么划分的呢?首先是程序计数器(Program Counter Register),在JVM规范中,每个线程都有自己的程序计数器。这是一块比较小的内存空间,存储当前线程正在执行的Java方法的JVM指令地址,即字节码的行号。如果正在执行Native方法,则这个计数器为空。该内存区域是原创 2021-08-23 11:02:04 · 151 阅读 · 0 评论 -
说说多线程并发问题,这样回答面试官非常满意
多线程并发问题,基本是面试必问的。大部分同学应该都知道 Synchronized , Lock ,部分同学能说到 volatile 、 并发包 ,优秀的同学则能在前面的基础上,说出Synchronized、volatile的原理,以及并发包中常用的数据结构,例如ConcurrentHashMap的原理。这篇文章将总结多线程并发的各种处理方式,希望对大家有所帮助。一、多线程为什么会有并发问题为什么多线程同时访问(读写)同个变量,会有并发问题?Java 内存模型规定了所有的变量都存储原创 2021-08-23 11:00:46 · 204 阅读 · 0 评论 -
聊聊Java BIO(同步阻塞IO)、NIO(非阻塞IO)、AIO(异步IO)
Java中有阻塞IO、非阻塞IO。阻塞IO可以理解为“一个连接对应于一线程”。非阻塞IO可以理解为“一个请求(一个请求里面可能会有多个连接【长连接短连接】)对应于一线程”。BIOJava中BIO也成为同步阻塞IO。同步阻塞IO模式下,服务器实现模式为一个连接对应一个线程,即:有连接请求从客户端发起时,服务器端就需要创建一个线程进行处理,如果有大量连接时,服务器就需要创建大量线程进行处理。当然可以通过线程池机制改善。阻塞IO适用场景为:连接数较小且固定的架构模式,这种方式对服务器资源要求比原创 2021-08-23 10:58:58 · 320 阅读 · 0 评论 -
原型设计模式
亦称: 克隆、Clone、Prototype意图原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。问题如果你有一个对象, 并希望生成与其完全相同的一个复制品, 你该如何实现呢? 首先, 你必须新建一个属于相同类的对象。 然后, 你必须遍历原始对象的所有成员变量, 并将成员变量值复制到新对象中。不错! 但有个小问题。 并非所有对象都能通过这种方式进行复制, 因为有些对象可能拥有私有成员变量, 它们在对象本身以外是不可见的。“从外部”原创 2021-08-23 10:58:08 · 91 阅读 · 0 评论 -
JWT token过期后自动续期的解决方案
在文中给出的例子中,仅实现了登录认证,但是并没有设置token的过期时间,在实际应用中,token一般都需要设置过期时间。如何设置token的过期时间前文《Java面试常见问题:JWT是什么?》介绍过,JWT token的payload部分是一个json串,是要传递数据的一组声明,这些声明被JWT标准称为claims。JWT标准里面定义的标准claim包括:iss(Issuser):JWT的签发主体; sub(Subject):JWT的所有者; aud(Audience):JWT的接..原创 2021-08-20 17:43:02 · 3714 阅读 · 0 评论 -
JAVA8日期处理
Java 8推出了整套的日期时间API,有了这套API就可以放弃所有的java.util.Date、java.sql.Date、Timestamp、Calendar等,也不用再担心SimpleDateFormat的线程安全问题,同时还提供了更好用的日期处理方法。接下来就开始学习一下这套API的使用获取当前日期时间获取当天日期public static LocalDate today() { return LocalDate.now();}获取当前...原创 2021-08-20 17:39:02 · 121 阅读 · 0 评论 -
单例设计模式
亦称: 单件模式、Singleton意图单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。问题单例模式同时解决了两个问题, 所以违反了_单一职责原则_:保证一个类只有一个实例。 为什么会有人想要控制一个类所拥有的实例数量? 最常见的原因是控制某些共享资源 (例如数据库或文件) 的访问权限。它的运作方式是这样的: 如果你创建了一个对象, 同时过一会儿后你决定再创建一个新对象, 此时你会获得之前已创建的对象, 而不是一个新对象。注意,原创 2021-08-20 17:37:26 · 98 阅读 · 0 评论 -
看完必懂得观察者设计模式
什么是观察者设计模式?观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布—订阅模式、模型—视图模式,它是对象行为型模式。一对多例如:一次下单需要插入数据库,需要通知用户下单成功,需要更改库存等。点击获取观察者模式的定义观察者设计模式的结构观察者模式的主要角色如下。抽象主题角色 具体主题角色 抽象观察者角色 具体观察者角色点击获取主要角色的描述观察者转载 2021-08-20 10:35:49 · 215 阅读 · 0 评论 -
toString()、String.valueOf、(String)强转,啥区别?
前言相信大家在日常开发中这三种方法用到的应该很多,尤其是前两种,经常在开发的时候,随心所欲,想用哪个用哪个,既然存在,那就应该有它存在的道理,那么什么情况下用哪个呢?二、代码实例1、基本类型(1)基本类型没有toString()方法(2)推荐使用(3)无法强转(String)是标准的类型转换,将Object类型转为String类型,使用(String)强转时,最好使用instanceof做一个类型检查,以判断是否可以进行强转,否则容易抛出ClassCast转载 2021-08-17 17:30:39 · 206 阅读 · 0 评论 -
java开发技术之ArrayList的实现原理
1. ArrayList概述ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量。在添加大量转载 2021-08-17 17:29:42 · 424 阅读 · 0 评论 -
一文看懂Java锁机制
背景知识指令流水线CPU的基本工作是执行存储的指令序列,即程序。程序的执行过程实际上是不断地取出指令、分析指令、执行指令的过程。几乎所有的冯•诺伊曼型计算机的CPU,其工作都可以分为5个阶段:取指令、指令译码、执行指令、访存取数和结果写回。现代处理器的体系结构中,采用了流水线的处理方式对指令进行处理。指令包含了很多阶段,对其进行拆解,每个阶段由专门的硬件电路、寄存器来处 理,就可以实现流水线处理。实现更高的CPU吞吐量,但是由于流水线处理本身的额外开销,可能会增加延迟。cpu多级转载 2021-08-17 17:26:46 · 189 阅读 · 0 评论 -
java枚举类型,为什么强烈推荐使用?看看它的7种场景方法
枚举是 JDK 1.5 新增的数据类型,使用枚举我们可以很好的描述一些特定的业务场景,比如一年中的春、夏、秋、冬,还有每周的周一到周天,还有各种颜色,以及可以用它来描述一些状态信息,比如错误码等。枚举类型不止存在在 Java 语言中,在其它语言中也都能找到它的身影,例如 C# 和 Python 等,但我发现在实际的项目中使用枚举的人很少,所以本文就来聊一聊枚举的相关内容,好让朋友们对枚举有一个大概的印象,这样在编程时起码还能想到有“枚举”这样一个类型。枚举的 7 种使用方法很多人不使用枚转载 2021-08-17 15:42:59 · 2680 阅读 · 0 评论 -
放弃 StringBuilder!Java8的StringJoiner,真香
为什么会新增这样一个string辅助类?原有的stringbuilder太死板,不支持分割,如果想让最终的字符串以逗号隔开,需要这样写StringBuilder sb = new StringBuilder();IntStream.range(1,10).forEach(i->{ sb.append(i+""); if( i < 10){ sb.append(",") } });是不是太死板了,不好用,StringJoiner怎样写呢?转载 2021-08-12 11:44:35 · 146 阅读 · 0 评论 -
数据库连接池c3p0
简介c3p0是用于创建和管理连接,利用“池”的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制、连接可靠性测试、连接泄露控制、缓存语句等功能。目前,hibernate自带的连接池就是c3p0。本文将包含以下内容(因为篇幅较长,可根据需要选择阅读):c3p0的使用方法(入门案例、JDNI使用) c3p0的配置参数详解 c3p0主要源码分析使用例子-入门需求使用C3P0连接池获取连接对象,对用户数据进行简单的增删改查(sql脚本项目中已提供)。工程环境JDK:1.8转载 2021-08-12 11:41:35 · 2186 阅读 · 0 评论 -
别再写满屏的 if、else 了,试试策略模式
你还在写满屏的 if/ else/ switch 之类的判断逻辑吗?栈长在开发人员的代码中看过太多这样的低级代码了,真的太 low,极不好维护,本文栈长就教你如何用策略模式干掉 if/ else/ switch,让你的代码更优雅。什么是策略模式?比如说对象的某个行为,在不同场景中有不同的实现方式,这样就可以将这些实现方式定义成一组策略,每个实现类对应一个策略,在不同的场景就使用不同的实现类,并且可以自由切换策略。策略模式结构图如下:策略模式需要一个策略接口,不同的策略实现不同的实转载 2021-08-12 11:37:30 · 325 阅读 · 2 评论 -
基础-中级-高级”Java程序员面试
Java基础(对象+线程+字符+接口+变量+异常+方法)面向对象和面向过程的区别? Java 语言有哪些特点? 关于 JVM JDK 和 JRE 最详细通俗的解答 Oracle JDK 和 OpenJDK 的对比 Java 和 C++的区别? 什么是 Java 程序的主类?应用程序和小程序的主类有何不同? Java 应用程序与小程序之间有哪些差别? 字符型常量和字符串常量的区别 构造器 Constructor 是否可被 override? 重载和重写的区别? Java 面向对象编程三转载 2021-08-12 11:36:37 · 150 阅读 · 0 评论 -
for、foreach、stream 哪家的效率更高
比较for循环、foreach循环及Stream方法效率for循环首先,10000数据的for循环,代码如下:publicclassForTest{publicstaticvoidmain(String[]args){LongstartTime=System.currentTimeMillis();formMethod();LongendTime=System.currentTimeMillis();...转载 2021-08-12 11:30:08 · 1493 阅读 · 0 评论 -
别再if-else走天下了,整个注解多优雅
策略模式经常在网上看到一些名为“别再if-else走天下了”,“教你干掉if-else”等之类的文章,大部分都会讲到用策略模式去代替if-else。策略模式实现的方式也大同小异。主要是定义统一行为(接口或抽象类),并实现不同策略下的处理逻辑(对应实现类)。客户端使用时自己选择相应的处理类,利用工厂或其他方式。注解实现本文要说的是用注解实现策略模式的方式,以及一些注意点。 话不多说,还是以最常 见的订单处理为例。首先定义这样一个订单实体类:@Datapublic class Order {转载 2021-08-12 11:26:48 · 150 阅读 · 0 评论 -
Springboot中实现策略模式+工厂模式
策略模式和工厂模式相信大家都比较熟悉,但是大家有没有在springboot中实现策略和工厂模式?具体策略模式和工厂模式的UML我就不给出来了,使用这个这两个模式主要是防止程序中出现大量的IF ELSE IF ELSE....。接下来咱们直接实现,项目结构图:工厂类FactoryStrategy负责创建策略的工厂,代码比较简单,比较关键的一点是AutoWired一个Map<String, Strategy>这个会在初始化的时候将所有的Strategy自动加载到Map中,是不是很方.转载 2021-08-11 11:49:26 · 669 阅读 · 0 评论 -
策略模式在项目设计中用的最多,消除 if-else
前言日常 Coding 过程中,设计模式三板斧:模版、构建者、策略,今天来说下第三板斧策略设计模式策略模式还是比较简单并且使用较多的,平常我们多运用策略模式用来消除 if-else、switch 等多重判断的代码,消除 if-else、switch 多重判断可以有效应对代码的复杂性如果分支判断会不断变化(增、删、改),那么可以使用别的技巧让其满足开闭原则,提高代码的扩展性 (策略模式场景主要负责解耦,开闭原则需要额外支持)下文中会详细列举如何使用设计模式做个 Demo 、模式的真实场景以..转载 2021-08-11 11:16:54 · 339 阅读 · 0 评论 -
Java开发中Netty线程模型原理解析
Java开发中Netty线程模型原理解析,Netty是Java领域有名的开源网络库具有高性能和高扩展性的特点,很多流行的框架都是基于它来构建。Netty 线程模型不是一成不变的,取决于用户的启动参数配置。通过设置不同的启动参数Netty ,可同时支持 Reactor 单线程模型、多线程模型。Netty线程模型就是Reactor模式的实现,如图:Netty抽象了两组线程池BossGroup和WorkerGroup,其类型都是NioEventLoopGroup,BossGroup用来接受客户端发转载 2021-08-11 10:26:04 · 97 阅读 · 0 评论 -
Java 反射机制 与 工厂设计模式
什么是反射Java反射机制是在运行状态中,对于任意类,都能知道这个类的全部属性和方法,对于任意对象,都能够调用它的任何一个方法或属性。这种动态获取的信息以及动态调用对象的方法的功能,称为Java语言的反射机制。Class类Class 是JDK提供的一个类,完整路径为 java.lang.Class,Class是反射能够实现的基础。对于每一个类,Java虚拟机都会初始化出一个Class类型的对象,Java 中的所有类型包括基本类型(int, long, float 等),即使是数组也有...转载 2021-08-11 09:41:22 · 492 阅读 · 0 评论 -
一遍记住Java常用的八种排序算法与代码实现方法
直接插入排序经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。1.将第一个数和第二数排序,然后构成一个有序序列2.将第三个数插入进去,构成一个新的有序序列。3.对第四个数、第五个数......直到最后一个数,重复第二步。如何写写成代码:1.首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入。2. 设定插入数和得到已经排好序列的最后一个数的位数。insertNum和j=i-1。3.从最后一个数开始向前循环转载 2021-08-10 11:24:43 · 97 阅读 · 0 评论 -
JVM 看这一篇就够了
初识JVM规范从三种角度认识JVM在这里插入图片描述JVM概述JVM:Java Virtual Machine,也就是Java虚拟机 所谓虚拟机是指:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统 JVM是通过软件来模拟Java字节码的指令集,是Java程序的运行环境JVM主要功能通过 ClassLoader 寻找和装载 class 文件 解释字节码成为指令并执行,提供 class 文件的运行环境 进行运行期间的内存分配和垃圾回收 提供与硬件交转载 2021-08-10 11:23:37 · 421 阅读 · 0 评论 -
万字长文:细谈Linux、JDK、Netty中NIO与零拷贝
一、先理解内核空间与用户空间Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中, CPU 特权等级分为4个,Linux 使用 Ring 0 和 Ring 3。内核空间(Ring 0)具有最高权限,可以直接访问所有资源,; 用户空间(Ring 3)只能访问受限资源,不能直接访问内存等硬件设备,必须通过系统调用陷入到内核中,才能访问这些特权资源。上面的Ring图可以简化成:内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环转载 2021-08-10 11:17:37 · 413 阅读 · 0 评论 -
用好Java中的枚举,真的没有那么简单
概览在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式。enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承java.lang.Enum类,更多内容可以自行查看其官方文档。枚举在很多时候会和常量拿来对比,可能因为本身我们大量实际使用枚举的地方就是为了替代常量。那么这种方式什么优势呢?以这种方式定义的常量使代码更具可读性,允许进行编译时检查,预先记录可接受值的列表,并避免由于传入无效值而引起的意外行为。下面示转载 2021-08-09 10:35:44 · 135 阅读 · 0 评论 -
彻底理解Java反射以及动态代理中对反射的应用
反射 (Reflection) 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。简而言之,通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。反射有什么用,其实最主要的用处就两个:根据类名在运行时创建实例(类名可以转载 2021-08-09 10:06:28 · 226 阅读 · 0 评论 -
用责任链模式实现 OA 系统中的涨薪流程审批
Hello 大家好,我是阿粉,工作中我们经常会遇到很多需要上级或者上级的上级一层层审批的流程,作为程序员如果要让你实现这个流程,你会采用什么方式呢?好了思考一分钟结束,很显然大家一致的回答就是责任链模式。那么什么是责任链模式呢?如何使用责任链模式去完成这个流程呢?下面我们来看一下。需求分析开发之前的第一步是需求分析,我们这个场景是这样的,阿粉准备跟领导 A 申请一下涨薪,最满意的结果当时是直接跟上级领导 A 申请就直接过了,但是理想很丰满,现实很骨感。领导 A 也只是一个小组长并没有直接涨薪的权转载 2021-08-06 11:24:10 · 644 阅读 · 1 评论 -
java.security框架之签名、加密、摘要及证书
前言和前端进行数据交互时或者和第三方商家对接时,需要对隐私数据进行加密。单向加密,对称加密,非对称加密,其对应的算法也各式各样。java提供了统一的框架来规范(java.security)安全加密这类API。下面将一一介绍加密算法概念及分类 秘钥生成 摘要算法工具-MessageDigest 签名算法工具-Signature 常用加密工具类-Cipher Certificate-证书的保存 KeyStore-密钥证书的实体类 https证书加载1 加密算法概念及分类常用的加密转载 2021-08-06 11:14:19 · 375 阅读 · 0 评论 -
面试官:“聊聊Java序列化”
前言java 的序列化大家肯定并不陌生, 在使用一些开源开源框架比如dubbo的时候,肯定踩过实体类没有实现序列化接口(java.io.Serializable)而报错的情况, 那大家有没有想过为什么要序列化实体类?如果实体类引用了一个不能序列化的类该怎么做呢?下面就给大家讲下我所探索的Java序列化以及他的使用场景。如何序列化首先实体类要实现 Serializable 接口public class Student implements java.io.Serializable ..转载 2021-08-06 10:55:17 · 114 阅读 · 0 评论 -
Java中有哪些无锁技术来解决并发问题?如何使用
除了使用 synchronized、Lock 加锁之外,Java 中还有很多不需要加锁就可以解决并发问题的工具类一、原子工具类JDK 1.8 中,java.util.concurrent.atomic 包下类都是原子类,原子类都是基于 sun.misc.Unsafe 实现的。CPU 为了解决并发问题,提供了 CAS 指令,全称 Compare And Swap,即比较并交互 CAS 指令需要 3 个参数,变量、比较值、新值。当变量的当前值与比较值相等时,才把变量更新为新值 CAS 是一条转载 2021-08-05 14:04:30 · 531 阅读 · 0 评论 -
java8的Stream api实战精辟解读
文章目录 前言 1.Stream的概念: 1.1流的构成: 1.2 Stream的生成方式: 2.1创建对象: 2.2单元测试进行应用: 2.3常用方法介绍: 3总结 前言虽然java的jdk已经更新到了15,但是身边的大多数项目还是用的jdk8,java8稳定成熟足以可见。本篇来介绍java8比较酷炫的的Stream api,希望能帮助到学习java编程的朋友。1.Stream的概念:Stream API是对容器对象功能的增强,专注于对容器对转载 2021-08-05 13:58:01 · 130 阅读 · 0 评论 -
彻底理解Java反射以及动态代理中对反射的应用
反射 (Reflection) 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。简而言之,通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。反射有什么用,其实最主要的用处就两个:根据类名在运行时创建实例(类名可以转载 2021-08-05 13:25:53 · 483 阅读 · 0 评论 -
美团面试:String s=new String(“111“
String不可变吗?publicclassApp{publicstaticvoidmain(String[]args){Stringa="111";a="222";System.out.println(a);}}有的人会认为上面这段代码应该输出:111这样才和上面的不变性吻合。哈哈哈,但是并不是这样滴。222这不对呀,不是不变吗?怎么变了呢?其实在JVM的运行中...转载 2021-08-03 10:05:35 · 131 阅读 · 0 评论 -
结合JVM源码谈Java类加载器
一、前言之前文章 Java 类加载器揭秘 从Java层面讲解了Java类加载器的原理,这里我们结合JVM源码在稍微深入讲解下。二、Java类加载器的委托机制Java 类加载器使用的是委托机制,也就是一个类加载器在加载一个类时候会首先尝试让父类加载器来加载。那么问题来了,为啥使用这种方式?使用委托第一这样可以避免重复加载,第二,考虑到安全因素,下面我们看下ClassLoader类的loadClass方法:protected Class<?> loadClass(Stringn转载 2021-08-02 10:57:35 · 262 阅读 · 0 评论 -
Java类加载器
、类加载JVM将class字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入口。二、类加载过程类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、链接( 验证、准备、解析 )、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:1、加载加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象...转载 2021-08-02 10:28:45 · 329 阅读 · 0 评论 -
后端生成Token架构与设计详解
目的:Java开源生鲜电商平台-Java后端生成Token目的是为了用于校验客户端,防止重复提交。技术选型:用开源的JWT架构。1.概述:在WEB项目中,服务端和前端经常需要交互数据,有的时候由于网络响应慢,客户端在提交某些敏感数据(比如按照正常的业务逻辑,此份数据只能保存一份)时,如果前端多次点击提交按钮会导致提交多份数据,这种情况我们是要防止发生的。2.解决方法:①前端处理:在提交之后通过js立即将按钮隐藏或者置为不可用。②后端处理:对于每次提交到后台的数据必须校验,也就是通过前转载 2021-08-02 10:27:49 · 523 阅读 · 0 评论 -
在工作当中如何使用枚举(enum)
什么是枚举枚举是JDK 1.5中引入的新特性,由一组固定的常量组成合法值的类型,例如一年中的季节、一周的星期数。枚举其实就是特殊的类,继承了java.lang.Enum类,并实现了java.lang.Seriablizable和 java.lang.Comparable两个接口。域成员均为常量,且构造方法被默认为私有。如何定义枚举先来看看枚举是如何定义的!我们定义四个值,分别为春天、夏天、秋天、冬天。public enum SeasonEnum { //春天 SPRIN.转载 2021-08-02 10:26:38 · 295 阅读 · 0 评论 -
老生常谈的JavaScript闭包
老生常谈的闭包很多观点参考于《你不知道的JavaScript》、《JavaScript忍者秘籍》,私信我,可发电子书呀。进入正文:也许你并不知道闭包是什么,但是你的代码中到处都有闭包的影子!也许你觉得闭包平时用不到,但是每次面试你都得去准备这个方面内容!也许你不觉得这个功能有什么用,但是很多框架的功能都是基于闭包去实现的!下面我们将目光聚焦到以下几个问题,来理解一下闭包:词法作用域 闭包的形成 闭包的概念 闭包的常见形式 闭包的作用闭包与词法作用域在《你不知道的JavaScri转载 2021-07-30 14:06:11 · 118 阅读 · 0 评论