# Java、SpringBoot 内置工具类

news2024/12/23 1:59:21

Java、SpringBoot 内置工具类

文章目录

  • Java、SpringBoot 内置工具类
    • Java 工具类
      • Objects对象工具类
        • 比较
        • 校验空
      • Collections 集合工具类
        • 集合操作
        • 同步控制
      • Calendar日历类
      • Math数学类
    • SpringBoot 工具类
      • 断言
      • 对象、数组、集合
        • ObjectUtils
        • StringUtils
        • CollectionUtils
      • 文件、资源、IO 流
        • FileCopyUtils
        • ResourceUtils
        • StreamUtils
      • 反射、AOP
        • ReflectionUtils
        • AopUtils
        • AopContext

Java 工具类

Objects对象工具类

比较

// 两个参数相等,返回true,否则返回false
public static boolean equals(Object a, Object b)
// 若两个都是null值的字符串或者数组比较,返回true;该方法在数组比较中尤其有用,不清楚对象的具体类型时可以直接使用此方法来解决
public static boolean deepEquals(Object a, Object b) 
// 判断引用o所指对象是否为null,不为null,则返回o所指对象的hasCode方法执行结果,为null,返回0。
public static int hashCode(Object o)
// 若第一个参数不是 null ,则返回在第一个参数上调用 toString的结果,否则返回第二个参数。
public static String toString(Object o, String nullDefault)

校验空

// 检查指定的对象引用是不是null 。若为null,则抛出空指针异常,否则返回对象本身
public static <T> T requireNonNull(T obj)
// 当被校验的参数为null时,根据第二个参数message抛出自定义的NullPointerException 
public static <T> T requireNonNull(T obj, String message)
// 判空方法,如果参数为null则返回true,否则返回false。
public static boolean isNull(Object obj)
// 判断非空方法,若参数是非空,返回true,否则返回false。
public static boolean nonNull(Object obj)

Collections 集合工具类

集合操作

// 反转
void reverse(List list)
// 随机排序
void shuffle(List list)
// 按自然排序的升序排序
void sort(List list)
// 定制排序,由Comparator控制排序逻辑
void sort(List list, Comparator c)
// 交换两个索引位置的元素
void swap(List list, int i , int j)
// 旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。
void rotate(List list, int distance)

同步控制

  • Collections提供了三类方法返回一个不可变集合

emptyXXX():返回一个空的只读集合,静态常量

singleXXX():返回一个只包含指定对象,只有一个元素,只读的集合。

unmodifiablleXXX():返回指定集合对象的只读视图。

Calendar日历类

