11 2022 档案
摘要:安装配置 在其官网(Commons IO – Download Apache Commons IO)下载好之后,在项目中导入 使用 1、复制文件 void copyFile(final File srcFile, final File destFile) //复制文件到另外一个文件 void lon
阅读全文
摘要:字节流 FileInputStream 字节输入流 常用方法:int read(byte[] b,int off ,int len) 返回读取的长度,读取失败返回-1。最多读取len个字节,读来的数据存放在b中,从第b[off]个开始存放。 FileOutputStream 字节输出流 常用方法:v
阅读全文
摘要:Date类: getTime() 获取时间戳。(时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数.) SimpleDateFormat类: 用于时间对象与字符串对象的转换。 格式:y :年 、M:月 、 d:日、 H
阅读全文
摘要:IP地址: 用于定位在网络中的节点。 InetAddress类 //获取本机ip地址 InetAddress ip1 = InetAddress.getLocalHost(); //获取域名的ip地址 InetAddress ip2 = InetAddress.getByName("www.baid
阅读全文
摘要:1、使用 java.util.regex.Pattern 类的 compole(表达式) 方法把正则表达式变成一个对象。 //表达式对象:1个数字和1个字母连续 Pattern pattern = Pattern.compile("\\d[a-z]"); 2、通过Pattern 对象获取java.u
阅读全文
摘要:用来匹配需要的字符串。 1、标准字符集合 表达式: \d:任意数字字符。 \D:任意除了数字以外的字符。 \w:任意字母、数字、下划线字符。 \W:任意除了字母数字下划线的字符。 \s:任意空白字符。 \S:任意空白字符以外的字符。 . :任意除了换行符的字符。 例子: 表达式:\d\d\d 匹配:
阅读全文
摘要:支持回滚状态的一种模式。 核心: 创建一个拷贝对象进行备份。 给数据对象两个方法:1、进行备份。2、回滚。 需要备份的数据: public class Datas { private int id; private String name; private double salary; //进行备份
阅读全文
摘要:多个观察者关注同一个目标,当目标发生改变时,观察者们可以收到消息。 (立刻更新消息,或者想知道的时候更新消息。) 实现: 1、自定义观察者:观察者与目标有一致的状态属性,目标持有观察者的引用。 2、jdk自带的: java.util.Observable 类,实现它的类即可被观察(目标类)。 核心方
阅读全文
摘要:当类的行为是基于它的状态改变时,使用状态模式。比如红绿灯控制路口司机的行为。 应用: 用来解决系统中复杂对象的状态转换,以及不同状态下的行为封装问题。 结构: State抽象类。 State实现类:封装了一个状态对应的行为。 上下文类:它持有一个State对象,定义了当前的状态。 例子: 酒店有空闲
阅读全文
摘要:做一件事情,流程是固定的,其中存在不确定的同一类事务。 例如: 去店里吃饭:1、进入店铺。2、点单。3、吃饭。 不确定的是第二步:点单。 实现: 在父类中定义好统一的处理步骤(为不可重写的方法 final ),由子类实现不同的步骤后,调用统一的处理步骤。一般可以使用匿名内部类简化。 比如我从睡醒到出
阅读全文
摘要:当处理同一个对象有多个处理算法的时候,使用一个策略对象来选择处理算法。 例子: 对于客户的优惠率。 算法实现统一的接口: public interface Strategy { public double getPrice(double standarPrice);//获取计算价格的算法 } 具体算
阅读全文
摘要:表示一个作用于某对象结构中的各个元素的操作,使我们在不改变元素的类的前提下定义作用于这些元素的新操作。 使用场景: 对象结构比较稳定,但经常需要在此对象结构上定义新的操作。 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作“污染”这些对象的类,也不希望在增加新操作时修改这
阅读全文
摘要:自定义解析器。 需要:构建语法树,定义终结符与非终结符。 例子:Jsp代码,底层编译为Servlet类。 替代方案:Java中使用脚本引擎运行脚本语言
阅读全文
摘要:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。 这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。 结构: Clinet 客户端:下发命令的类,持有Command 命令类。 大哥说:我渴了。 Command 命令类:管理命令的类,持有Recei
阅读全文
摘要:用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。 场景: 公司多个部门之间,若直接互相打交道,则会形成网状结构,及其复杂,通过经理(中介者)来进行通信则会大大提供效率。 实现思路: 多个对象持有中介者的引用,中介者中持有多个
阅读全文
摘要:用来遍历集合的工具。 实现方式: 使用一个游标记录当前读取位置。 容器中使用迭代器: 一般迭代器都有的方法,整个接口: public interface MyInterator { void first();//将游标指向第一个元素 Object next();//获取此元素并且将游标指向下一个元素
阅读全文
摘要:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。 定义: 为了避免请求发送者与多个请求处理者耦合在一起(使用 if 选择语句处理请求),将所有请求的处理者通过前一对象记住其下一个对象的引用(链表)而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。 结构: 请求对
阅读全文
摘要:共享对象! 目的: 减少创建对象的数量,以减少内存占用和提高性能。 核心奥义: 通过享元类工厂来控制类的生成,相同的对象被放在Map中。 享元对象的结构: 内部状态:可以共享。一般为不可变的属性。 外部状态:不可以共享。一般为可变的属性。 例子 享元类接口:包含了享元类要实现的方法。 interfa
阅读全文
摘要:就是封装!就是封装!就是封装! 把一个很复杂的过程,包装成一个方法。 调用的时候,只使用了一条语句,非常简介!非常美观! 比如:创建一个对象,只需要: new 类名(); 它的内部实现过程自有人帮你做。 迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowled
阅读全文
摘要:给某个对象,动态新增功能。 构成: 1、抽象接口:真实对象与装饰对象实现同一个接口。 2、装饰父类:持有一个真实对象的引用,即可为真实对象新增功能。 3、真实对象:被扩展的对象。 4、装饰对象:继承装饰父类,负责添加功能的装饰对象。 比如: 我有一个IO输出流,它只能写入字节数据。真实对象:File
阅读全文
摘要:把部分和整体的关系用树形结构来表示,使客户端可以使用统一的方式处理部分对象(比如具体文件)和整体对象(比如一个文件夹)。 构成: Component 抽象角色:定义了叶子和容器结构的共同方法 Leaf 叶子角色:无子节点。 Composite 容器角色:可以包含字节点。 比如: 我要对一个文件进行查
阅读全文
摘要:一个类中有两个可以扩展的组件,需要扩展的时候会很麻烦,通过桥接接口,把其中一个组件独立出去。 应用场景: 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象
阅读全文
摘要:代理模式指的是:为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。 使用场景: 1、安全代理:屏蔽对真实角色的直接访问。 2、远程代理:通过代理类处理远程方法调用(RMI)。 3、延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象。 分类: 1、静态代理:静态定义代理类。 例子:静
阅读全文
摘要:适配器模式:我的电脑只有Type-c接口,要使用usb设备,那就需要适配器来进行转接。 构成: 目标接口(Target):用户所期待的接口,抽象类、或者是具体的类,比如电脑上的type-c接口。 需要适配的类(Adaptee):需要适配器转接后才能使用的类,比如usb设备。 适配器(Adapter)
阅读全文
摘要:当我需要创建多个相同的对象时,若通过new 创建对象比较费时费力,那么可以通过克隆来创建一个一样的新对象,即通过原型创建新对象。 原型模式大大节省资源测试 克隆方式: 实现Cloneable接口(声明接口:声明此方法可以克隆),重写Object类的clone方法。 浅克隆:被Clone的对象的所有变
阅读全文
摘要:但你需要创建大量相同对象的时候,使用原型模式吧!原型模式 克隆猫猫: public class CloneCat implements Cloneable { public CloneCat() { try { Thread.sleep(10);//模拟创建类耗时耗力 } catch (Interr
阅读全文
摘要:构件者模式:当某个类的组件构成复杂,我们将组件的制造与装配分开来。 组件的制造者叫做Builder 组件的装配者叫做Director 比如:手机由屏幕、电池、主板三个子组件构成,那我把制作子组件的人叫做PhoneBuilder,把组装它们成为手机的人叫做PhoneDirector。 定义组装者接口和
阅读全文
摘要:工厂模式:创建者(工厂)和调用者(用户)分离。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 开闭原则OCP(Open Closed Principle):软件实体(包括类、模块、功能等)应该对扩展开放,但是对修改关闭。 实例工厂:需要对工
阅读全文
摘要:Java 枚举是一个特殊的类,一般内容为一组常量,或者是唯一的对象(单例对象)。 常用方法有: values() 获取该枚举类中的所有常量,到一个数组中。 ordinal() 获取该常量的索引。 valueOf(String name) 通过name获取枚举常量。 内容为常量 表示一组常量,常量之间
阅读全文
摘要:单例模式指的是:此类在任何时候都只存在一个对象。 实现步骤:1、构造器私有化。2、提供公共的 获取对象的方法getInstance()。 分类: 饿汉式:在加载类的时候就创建对象。 懒汉式:在使用类的时候才创建对象。 枚举,是 JDK 1.5 中引入的新特性。 实现方式: 1、饿汉式:在加载类的时候
阅读全文
摘要:通过取反可以制作简单的文件加密处理器。 示例: public static void main(String[] args) throws Exception{ int i = 3; //取反,并且转为字符串 String str = Integer.toBinaryString(i^0xff);
阅读全文
摘要:类加载的过程: 1、加载:通过类加载器把字节码加载到方法区中,生成一个对应的Class对象。 2、链接:分配内存,连接引用。 3、初始化:先初始化父类,在初始化自己。(执行类的构造器:< clinit( ) > 方法) 1、加载 类加载器( abstract class ClassLoader) 引
阅读全文
摘要:通过继承java.lang.ClassLoader可以自定义类加载器。 步骤: 1、继承ClassLoader。 2、读取字节文件到字节数组中。 3、使用defineClass(类名,字节数组,off,length):将字节数组转换为类的Class的实例。 准备工作:一个待加载的Hello.clas
阅读全文
摘要:配置: 1、进入系统环境变量设置。 2、点击环境变量 3、如图所示: 4、如图所示: 5、点击确定退出配置界面 检验: 1、win+r,输入cmd,点击确定。 2、输入java,弹出信息则配置成功。
阅读全文
摘要:javassist是一个用来处理 Java 字节码的类库,操作的是.class文件。 能够改变一个类的内部结构、新增属性、方法、改变方法的内部结构。 与Class类很相似,可以通过toClass转为Class对象。Java中Class类的使用,反射机制 一、创建类(class文件) 步骤: 1、获取
阅读全文
摘要:在Java中运行脚本语言,例如JavaScript。 步骤: 1、创建脚本引擎管理器 ScriptEngineManager 2、从管理器中获取一个引擎 ScriptEngine 3、通过put(key ,value) 可以创建变量到引擎上下文中 4、通过eval(String jscCode) 可
阅读全文
摘要:在程序中编译其它 .java文件,可以使用JavaCompiler,从程序中调用Java编程语言编译器的接口。 在程序中启动 .class文件,可以使用反射实现。 例子:在程序中编译并且运行,一个简单的helloworld程序。 package lrj.annotation; import java
阅读全文
摘要:与注释不同,注解可以被其他程序读取。比如通过反射(Class)读取注解。 内置注解: 1、@Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。 2、@Deprecated - 标记过时方法。如果使用该方法,会报编译警告。 3、@Suppr
阅读全文
摘要:反射:把Java中的各种数据(方法、属性、构造器、类名)映射成一个个Java对象。 可以通过Class类创建一个类,获取类的信息,操作类的属性。 准备一个Uer类,在 package lurenjia.leaning; 包下,有int id、int age、String name三个私有属性,及其对
阅读全文
摘要:Java内部提供了解析器,可以很方便地解析xml文档。 步骤: 1.创建解析工厂 SAXParserFactory.newInstance() 2.从工厂中获取解析器 .newSAXParser() 3.自行编写处理器:继承DefaultHandler,重写相关方法。 4.创建自己的处理器对象 5.
阅读全文
摘要:传输层协议:TCP,面向连接的协议,必须服务端和客户端两端都存在才可以进行数据传输。 先有服务器,再来客户端访问。 服务端: 1、ServerSocket创建服务器的端口。 2、Socket accpt() 阻塞式获取一个客户连接。 3、getInputStream,getOutputStream获
阅读全文
摘要:传输层协议:UDP,非面向连接的协议,只管把数据按照指定的地址发出去。 一般过程:DatagramSocket和DatagramPacket配合,通过send,reseive,发出接收数据包。 传输过程: 发送端: 1、使用DatagramSocket指定端口,创建发货地址。 2、把要传输的数据打包
阅读全文
摘要:Vue新老系统切换 1- 卸载node.js 2- https://github.com/coreybutler/nvm-windows/releases 下载nvm 3.. 安装后cmd nvm-v 4.cmd里输入 nvm install 16.14.2等待下载完 输入 nvm install
阅读全文
摘要:可重入锁是指同一个线程可以多次获取同一个对象的锁。实现是在锁内部加一个计数器,若是同一个对象来获取则给与锁,并计数器加一。 JDK中已经实现的一个可重入锁:Java.util.concurrent.locks.ReentrantLock。 概论 一个线程获取了某个对象的锁,那么它可以再次获得此对象的
阅读全文
摘要:ThreadLocal指的是每个线程使用的区域独立,互不干扰。 它的子类InheritableThreadLocal可以把数据传递给子线程。 一般创建为对象的静态属性。 常用方法: set (value) get(value) 子类的initialValue(),用于设置初始值。 示例 代码: pu
阅读全文
摘要:听说当两条指令互相不依赖的时候,在cpu或者jvm那儿可能会为了提高性能而进行指令重排。 数据依赖 比如下面两条代码就没有数据依赖: int a = 5; int b= 2; 这两条指令先后顺序并不影响程序运行逻辑,理论来说重排是没有问题的。 例子 但是,在多线程的时候就会出现问题,单个线程有依赖可
阅读全文
摘要:Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。 导入并构建运行环境 简单示例 一个简单的quartz任务调度例子,实现了在1秒后执行HelloJob。 SimpleExample.java import static or
阅读全文
摘要:通过定时调度器可以对线程进行定时开启,周期性地开启,基本步骤: 1、创建一个调度器 new Timer(); 2、准备任务。 继承TimerTask类,重写run方法. 3、确定规则,开始执行。 由Timer对象调用schedule(TimerTask子类对象,线程开始时间,运行周期)方法或者sch
阅读全文
摘要:概述 schedule关注执行间隔(大混子),scheduleAtFixedRate关注执行时间(守信的人)。 例子 schedule( task ,1000L ,2000L) 1秒后开始执行task线程,循环:每过2秒执行一次。 scheduleAtFixedRate( task ,1000L ,
阅读全文
摘要:概论 举个例子:有一个固定容量的货架,生产者放商品进来,消费者拿商品出去,为了保证正常放入和正常拿出(数据的正确性,不会出现超过容量的存放,拿到空气)。使用同步块中的 wait 和 notifAll 方法进行控制。 形如 synchronized (被锁的对象) { 被锁的对象.wait(); //
阅读全文
摘要:代理模式:由代理对象来帮你忙前忙后,你负责出现一下就好了。 静态代理模式:代理对象不可变,已经确定了的。 需要: 1.实现相同的接口。 2.真实角色。 3.代理角色,组合了真实角色(在代理角色里面加一个属性为真实对象,通过构造器获取)。 4.代理角色在共同的方法中调用真实角色的方法。 例子: /**
阅读全文
摘要:代码,自然写的越简洁越好啦,写的人舒服,看的人也舒服,一切为了高效。 要把有限的时间花到其它有意思的事情上去。 lamada表达式简化了匿名内部类。 函数接口 只有一个抽象方法的接口,通常使用@FunctionalInterface注解标识。 例如: Lambda 格式: 这等同于创建了一个匿名实现
阅读全文
摘要:很多东西,看似可变,实际上不过是是新桃换旧符罢了。 String可以使用 =,或 + 重新赋值。 看似一个对象在变化,实际上是丢弃了以前的对象,创建了新的String对象。 而StringBuilder 、 StringBuffer不会丢弃之前的String对象,所以称为可变字符串,StringBu
阅读全文
摘要:实现:将指定图片显示到窗口上。 准备:在工程目录下准备好图片5.png 运行代码: import javax.imageio.ImageIO; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.
阅读全文
摘要:使用递归实现。 代码: class FileUtils{ /** * 存放文件大小 */ private static long countSize; /** * 递归遍历所有文件 */ private static void allFiles(String path){ File fl = new
阅读全文
摘要:当需要使用Arrays.sort()或者Collections.sort()方法对一个非基本数据类型的集合进行排序时。 1、可以让这个类实现Comparable接口,重写compareTo方法(排序规则)。 2、可以使用Comparator接口的实现类,重写compare方法。 一、Comparab
阅读全文