当前位置: 首页 > news >正文

Java枚举类与注解——一篇文章读懂枚举类与注解

文章目录

    • 一、枚举类
    • ① 自定义枚举类
    • ② enum关键字定义枚举类
    • ③ enum 枚举类的方法
    • ④ enum 枚举类实现接口
    • 二、注解
    • ① 生成文档相关注解
    • ②注解在编译时进行格式检查
    • ③注解跟踪代码的依赖性,实现替代配置文件功能
    • ④ 自定义注解
    • ⑤ jdk提供的4种元注解
    • ⑥ JKD8 新特性:可重复注解
    • ⑦ JDK8 新特性:类型注解

一、枚举类

类的对象只有有限个, 确定的. 我们称此类为枚举类.

说明:

  1. 类的对象只有有限个,确定的。如:
    • 星期:Monday(星期一)、…、Sunday(星期天)
    • 性别:Man(男)、Woman(女)  季节:Spring(春节)…Winter(冬天)
    • 支付方式:Cash(现金)、WeChatPay(微信)、Alipay(支付宝)、BankCard(银 行卡)、CreditCard(信用卡)
    • 就职状态:Busy、Free、Vocation、Dimission
    • 订单状态:Nonpayment(未付款)、Paid(已付款)、Delivered(已发货)、 Return(退货)、Checked(已确认)Fulfilled(已配货)
    • 线程状态:创建、就绪、运行、阻塞、死亡
  2. 当需要定义一组常量时,强烈建议使用枚举类。
  3. 若枚举只有一个对象, 则可以作为一种单例模式的实现方式。

枚举类的实现:

  1. JDK1.5之前需要自定义枚举类。
  2. JDK 1.5 新增的 enum 关键字用于定义枚举类。

枚举类的属性:

  1. 枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰。
  2. 枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。
  3. 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的 传入参数。

① 自定义枚举类

通过自己写一个自定义的类来实现自定义枚举类。

自定义枚举类的实现:

  1. 私有化类的构造器,保证不能在类的外部创建其对象。

  2. 在类的内部创建枚举类的实例。声明为:public static final。

  3. 对象如果有实例变量,应该声明为private final,并在构造器中初始化。

Demo:

package com.broky.EnumClass;/*** 自定义枚举类** @author 13roky* @date 2021-05-13 17:16*/
public class SeasonTest {public static void main(String[] args) {Season spring = Season.SPRING;System.out.println(spring);}
}// 自定义枚举类
class Season{// 1. 声明 Season 对象的属性// final 不能使用初始化赋值, 可以手动 显式赋值, 构造器赋值, 代码块赋值// 现式赋值和代码块赋值 会导致创建当前类的不同对象时 他们的这些属性都是一样的// 构造器赋值 可以在实例化的时候设置属性private final String seasonName;private final String seasonDesc;// 2. 私有化类的构造器, 并给对象属性赋值private Season(String seasonName, String seasonDesc){this.seasonName = seasonName;this.seasonDesc = seasonDesc;}// 3. 提供当前枚举类的多个对象 : public static final 的public static Season SPRING = new Season("春天","春暖花开");public static Season SUMMER = new Season("夏天","夏日炎炎");public static Season AUTUMN = new Season("秋天","秋高气爽");public static Season WINTER = new Season("冬天","冰天雪地");// 4. 其它诉求1 : 获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}// 5. 其他诉求2 : 提供toString()@Overridepublic String toString() {return "Season{" + "seasonName='" + seasonName + '\'' + ", seasonDesc='" + seasonDesc + '\'' + '}';}
}

② enum关键字定义枚举类

通过使用enum关键字,和一些简便的规则,更方便枚举类的创建

说明:

  1. enum 枚举类是继承 java.lang.Enum 类的,所以其中如果不重写 toString 使用的是 java.lang.Enum 中的 toString,不会输出内存地址,而是会打印对象名

enum 枚举类的实现:

  1. 使用 enum 声明类为枚举类。

  2. 在枚举类的开头首先定义枚举类中所需要的对象。

    • 枚举类对实例化枚举类的对象做了简化

      只需要使用 对象名(参数···) 就可以完成实例化,如:

      PRING("春天", "春暖花开"), WINTER("冬天", "冰天雪地");

      多个对象用 “,” 隔开,最后一个以 “;” 结尾

      如果没有属性,可以去掉括号,如:

      PRING, WINTER;

  3. 其余规则均与自定义枚举类相同。

Demo:

package com.broky.EnumClass;/*** @author 13roky* @date 2021-05-13 18:32*/
public class SeasonTest1 {public static void main(String[] args) {Season1 spring = Season1.SPRING;System.out.println(spring);System.out.println(Season1.class.getSuperclass());}
}enum Season1 {// 1. 提供当前枚举类的对象, 多个对象之间用","隔开, 末尾对象用";"结束SPRING("春天", "春暖花开"), SUMMER("夏天", "夏日炎炎"), AUTUMN("秋天", "秋高气爽"), WINTER("冬天", "冰天雪地");// 2. 声明 Season 对象的属性 : private final 修饰private final String seasonName;private final String seasonDesc;// 3. 私有化类的构造器, 并给对象属性赋值private Season1(String seasonName, String seasonDesc) {this.seasonName = seasonName;this.seasonDesc = seasonDesc;}// 4. 其它诉求1 : 获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}// 5. 其他诉求2 : 提供toString()// 不重写 toString 时, 如果 enum 类继承的是 Object 类, 那么打印时应该使用 Object 的 toString 打印的是地址值.// 但是经过实践得知, 打印出的不是地址值, 由 Season1.class.getSuperclass() 知, 其父类是 java.lang.Enum//    @Override//    public String toString() {//        return "Season{" + "seasonName='" + seasonName + '\'' + ", seasonDesc='" + seasonDesc + '\'' + '}';//    }
}

③ enum 枚举类的方法

  • **values() :**返回枚举类型的对象数组。该方法可以很方便地遍历所有的 枚举值。
  • **valueOf(String str) :**可以把一个字符串转为对应的枚举类对象。要求字符 串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
  • toString():返回当前枚举类对象常量的名称。

Demo:(枚举类使用上面代码的枚举类Season1)

package com.broky.EnumClass;import java.util.Arrays;/*** @author 13roky* @date 2021-05-13 18:32*/
public class SeasonTest1 {public static void main(String[] args) {Season1 spring = Season1.SPRING;System.out.println(spring);System.out.println(Season1.class.getSuperclass());System.out.println("************************************");// values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。Season1[] values = Season1.values();System.out.println(Arrays.toString(values));Thread.State[] values1 = Thread.State.values();System.out.println(Arrays.toString(values1));System.out.println("************************************");// valueOf(String str) :返回枚举类中对象名是objName的对象。// 可以把一个字符串转为对应的枚举类对象。// 要求字符 串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。Season1 winter1= Season1.valueOf("WINTER");System.out.println(winter1);System.out.println("************************************");// toString():返回当前枚举类对象常量的名称。System.out.println(winter1.toString());}
}

④ enum 枚举类实现接口

enum 枚举类可以像正常类那样实现接口并重写接口中的方法

但是 enum 枚举类还有其独特的实现接口的方法, 接口类中的每个对象都可以独自重写实现接口的方法

enum 对象特有的实现接口的方法 :