@Test
public void test1() throws ParseException {
    // 创建一个日历对象,表示当前时间
    Calendar calendar = Calendar.getInstance();

    // 调用add(int field,int amount)方法添加年份
    calendar.add(Calendar.YEAR, 5);
    logger.info(String.valueOf(calendar));

    // 得到日历中的年份
    logger.info(String.valueOf(calendar.get(Calendar.YEAR)));

    // 得到一周中的第一天
    int first = calendar.getFirstDayOfWeek();

    // 得到当前日历对象对应的Date类型
    Date date = calendar.getTime();

    // 得到当前时间距1970年1月1日 00:00:00的毫秒数
    long timeInMillis = calendar.getTimeInMillis();

    // 将当前的日历对象的时间改为传入的时间
    calendar.set(Calendar.YEAR, 2029);
    calendar.set(2019, 8, 5, 16, 15, 30);

    // 获取今天是周几
    int weekDay = calendar.get(Calendar.DAY_OF_WEEK);
    logger.info("今天是周:{}", weekDay - 1);

    // 获取系统当前年
    int year = calendar.get(Calendar.YEAR);
    logger.info("今年是:{}年", year);

    // 获取系统当前月
    int month = calendar.get(Calendar.MONTH);
    logger.info("本月是:{}月", month + 1);

    // 获取系统当前日
    int day = calendar.get(Calendar.DATE);
    logger.info("今天是{}号", day);

    // 获取上午跟下午
    int am_pm = calendar.get(Calendar.AM_PM);
    if (am_pm == 0)
        logger.info("是上午");
    else
        logger.info("是下午");

    // 获取当前的系统时间[date-->String]的过程
    Date time = calendar.getTime();// 获取的是当前系统的时间
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
    String showTime = format.format(time);
    logger.info("当前系统时间为:{}", showTime);

    // 自定义日历的时间
    String strTime = "2021-07-07";
    date = new SimpleDateFormat("yyyy-MM-dd").parse(strTime);
    calendar.setTime(date);// 将时间对象data设置为新的日历
    logger.info("修改后的系统时间为:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(calendar.getTime()));

    logger.info("------------Calendar和Date转换------------");
    Date now = calendar.getTime();
    calendar.setTime(now);


    logger.info("------------Calendar日期计算以及判断------------");
    calendar = new GregorianCalendar();
    Calendar calendar2 = new GregorianCalendar();
    calendar2.set(Calendar.YEAR, 2800);
    // 是否在某个时间(calendar2)之后
    logger.info(String.valueOf(calendar.after(calendar2)));
    // 是否在某个时间(calendar2)之前
    logger.info(String.valueOf(calendar.before(calendar2)));
    // 增加多少年年,月日以及时分秒同理
    calendar.add(Calendar.YEAR, -10);
}

Math数学类

@Test
public void test1() {
    // 求绝对值
    Math.abs(-1);
    // 向上取整
    Math.ceil(3.1);
    // 向下取整
    Math.floor(3.9);
    // 求两个数的最大值
    Math.max(3, 9);
    // 求两个数的最小值
    Math.min(3, 9);
    // 求第一个数的第二个数次幂
    Math.pow(2, 3);
    // 求随机数 0-1
    Math.random();
    // 四舍五入
    Math.round(3.6);
}

SpringBoot 工具类

断言

  • 断言是一个逻辑判断,用于检查不应该发生的情况Assert 关键字在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查
// 要求参数 object 必须为非空(Not Null),否则抛出异常,不予放行
// 参数 message 参数用于定制异常信息。
void notNull(Object object, String message)
// 要求参数必须空(Null),否则抛出异常,不予『放行』。
// 和 notNull() 方法断言规则相反
void isNull(Object object, String message)
// 要求参数必须为真(True),否则抛出异常,不予『放行』。
void isTrue(boolean expression, String message)
// 要求参数(List/Set)必须非空(Not Empty),否则抛出异常,不予放行
void notEmpty(Collection collection, String message)
// 要求参数(String)必须有长度(即,Not Empty),否则抛出异常,不予放行
void hasLength(String text, String message)
// 要求参数(String)必须有内容(即,Not Blank),否则抛出异常,不予放行
void hasText(String text, String message)
// 要求参数是指定类型的实例,否则抛出异常,不予放行
void isInstanceOf(Class type, Object obj, String message)
// 要求参数 `subType` 必须是参数 superType 的子类或实现类,否则抛出异常,不予放行
void isAssignable(Class superType, Class subType, String message)

对象、数组、集合

ObjectUtils

  • 获取对象的基本信息
// 获取对象的类名。参数为 null 时,返回字符串:"null" 
String nullSafeClassName(Object obj)
// 参数为 null 时,返回 0
int nullSafeHashCode(Object object)
// 参数为 null 时,返回字符串:"null"
String nullSafeToString(boolean[] array)
// 获取对象 HashCode(十六进制形式字符串)。参数为 null 时,返回 0 
String getIdentityHexString(Object obj)
// 获取对象的类名和 HashCode。 参数为 null 时,返回字符串:"" 
String identityToString(Object obj)
// 相当于 toString()方法,但参数为 null 时,返回字符串:""
String getDisplayString(Object obj)
  • 判断工具
// 判断数组是否为空
boolean isEmpty(Object[] array)
// 判断参数对象是否是数组
boolean isArray(Object obj)
// 判断数组中是否包含指定元素
boolean containsElement(Object[] array, Object element)
// 相等,或同为 null时,返回 true
boolean nullSafeEquals(Object o1, Object o2)
/*
判断参数对象是否为空,判断标准为:
    Optional: Optional.empty()
       Array: length == 0
CharSequence: length == 0
  Collection: Collection.isEmpty()
         Map: Map.isEmpty()
 */
boolean isEmpty(Object obj)
  • 其他工具方法
// 向参数数组的末尾追加新元素,并返回一个新数组
<A, O extends A> A[] addObjectToArray(A[] array, O obj)
// 原生基础类型数组 --> 包装类数组
Object[] toObjectArray(Object source)

StringUtils

  • 字符串判断工具
// 判断字符串是否为 null,或 ""。注意,包含空白符的字符串为非空
boolean isEmpty(Object str)
// 判断字符串是否是以指定内容结束。忽略大小写
boolean endsWithIgnoreCase(String str, String suffix)
// 判断字符串是否已指定内容开头。忽略大小写
boolean startsWithIgnoreCase(String str, String prefix) 
// 是否包含空白符
boolean containsWhitespace(String str)
// 判断字符串非空且长度不为 0,即,Not Empty
boolean hasLength(CharSequence str)
// 判断字符串是否包含实际内容,即非仅包含空白符,也就是 Not Blank
boolean hasText(CharSequence str)
// 判断字符串指定索引处是否包含一个子串。
boolean substringMatch(CharSequence str, int index, CharSequence substring)
// 计算一个字符串中指定子串的出现次数
int countOccurrencesOf(String str, String sub)
  • 字符串操作工具
// 查找并替换指定子串
String replace(String inString, String oldPattern, String newPattern)
// 去除尾部的特定字符
String trimTrailingCharacter(String str, char trailingCharacter) 
// 去除头部的特定字符
String trimLeadingCharacter(String str, char leadingCharacter)
// 去除头部的空白符
String trimLeadingWhitespace(String str)
// 去除头部的空白符
String trimTrailingWhitespace(String str)
// 去除头部和尾部的空白符
String trimWhitespace(String str)
// 删除开头、结尾和中间的空白符
String trimAllWhitespace(String str)
// 删除指定子串
String delete(String inString, String pattern)
// 删除指定字符(可以是多个)
String deleteAny(String inString, String charsToDelete)
// 对数组的每一项执行 trim() 方法
String[] trimArrayElements(String[] array)
// 将 URL 字符串进行解码
String uriDecode(String source, Charset charset)
  • 路径相关工具方法
// 解析路径字符串,优化其中的 “..” 
String cleanPath(String path)
// 解析路径字符串,解析出文件名部分
String getFilename(String path)
// 解析路径字符串,解析出文件后缀名
String getFilenameExtension(String path)
// 比较两个两个字符串,判断是否是同一个路径。会自动处理路径中的 “..” 
boolean pathEquals(String path1, String path2)
// 删除文件路径名中的后缀部分
String stripFilenameExtension(String path) 
// 以 “. 作为分隔符,获取其最后一部分
String unqualify(String qualifiedName)
// 以指定字符作为分隔符,获取其最后一部分
String unqualify(String qualifiedName, char separator)

CollectionUtils

  • 集合判断工具
// 判断 List/Set 是否为空
boolean isEmpty(Collection<?> collection)
// 判断 Map 是否为空
boolean isEmpty(Map<?,?> map)
// 判断 List/Set 中是否包含某个对象
boolean containsInstance(Collection<?> collection, Object element)
// 以迭代器的方式,判断 List/Set 中是否包含某个对象
boolean contains(Iterator<?> iterator, Object element)
// 判断 List/Set 是否包含某些对象中的任意一个
boolean containsAny(Collection<?> source, Collection<?> candidates)
// 判断 List/Set 中的每个元素是否唯一。即 List/Set 中不存在重复元素
boolean hasUniqueObject(Collection<?> collection)
  • 集合操作工具
// 将 Array 中的元素都添加到 List/Set 中
<E> void mergeArrayIntoCollection(Object array, Collection<E> collection)  
// 将 Properties 中的键值对都添加到 Map 中
<K,V> void mergePropertiesIntoMap(Properties props, Map<K,V> map)
// 返回 List 中最后一个元素
<T> T lastElement(List<T> list)  
// 返回 Set 中最后一个元素
<T> T lastElement(Set<T> set) 
// 返回参数 candidates 中第一个存在于参数 source 中的元素
<E> E findFirstMatch(Collection<?> source, Collection<E> candidates)
// 返回 List/Set 中指定类型的元素。
<T> T findValueOfType(Collection<?> collection, Class<T> type)
// 返回 List/Set 中指定类型的元素。如果第一种类型未找到,则查找第二种类型,以此类推
Object findValueOfType(Collection<?> collection, Class<?>[] types)
// 返回 List/Set 中元素的类型
Class<?> findCommonElementType(Collection<?> collection)

文件、资源、IO 流

FileCopyUtils

  • 输入
// 从文件中读入到字节数组中
byte[] copyToByteArray(File in)
// 从输入流中读入到字节数组中
byte[] copyToByteArray(InputStream in)
// 从输入流中读入到字符串中
String copyToString(Reader in)
  • 输出
// 从字节数组到文件
void copy(byte[] in, File out)
// 从文件到文件
int copy(File in, File out)
// 从字节数组到输出流
void copy(byte[] in, OutputStream out) 
// 从输入流到输出流
int copy(InputStream in, OutputStream out) 
// 从输入流到输出流
int copy(Reader in, Writer out)
// 从字符串到输出流
void copy(String in, Writer out)

ResourceUtils

  • 从资源路径获取文件
// 判断字符串是否是一个合法的 URL 字符串。
static boolean isUrl(String resourceLocation)
// 获取 URL
static URL getURL(String resourceLocation) 
// 获取文件(在 JAR 包内无法正常使用,需要是一个独立的文件)
static File getFile(String resourceLocation)
  • Resource
// 文件系统资源 D:\...
FileSystemResource
// URL 资源,如 file://... http://...
UrlResource
// 类路径下的资源,classpth:...
ClassPathResource
// Web 容器上下文中的资源(jar 包、war 包)
ServletContextResource
// 判断资源是否存在
boolean exists()
// 从资源中获得 File 对象
File getFile()
// 从资源中获得 URI 对象
URI getURI()
// 从资源中获得 URI 对象
URL getURL()
// 获得资源的 InputStream
InputStream getInputStream()
// 获得资源的描述信息
String getDescription()

StreamUtils

  • 输入
void copy(byte[] in, OutputStream out)
int copy(InputStream in, OutputStream out)
void copy(String in, Charset charset, OutputStream out)
long copyRange(InputStream in, OutputStream out, long start, long end)
  • 输出
byte[] copyToByteArray(InputStream in)
String copyToString(InputStream in, Charset charset)
// 舍弃输入流中的内容
int drain(InputStream in) 

反射、AOP

ReflectionUtils

  • 获取方法
// 在类中查找指定方法
Method findMethod(Class<?> clazz, String name) 
// 同上,额外提供方法参数类型作查找条件
Method findMethod(Class<?> clazz, String name, Class<?>... paramTypes) 
// 获得类中所有方法,包括继承而来的
Method[] getAllDeclaredMethods(Class<?> leafClass) 
// 在类中查找指定构造方法
Constructor<T> accessibleConstructor(Class<T> clazz, Class<?>... parameterTypes) 
// 是否是 equals() 方法
boolean isEqualsMethod(Method method) 
// 是否是 hashCode() 方法 
boolean isHashCodeMethod(Method method) 
// 是否是 toString() 方法
boolean isToStringMethod(Method method) 
// 是否是从 Object 类继承而来的方法
boolean isObjectMethod(Method method) 
// 检查一个方法是否声明抛出指定异常
boolean declaresException(Method method, Class<?> exceptionType) 
  • 执行方法
// 执行方法
Object invokeMethod(Method method, Object target)  
// 同上,提供方法参数
Object invokeMethod(Method method, Object target, Object... args) 
// 取消 Java 权限检查。以便后续执行该私有方法
void makeAccessible(Method method) 
// 取消 Java 权限检查。以便后续执行私有构造方法
void makeAccessible(Constructor<?> ctor) 
  • 获取字段
// 在类中查找指定属性
Field findField(Class<?> clazz, String name) 
// 同上,多提供了属性的类型
Field findField(Class<?> clazz, String name, Class<?> type) 
// 是否为一个 "public static final" 属性
boolean isPublicStaticFinal(Field field) 
  • 设置字段
// 获取 target 对象的 field 属性值
Object getField(Field field, Object target) 
// 设置 target 对象的 field 属性值,值为 value
void setField(Field field, Object target, Object value) 
// 同类对象属性对等赋值
void shallowCopyFieldState(Object src, Object dest)
// 取消 Java 的权限控制检查。以便后续读写该私有属性
void makeAccessible(Field field) 
// 对类的每个属性执行 callback
void doWithFields(Class<?> clazz, ReflectionUtils.FieldCallback fc) 
// 同上,多了个属性过滤功能。
void doWithFields(Class<?> clazz, ReflectionUtils.FieldCallback fc, 
                  ReflectionUtils.FieldFilter ff) 
// 同上,但不包括继承而来的属性
void doWithLocalFields(Class<?> clazz, ReflectionUtils.FieldCallback fc) 

AopUtils

  • 判断代理类型
// 判断是不是 Spring 代理对象
boolean isAopProxy()
// 判断是不是 jdk 动态代理对象
isJdkDynamicProxy()
// 判断是不是 CGLIB 代理对象
boolean isCglibProxy()
  • 获取被代理对象的 class
// 获取被代理的目标 class
Class<?> getTargetClass()

AopContext

  • 获取当前对象的代理对象
Object currentProxy
doWithFields(Class<?> clazz, ReflectionUtils.FieldCallback fc, 
                  ReflectionUtils.FieldFilter ff) 
// 同上,但不包括继承而来的属性
void doWithLocalFields(Class<?> clazz, ReflectionUtils.FieldCallback fc) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/507533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visual Studio 2019离线安装包获取和安装教程

摘要 介绍Visual Studio 2019离线安装方法和配置及注意事项 关键词 VS2019 离线安装 Visual Studio 2019版本与以往的2015、2013、2012版本不同&#xff0c;采用了新的模块化安装方法。微软官方也并未提供ISO镜像&#xff0c;根据官方提供的离线下载方案&#xff08;docs.mic…

「AI 孙燕姿」翻唱华语乐坛歌曲爆红全网,AI 翻唱将带来哪些影响?是否会有版权等问题?

在某视频平台上&#xff0c;“AI孙燕姿”成了新网红&#xff0c;它翻唱过周杰伦的《发如雪》、翻唱过郭顶的《水星记》、翻唱过赵雷的《我记得》&#xff0c;受到了网友的追捧&#xff0c;甚至有网友宣布“这是2023年最火的声音”。 网上除了AI孙燕姿&#xff0c;还有AI周杰伦…

AOP、spring事务管理

目录 AOP简介 AOP入门案例 AOP配置管理 AOP通知类型 业务层接口执行效率 AOP通知获取数据 百度网盘密码数据兼容处理 AOP事务管理 AOP简介 什么是AOP? AOP(Aspect Oriented Programming)面向切面编程&#xff0c;一种编程范式&#xff0c;指导开发者如何组织程序结…

HTML <area> 标签

实例 带有可点击区域的图像映射: <img src="planets.jpg" border="0" usemap="#planetmap" alt="Planets" /><map name="planetmap" id="planetmap"><area shape="circle" coords=&q…

AHUT周赛2

1.A - Mahmoud and Ehab and the MEX Problem - A - Codeforces 核心在于x之前的数肯定是有的&#xff0c;x是没有的 所以从0开始一直到x&#xff0c;如果哪个数没有就加上哪个数(操作数1)&#xff0c;如果有x就删去x(操作数1) AC代码&#xff1a; #include<iostream>…

【UML】

文章目录 1.uml图2.类图3.类合类之间关系&#xff1a;泛化关系4.类合类之间关系&#xff1a;实现关系5.类合类之间关系&#xff1a;关联关系6. 聚合关系 组合关系 依赖关系6.1聚合关系6.2 组合关系6.3 依赖关系 7.用例图8.时序图9.状态图10.活动图 1.uml图 2.类图 新建类图 新…

【超全解决方法】关于anaconda navigator启动时一直卡在 loading applications 的问题

问题描述 点开 anaconda navigator 一直处于以下页面&#xff0c;且过了很长时间都加载不出来。 &#xff08;至于为什么会出现这样的问题&#xff0c;原因是我更新了anaconda navigator 之后就出现一大堆问题&#xff0c;最终点开anaconda navigator却一直开在下面的页面&am…

【sop】基于灵敏度分析的有源配电网智能软开关优化配置(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【类和对象(中)】六大默认成员函数

文章目录 前言一、&#x1f33a;构造函数&#xff08;重点&#x1f33a;&#xff09;1.构造函数的特性 二、&#x1f33a;析构函数&#xff08;重点&#x1f33a;&#xff09;1.析构函数的特性 三、&#x1f33a;拷贝构造函数 &#xff08;重点&#x1f33a;&#xff09;1.拷贝…

Powerlink协议在嵌入式linux上的移植和测试(电脑和linux板通信实验)

使用最新的openPOWERLINK 2.7.2源码&#xff0c;业余时间搞定了Powerlink协议在嵌入式linux上的移植和测试&#xff0c;并进行了下电脑和linux开发板之间的通信实验。添加了一个节点配置&#xff0c;跑通了源码中提供的主站和从站的两个demo。这里总结下移植过程分享给有需要的…

4。计算机组成原理(4)CPU

嵌入式软件开发&#xff0c;非科班专业必须掌握的基本计算机知识 核心知识点&#xff1a;数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统 CPU&#xff08;中央处理器&#xff09;是计算机的核心部件&#xff0c;它主要负责执行计算机指令&#xff0c…

万字超详细的Java图书管理系统

&#x1f495;”生命中的每个人都是一个故事&#xff0c;而每个故事都值得被讲述“&#x1f495; &#x1f386;作者&#xff1a;不能再留遗憾了&#x1f386; &#x1f43c;专栏&#xff1a;Java学习&#x1f43c; &#x1f697;该文章主要内容&#xff1a;用Java实现简单的图…

三、PEMFC基础之组件间热传导

三、PEMFC基础之组件间热传导 一、理论基础二、编程实践 一、理论基础 热传导主要基于傅里叶热传导定律。在燃料电池中&#xff0c;除了各组件内部的热传导外&#xff0c;还有冷却流体与双极板的对流换热。公式略。 燃料电池内部稳态导热&#xff1a; d 2 T d x 2 q i n t k…

iMazing2软件最新版本功能技术参数详细介绍

这里有iMazing 的产品概述、功能特性、技术参数等详细介绍&#xff0c; 可以帮助您快速入门&#xff0c;了解iMazing的功能。不管是 iPhone、iPad 或 iPod Touch 设备&#xff0c;只要使用 USB 电缆将设备连接到计算机&#xff0c;就可以处理不同类型的数据。 自动备份 iMazi…

【Linux】基础IO——文件描述符

目录 什么是文件描述符标准输入、输出、错误的返回值类型FILE*的理解进程中文件描述符的分配规则重定向的原理重定向的实际使用方法dup2 如何理解缓冲区 什么是文件描述符 在基础IO的上一篇博客里有提到过&#xff0c;系统调用open与close的返回值问题&#xff1a; 成功返回文…

PyQGIS中一次性加载多个shp文件

目录 遍历添加多个图层 打印图层列表清单 打开QGIS Desktop 3.22.16&#xff0c;点击菜单栏 【设置】——>【Python控制台】 在Python控制台中点击【显示编辑器】按钮&#xff0c;打开Python编辑器 点击Python编辑器的第一个按钮 【打开脚本文件】&#xff0c;选择加载遍历…

2023年继续使用WordPress的6个最重要原因

为什么要使用 WordPress&#xff1f;我的网站不够好吗&#xff1f;为什么我需要从另一个平台切换到 WordPress&#xff1f; 在本文中&#xff0c;我们将分享您应该使用 WordPress 的最重要原因。我们还将涵盖您可以使用 WordPress 创建的所有不同类型的网站&#xff0c;并展示…

c高级(常用命令及软件安装与下载)

初始工作路径不在家目录下&#xff0c;在不切换路径的情况下&#xff0c;在家目录下创建一个subdir目录&#xff0c;在subdir这个目录下&#xff0c;创建subdir1和subdir2&#xff0c;并且把/etc/passwd拷贝到subdir1中&#xff0c;把/etc/group文件拷贝到subdir2中&#xff0c…

开源趣事~ 记给 OpenHarmony 提 PR 的那些事

大家好哇&#xff0c;许久不见&#xff0c;也感谢大家这么久一直以来的关注&#xff0c;也感谢在短视频盛行的今天&#xff0c;你们还能静下心来坚守文字的阵地。 说到这次的主题&#xff0c;参加鸿蒙项目的开源&#xff0c;也是小编第一次拥抱开源&#xff0c;就像是别人有困…

vue脚手架+elementUI,实现登录用户时的Loading...窗口

文章目录 App.vuevuex全局变量登陆成功Login组件使用AboutMe组件中关闭 登录失败情况login组件中关闭 改为aop思想的请求拦截器 App.vue 为了全局通用控制此标签&#xff0c;所以我建议把他放到App.vue文件中 <!--全局加载ing&#xff0c;保证不会在转换组件时被销毁-->…