  • 对象名(构造器参数){ 需要重写的方法 }, 如:
    AUTUMN("秋天", "秋高气爽"){@Overridepublic void show() {System.out.println("秋高气爽");}},WINTER("冬天", "冰天雪地"){@Overridepublic void show() {System.out.println("凛冬已至");}};

Demo:

package com.broky.EnumClass;import org.junit.jupiter.api.Test;import java.util.Arrays;/*** @author 13roky* @date 2021-05-13 18:32*/
public class SeasonTest1 {@Testpublic void test(){Season1 spring = Season1.SPRING;spring.show();Season1.SUMMER.show();}
}interface info{void show();
}enum Season1 implements info{// enum 独有的实现接口的方法// 1. 提供当前枚举类的对象, 多个对象之间用","隔开, 末尾对象用";"结束SPRING("春天", "春暖花开"){@Overridepublic void show() {System.out.println("春天在哪里");}},SUMMER("夏天", "夏日炎炎"){@Overridepublic void show() {System.out.println("夏天");}},AUTUMN("秋天", "秋高气爽"){@Overridepublic void show() {System.out.println("秋高气爽");}},WINTER("冬天", "冰天雪地"){@Overridepublic void show() {System.out.println("凛冬已至");}};// 2. 声明 Season 对象的属性 : private final 修饰private final String seasonName;private final String seasonDesc;// 3. 私有化类的构造器, 并给对象属性赋值private Season1(String seasonName, String seasonDesc) {this.seasonName = seasonName;this.seasonDesc = seasonDesc;}// 4. 其它诉求1 : 获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}@Overridepublic void show() {System.out.println("这是一个季节");}}

二、注解

  • 从 JDK 5.0 开始, Java 增加了对元数据(MetaData) 的支持, 也就是 Annotation(注解)

  • Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加 载, 运行时被读取, 并执行相应的处理。通过使用 Annotation, 程序员 可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息。代 码分析工具、开发工具和部署工具可以通过这些补充信息进行验证 或者进行部署。

  • Annotation 可以像修饰符一样被使用, 可用于修饰包,类, 构造器, 方 法, 成员变量, 参数, 局部变量的声明, 这些信息被保存在 Annotation 的 “name=value” 对中。

  • 在JavaSE中,注解的使用目的比较简单,例如标记过时的功能, 忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如 用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗 代码和XML配置等。

  • 未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以 上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的 Struts2有一部分也是基于注解的了,注解是一种趋势,一定程度上 可以说:框架 = 注解 + 反射 + 设计模式

  • 使用 Annotation 时要在其前面增加 @ 符号, 并把该 Annotation 当成 一个修饰符使用。用于修饰它支持的程序元素

① 生成文档相关注解

用法:

  • @author 标明开发该类模块的作者,多个作者之间使用,分割
  • @version 标明该类模块的版本
  • @see 参考转向,也就是相关主题
  • @since 从哪个版本开始增加的
  • @param 对方法中某参数的说明,如果没有参数就不能写
  • @return 对方法返回值的说明,如果方法的返回值类型是void就不能写
  • @exception 对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写

说明:

  • @param @return 和 @exception 这三个标记都是只用于方法的。
  • @param的格式要求:@param 形参名 形参类型 形参说明
  • @return 的格式要求:@return 返回值类型 返回值说明
  • @exception的格式要求:@exception 异常类型 异常说明
  • @param和@exception可以并列多个

Demo:

package com.broky.EnumClass;/*** @author 13roky* @version 1.0* @see Math.java*/
public class JavadocTest {/*** 程序的主方法,程序的入口** @param args String[] 命令行参数*/public static void main(String[] args) {}/*** 求圆面积的方法** @param radius double 半径值* @return double 圆的面积*/public static double getArea(double radius) {return Math.PI * radius * radius;}
}

②注解在编译时进行格式检查

编译时,会强制校验注解处的方法是否符合注解,如果不符合会报错

JDK内置的三个基本注解:

  • @Override: 限定重写父类方法, 该注解只能用于方法
  • @Deprecated: 用于表示所修饰的元素(类, 方法, 属性等·已过时。通常是因为 所修饰的结构危险或存在更好的选择
  • @SuppressWarnings: 抑制编译器警告,消除某段代码在编译器中的警告

Demo:

package com.broky.EnumClass;public class AnnotationTest{public static void main(String[] args) {@SuppressWarnings("unused")int a = 10;}@Deprecatedpublic void print(){System.out.println("过时的方法");}@Overridepublic String toString() {return "重写的toString方法()";}
}

③注解跟踪代码的依赖性,实现替代配置文件功能

  • Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署。
import java.io.IOException;@WebServlet("/login")
public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
<servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login</url-pattern></servlet-mapping>
  • spring框架中关于“事务”的管理
 @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, readOnly = false, timeout = 3) public void buyBook(String username,String isbn){        //1.查询书的单价        int price=bookShopDao.findBookPriceByIsbn(isbn);        //2. 更新库存        bookShopDao.updateBookStock(isbn);        //3. 更新用户的余额        bookShopDao.updateUserAccount(username,price);        }
<!-- 配置事务属性 --><tx:advice transaction-manager="dataSourceTransactionManager" id="txAdvice"><tx:attributes><!-- 配置每个方法使用的事务属性 --><tx:method name="buyBook" propagation="REQUIRES_NEW"isolation="READ_COMMITTED" read-only="false" timeout="3" /></tx:attributes></tx:advice>

④ 自定义注解

说明:

  • 定义新的 Annotation 类型使用 @interface 关键字
  • 自定义注解自动继承了java.lang.annotation.Annotation接口
  • Annotation 的成员变量在 Annotation 定义中以无参数方法的形式来声明。其 方法名和返回值定义了该成员的名字和类型。我们称为配置参数。类型只能 是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型、 以上所有类型的数组。
  • 可以在定义 Annotation 的成员变量时为其指定初始值, 指定成员变量的初始 值可使用 default 关键字
  • 如果只有一个参数成员,建议使用参数名为value
  • 如果定义的注解含有配置参数,那么使用时必须指定参数值,除非它有默认 值。格式是“参数名 = 参数值” ,如果只有一个参数成员,且名称为value, 可以省略“value=”
  • 没有成员定义的 Annotation 称为标记; 包含成员变量的 Annotation 称为元数 据 Annotation 注意:自定义注解必须配上注解的信息处理流程才有意义。

注意:自定义注解必须配上注解的信息处理流程才有意义。(使用反射实现)

Demo:

package com.broky.EnumClass;/** * @author 13roky * @date 2021-05-14 8:36 */public @interface MyAnnotation {    String value() default "test";}package com.broky.EnumClass;/** * @author 13roky * @date 2021-05-14 8:16 */public class AnnotationTest {    @MyAnnotation()    void test(){            }}

⑤ jdk提供的4种元注解

说明:

  • JDK 的元 Annotation 用于修饰其他 Annotation 定义
  • JDK5.0提供了4个标准的meta-annotation类型,分别是:
    • Retention
    • Target
    • Documented
    • Inherited

元注解说明:

  • @Retention: 只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 的生命 周期, @Rentention 包含一个 RetentionPolicy 类型的成员变量, 使用 @Rentention 时必须为该 value 成员变量指定值:

    • **RetentionPolicy.SOURCE: **在源文件中有效(即源文件保留),编译器直接丢弃这种策略的 注释

    • **RetentionPolicy.CLASS(默认): **在class文件中有效(即class保留) , 当运行 Java 程序时, JVM 不会保留注解。 这是默认值

    • RetentionPolicy.RUNTIME: 在运行时有效(即运行时保留),当运行 Java 程序时, JVM 会 保留注释。程序可以通过反射获取该注释

      只有声明为RUNTIME生命周期的注解,才能通过反射获取。

public enum RetentionPolicy{SOURCE,CLASS,RUNTIME}@Retention(RetentionPolicy.SOURCE)@interface MyAnnotation1{ }@Retention(RetentionPolicy.RUNTIME)@interface MyAnnotation2{ }
  • @Target: 用于修饰 Annotation 定义, 用于指定被修饰的 Annotation 能用于 修饰哪些程序元素。 @Target 也包含一个名为 value 的成员变量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yXOHoK5a-1622595056140)(https://i.vgy.me/JvS9L6.png)]

@Target({FIELD,METHOD,TYPE})@Retention(RetentionPolicy.SOURCE)@interface MyAnnotation1{ }
  • @Documented: 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档。默认情况下,javadoc是不包括注解的。
    • 定义为Documented的注解必须设置Retention值为RUNTIME。
  • @Inherited: 被它修饰的 Annotation 将具有继承性。如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解。
    • 比如:如果把标有@Inherited注解的自定义的注解标注在类级别上,子类则可以 继承父类类级别的注解
    • 实际应用中,使用较少

元数据的理解:

String name =“13roky”

这个数据中13roky最为重要,String 和 name 都是对其进行修饰,那么String 和 name 就可以叫做元数据:用于修饰数据的数据

⑥ JKD8 新特性:可重复注解

JDK8 之前重复注解的实现:

JDK8 之前如果要同一位置加多个相同注解,需要使用数组来添加。

package com.broky.EnumClass;import java.lang.annotation.*;import static java.lang.annotation.ElementType.*;/** * @author 13roky * @date 2021-05-14 8:36 */@Retention(RetentionPolicy.SOURCE)@Target({FIELD, METHOD})public @interface MyAnnotation {    String[] value();}
package com.broky.EnumClass;/** * @author 13roky * @date 2021-05-14 8:16 */public class AnnotationTest {    @MyAnnotation({"123","456"})    void test(){    }}

JKD8 新特性:可重复注解:

  • 在 MyAnnotation 上声明 @Repeatable,成员值为 Annotations.class
  • MyAnnotation 的 Targe , Inherited 和 Retention 与Annotations相同。

Demo:

package com.broky.EnumClass;/** * @author 13roky * @date 2021-05-14 8:16 */public class AnnotationTest {    @MyAnnotation()    @MyAnnotation()    void test(){    }}
package com.broky.EnumClass;import java.lang.annotation.*;import static java.lang.annotation.ElementType.*;/** * @author 13roky * @date 2021-05-14 8:36 */@Repeatable(MyAnnotations.class)@Retention(RetentionPolicy.SOURCE)@Target({FIELD, METHOD})public @interface MyAnnotation {    String value() default "test";}
package com.broky.EnumClass;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.ElementType.METHOD;/** * @author 13roky * @date 2021-05-14 9:43 */@Retention(RetentionPolicy.SOURCE)@Target({FIELD, METHOD})public @interface MyAnnotations {    MyAnnotation[] value();}

⑦ JDK8 新特性:类型注解

可以理解为,类型注解就是对元注解@Target,新增的两个参数类型

TYPE_PARAMETER, TYPE_USE

说明:

  • 在Java 8之前,注解只能是在声明的地方所使用,Java8开始,注解可以应用 在任何地方
    • ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语 句中(如:泛型声明)。
    • ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。

Demo:

// 在自定义注解的@Target中加入参数TYPE_PARAMETERclass Generic<@MyAnnotation T>{    // 在自定义注解的@Target中加入参数TYPE_USE    public void show() throws @MyAnnotation RuntimeException{        ArrayList<@MyAnnotation String> list = new ArrayList<>();        int num = (@MyAnnotation int) 10L;    }}
package com.broky.EnumClass;import java.lang.annotation.*;import static java.lang.annotation.ElementType.*;/** * @author 13roky * @date 2021-05-14 8:36 */@Repeatable(MyAnnotations.class)@Retention(RetentionPolicy.SOURCE)@Target({FIELD, METHOD, TYPE_PARAMETER,TYPE_USE})public @interface MyAnnotation {    String value() default "test";}

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

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

Git一个项目中引用其他Git仓库

// git submodule add [git地址] [目录位置] $ git submodule add https://xxx/gittest.git src/gittest使用submodule后 在当前git目录下会生成一个 .gitmodules 文件 如果但当前目录已经存在了一个 .gitmodules&#xff0c;命令需要更改为 $ git submodule add -f https://…...

工作中让他人做选择题

object事实信息reflective感受体会联想interpretive理解思考decision决定行动你看到/听到/记得什么你感觉怎么样学到/领悟什么下一步该做什么 O 场景&#xff1a;Car在某次制办事情不断请示领导&#xff0c;领导最终以选择题提问方式反向给出了答案。 R 感受是错过了一次可以做…...

2021.6.1

链接查询 连接查询可分为内连接和外连接。 一.内连接&#xff1a;内连接分3种&#xff1a;交叉连接、相等连接、自然连接。 1.内连接语法&#xff1a; 1.交叉连接&#xff1a; 交叉链接又称“笛卡尔链接”&#xff0c;即所有类型的内连接的基础 语法 select * from table…...

SpringBoot入门及官网教程

文章目录http://felord.cn/_doc/_springboot/2.1.5.RELEASE/_book/https://spring.io/projects/spring-boothttps://springboot.io/http://felord.cn/_doc/_springboot/2.1.5.RELEASE/_book/ https://spring.io/projects/spring-boot https://springboot.io/...

【MyBatis详解】——从Xml配置解析到SQL执行过程

目录整体架构与使用DemoMybatis核心流程1. 创建SqlSessionFactory配置解析——SQL解析&#xff08;存储MappedStatement到Configuration中&#xff09;SqlNodeMappedStatementSqlSourceBoundSql2. 创建SqlSessionSqlSessionExecutor3. 获取Mapper4. 通过Mapper接口调用CRUD方法…...

c++:mt19937生成随机数

随机生成&#xff1a; int rd(){mt19937 rd1(time(NULL));return rd1(); }指定随机数的生成范围&#xff1a; int rd(){mt19937 rd1(time(NULL));uniform_int_distribution<int>t(0,100000);//指定范围return t(rd1); }...

微服务 分布式配置中心Apollo

微服务 分布式配置中心Apollo概览什么是配置什么是配置中心Apollo简介Apollo入门案例Apollo应用Apollo应用于分布式系统概览 什么是配置 先考虑几个问题 什么是配置&#xff0c;为什么需要配置&#xff0c;配置有哪些特点&#xff1f; 揭晓答案 配置就是应用程序在启动和运行…...

js中find和findIndex的使用

ES6为Array增加了find()&#xff0c;findIndex函数。 find()函数用来查找目标元素&#xff0c;找到就返回该元素&#xff0c;找不到返回undefined。 findIndex()函数也是查找目标元素&#xff0c;找到就返回元素的位置&#xff0c;找不到就返回-1。 他们的都是一个查找回调函…...

配置多环境变量

配置多环境变量 package.json 里的 scripts 配置 serve test build&#xff0c;通过 --mode xxx 来执行不同环境 通过 npm run serve 启动本地 , 执行 development通过 npm run test 打包测试 , 执行 testing通过 npm run build 打包正式 , 执行 production "scripts&q…...

多环境变量配置

多环境变量配置 package.json 里的 scripts 配置 serve test build&#xff0c;通过 –mode xxx 来执行不同环境 通过 npm run serve 启动本地 , 执行 development 通过 npm run test 打包测试 , 执行 testing 通过 npm run build 打包正式 , 执行 production 在package.…...

投资理财1

1. 投资术语 熔断&#xff1a;也叫自动停盘机制&#xff0c;是指当股指波幅达到规定的熔断点时&#xff0c;交易所为控制风险采取的暂停交易措施。具体说是对某一合约在达到涨跌停板之前&#xff0c;设置一个熔断价格&#xff0c;使合约买卖报价在一段时间内只能在这一价格范围…...

【项目】springboot中使用kaptcha生成验证码,登录时密码加盐处理

记录使用kaptcha的过程 为前后端分离项目&#xff0c;前端vue框架 0.下载jar包 在maven的网站https://mvnrepository.com/search?qcom.github.penggle 搜索下载jar 导入到工程中 1.添加依赖 <dependency><groupId>com.github.penggle</groupId><art…...

Unity行为树插件Behavior Tree Designer记录.Decorator装饰2

ReturnFailure The return failure task will always return failure except when the child task is running. 子Task运行期间将一直返回失败。主要重载了Decorate函数。在父类中的意义是申请改变子Task的状态。从代码上看也是这样&#xff0c;子Task的状态是成功&#xff0c…...

Mybatis源码研究之DatabaseIdProvider

借助Mybatis提供的 databaseId特性&#xff0c;我们可以实现让应用同时支持多种类型的数据库。 0. 目录这里写目录标题1. 测试用例2. 原理解析3. databaseId的其它应用4. Links1. 测试用例 相关的配置和测试用例如下 &#xff08;这里我们以源生的mybatis为例&#xff0c;与Sp…...

OA系统十四:注销功能;

注销&#xff1a;就是把登录时所保留的信息全部给清除掉&#xff1b;其本质就是清除保存在Session中的数据&#xff0c;让session回到初始的状态&#xff1b; 至于为什么只需要手动清除session对象中的数据&#xff0c;而request对象中的数据不用手动清除&#xff0c;这是因为r…...

并发编程之CountDownLatchSemaphoreCyclicBarrierExecutors

一、Semaphore Semaphore 定义 Semaphore 字面意思是信号量的意思&#xff0c;它的作用是控制访问特定资源的线程数目&#xff0c;底层依赖AQS的状态State&#xff0c;是在生产当中比较常用的一个工具类。 Semaphore常用方法 构造方法 public Semaphore(int permits) publ…...

vmmap分析内存泄露问题

vmmap是sysinternals工具集中的一个工具&#xff0c;主要用于分析一个进程的虚拟内存和物理内存的使用情况。更有效的是&#xff0c;可以通过对比两个不同时间的内存使用情况的Snapshot&#xff0c;来查找内存泄露问题。 vmmap介绍 当你用vmmap去查看一个正在运行的进程的时候…...

学生成绩管理系统+打包

文章目录文件管理&#xff1a;D:\hyt\python\pytorch_graduate\file_management成绩管理&#xff1a;D:\hyt\python\pytorch_graduate\stusystem打包&#xff1a;D:\hyt\python\pytorch_graduate\package_test学生成绩管理系统0.基础原理1.文件管理2 学生管理系统Tk打包1.基础原…...

Yocto Build with Bitbake的调试

https://docs.yoctoproject.org/dev-manual/common-tasks.html#recipe-logging-mechanisms 官方文档里有输出调试信息的方法。包含两种&#xff0c;一种是调用python的&#xff0c;一种是bash的。 建议直接使用warning方法&#xff0c;保证输出级别足够。 另外&#xff0c;在…...

Ways to Encrypt Password on Server

Background: the history of store password in server, starts with plain text, to MD5, SHA-1, SHA-2, to add salt/pepper/multihashing, to bcrypt/Argon2id etc. Best way so far to encrypt password on server : use bcrypt(unless have specific reasons not to do...

Linux部署PHP扩展kafuka

1、安装librdkafka cd /usr/local/src/ git clone https://github.com/edenhill/librdkafka.git cd librdkafka ./configure make make install ln -s /usr/local/lib/librdkafka.so.1 /usr/lib/2、安装php-rdkafka cd /usr/local/src/ git clone https://github.com/arnaud-…...

自然语言处理NLP之文本摘要、机器翻译、OCR、信息检索、信息抽取、校对纠错

自然语言处理NLP之文本摘要、机器翻译、OCR、信息检索、信息抽取、校对纠错 目录...

Kafka监控与调优-文末思维导图

监控 主流监控方式 JMXTrans InfluxDB Grafana 主机监控 机器负载&#xff1a;当前CPU工作量的度量&#xff0c;被定义为特定时间间隔内运行队列中的平均线程数&#xff0c;理论上接近0.7*cpu核数比较 CPU使用率 (1 - 空闲态运行时间/总运行时间) * 100%&#xff0c;建议…...

孤独一箭语录摘选

前言&#xff1a; 其实最近2个月一直在使用“乔帮主”的低吸大法&#xff0c;效果非常好&#xff0c;从他的 鱼和鸟类的比喻中&#xff0c;我意识到其中的奥秘&#xff0c;自己在什么时候是鱼类&#xff1b; 然后去第N次拜读了他的启蒙老师&#xff0c;“孤独一箭”的一些东西…...

认识python

认识python 一、什么是python Python是一种面向对象的解释型计算机程序设计语言,由 吉多范罗苏姆 开发&#xff0c;第一个公开发行版版发布于 1991 年。它常被昵称为胶水语言&#xff0c;能够把其他语言制作的各种模块&#xff08;尤其是C/C&#xff09;很轻松地联结在一起。…...

Servlet中request与response,解决中文乱码response.setContentType()

request&#xff1a;接受页面信息 解决post提交方式的乱码&#xff1a; request.setCharacterEncoding(“UTF-8”); 解决get提交的方式的乱码&#xff1a; parameter newString(parameter.getbytes(“iso8859-1”),“utf-8”); response:返回页面信息 发送端服务器与接收端…...

配置多环境变量

配置多环境变量 package.json 里的 scripts 配置 serve test build&#xff0c;通过 --mode xxx 来执行不同环境 通过 npm run serve 启动本地 , 执行 development通过 npm run test 打包测试 , 执行 testing通过 npm run build 打包正式 , 执行 production "scripts&q…...

SPL 性能优化

1. 性能优化案例 我们怎样把 W 银行预计算固定条件查询优化成实时灵活条件查询 我们怎样把 C 保险公司团保明细单查询提速 2000 倍 我们怎样把 B 银行自助分析从 5 并发提升到 100 并发 我们怎样把 C 银行资金头寸报表提速 20 倍 我们怎样把 S 银行手机账户查询从预先关联…...

2021-06-02(更新时间)2021年6月2日 商城高并发秒杀系统(.NET Core版) 21-性能优化-秒杀项目docker部署

秒杀项目docker部署 前提准备 docker网络 ​ 网络命令&#xff1a;docker network create -d bridge --gateway 172.18.0.1 --subnet 172.18.0.0/16 seckillservice ​ -d bridge 为网络模式 类似于NAT模式&#xff0c;类似于局域网 ​ --gateway 172.18.0.1 为局域网的网…...

打怪升级之小白的大数据之旅(六十五)<Hive旅程第六站:Hive的查询>

打怪升级之小白的大数据之旅(六十五) Hive旅程第六站:Hive的查询 上次回顾 经过前面的学习&#xff0c;我们已经可以初步使用Hive对数据的一些简单操作了&#xff0c;本章节是Hive的一个重点内容–查询 查询 HQL和我们前面学习的Mysql语法是一样的&#xff0c;只是在一些特…...

谷歌收购摩托罗拉移动

明眼人都看得出来&#xff0c;谷歌这是要借助摩托罗拉在手机上的大量专利来震慑某一些竞争对手&#xff0c;警告其不要轻举妄动。起到保护尚在成长当中的android系统的目的&#xff0c;谷歌做出这样的举动并不令人吃惊&#xff0c;吃惊的是摩托罗拉做出这样的决策&#xff0c;摩…...

历数谷歌16大收购:125亿美元收购摩托罗拉移动

8月16日消息&#xff0c;谷歌昨天宣布以125亿美元收购摩托罗拉移动&#xff0c;该收购也是谷歌公司史上规模最大的一笔收购&#xff0c;收购金额为收购DoubleClick时的四倍多。 在过去的十年里&#xff0c;在并购方面&#xff0c;谷歌在科技界中是最为活跃、最为成功的公司之一…...

【历史上的今天】8 月 15 日:苹果推出初代 iMac;谷歌收购摩托罗拉移动;Fuchsia 首次发布

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2022 年 8 月 15 日&#xff0c;在 1878 年的今天&#xff0c;我国第一套邮票发行。中国是一个文明古国&#xff0c;在邮政通信方面&#xff0c;有着悠久的历史。早在三…...

google收购摩托罗拉是摩托罗拉的噩梦的开始

看到了moto被裁员&#xff0c;程序员是重灾区。被收购不但没有给员工带来福利&#xff0c;反而是噩梦的开始。 这个事件告诉我们&#xff0c;不要准备在一个公司准备干一辈子&#xff0c;下一个被裁员的就是你。 摩托罗拉移动的裁员事件步入尾声&#xff0c;中国区不少员工都开…...

vscode一键生成佛祖保佑永无bug

工欲善其事&#xff0c;必先利其器 今天给大家分享一个vscode注释插件-koroFileHeader&#xff0c;可以快速给我们的文件和函数添加注释&#xff0c;快来看看吧 安装 打开vscode拓展&#xff0c;搜索“koroFileHeader”&#xff0c;安装&#xff0c;重新启动一下 使用 快捷键 生…...

Python绘制美国队长之盾

美国队长之盾的外表涂装与美国国旗相似&#xff0c;由红色&#xff08;象征勇气&#xff09;、白色&#xff08;象征真理&#xff09;和蓝色&#xff08;象征正义&#xff09;组成&#xff0c;中间有着一个白色五角星。 话不多说&#xff0c;直接上代码&#xff01; # -*- cod…...

Python绘制中国五星红旗及美国星条旗源代码

本文含中国五星红旗、美国星条旗、日本国旗、瑞士国旗 五星红旗 运行效果&#xff1a; 五星红旗是中华人民共和国的国旗&#xff0c;它是由四颗小的黄五角星环绕一颗大的黄五角星组成的&#xff0c;底色为红色&#xff0c;实现代码如下&#xff1a; import turtle#导入pytho…...

Python使用Turtle画帕劳共和国国旗

帕劳共和国国旗 帕劳共和国&#xff08;The Republic of Palau&#xff09;&#xff0c;简称帕劳&#xff08;中国台湾将其译名为&#xff1a;帛琉&#xff09;&#xff0c;位于西太平洋&#xff0c;是太平洋进入东南亚的门户之一&#xff0c;首都梅莱凯奥克。 帕劳国旗呈长方形…...

html5画智利国旗,智利国旗与得州州旗,你能分的清么?

智利国旗也称为“拉斯特里拉索里塔利亚&#xff0c;类似于得克萨斯州的州旗&#xff0c;也被称为孤星旗。这两面旗帜有一颗五角星&#xff0c;颜色相同(红、白、蓝).孤星旗有一个蓝色的区域&#xff0c;覆盖国旗的左边三分之一&#xff0c;中间是唯一的星星&#xff0c;而智利国…...

python画美国国旗,小白画法

import turtle as t t.speed(9) #设置速度 long741 #国旗长 按照美国国旗比例设置长宽 wide390 #国旗宽 wide1wide/13 #每格宽度 t.setup(long,wide) #按照国旗比例设置19:10的画布 t.up() t.goto(-long/2,wide/2) …...

I do. 【附:C++用不多于一条推博字符数的代码能作出怎样的图像?】

以上为原创主贴 以下为转帖及少量翻译。 很多C程序员在进行的一场比赛&#xff1a; 用不多于一条微博的字符数的代码能作出怎样的数学图像&#xff1f; http://codegolf.stackexchange.com/questions/35569/tweetable-mathematical-art 比赛用的基础代码及其来源&#x…...

又是奥运年,了解下国旗

今年又是奥运年,却是第一次对人们手中挥舞的,场馆里升起的那些国旗产生了兴趣.各国的国旗都是同等大小吗?各自的比例又如何?在不同的场合,国旗有哪些挂法?那些制作国旗的商家出售什么规格的旗帜?还有那些和国旗有关的旗帜,像军旗那什么的,和国旗有什么关系?哇,想想发现一面…...

HTML5 Canvas 绘制星条旗

代码&#xff1a; <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>美国国旗</title></head><body onload"draw()&qu…...

美国队长的工资 python代码-用Python绘制美国队长盾牌

结合中学的三角函数知识&#xff0c;采用Python函数方法&#xff0c;用turtle来实现美国队长盾牌的绘制。让我们开始学习吧&#xff01; 阶段难度&#xff1a;???image.png 美国队长之盾的外表涂装与美国国旗相似&#xff0c;由红色&#xff08;象征勇气&#xff09;、白色&…...

Vue 实现全球国家国旗的使用,附全球国家的JSON数据

有时在前端展示中需要用到全球国家的国旗图标&#xff0c;我们可以用到flag-icon-css这个插件。 1.安装flag-icon-css npm install flag-icon-css2.在main.js中全局引用 import flag-icon-css/css/flag-icons.css3.在界面中使用 <!-- 中国 --> <span class"…...

美国各州简介二

美国&#xff08;United States&#xff09;是一个由五十个州、一个联邦直辖特区和5个岛屿自由邦和十多个其它远洋小岛组成的宪政联邦共和制国家。1776年7月4日发表独立宣言从英国独立的美国仅有大西洋东部十三个州&#xff0c;1803年~1959年间&#xff0c;从最初开始的十三个州…...

世界国旗/地图:世界各国国旗图标整理/与echarts世界地图配置对应

需求描述 将接口返回的中文国家名称做两种展示&#xff1a;①在echarts世界地图中高亮显示对应的国家区域&#xff1b;②在一个列表中显示带有国旗图标的国家名称&#xff0c;预期效果如下图所示&#xff1a; 实现思路 带有国旗图标的列表实现思路较简单&#xff0c;通过网…...

[C语言]在屏幕上输出 * 旗图案

[C语言] " * "旗 在屏幕上输出以下图案&#xff1a; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 这个和九九乘法口诀表的原…...

国旗的Vue组件

vue-country-flag (vue-country-flag) Country flags as a Vue Component. 国家标记作为Vue组件。 Vue.js v2.x compatible. 兼容Vue.jsv2.x。 如何安装 (How to install) Get the package from NPM: 从NPM获取软件包&#xff1a; npm install vue-country-flag 如何使用 (H…...

HTML5 Canvas 绘制新西兰国旗

代码&#xff1a; <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>新西兰国旗</title></head><body onload"draw()&…...