热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java注解和python注解_Java的枚举与注解PythonJsGo的个人空间OSCHINA中文开源技术交流社区...

一、枚举类JDK1.5之前需要自定义枚举类;JDK1.5新增的enum关键字用于定义枚举类。若枚举只有一个成员,则可以作为一种单例模式的实现方式1.1枚举类的属性枚举

一、枚举类

JDK1.5之前需要自定义枚举类;JDK 1.5 新增的 enum 关键字用于定义枚举类。若枚举只有一个成员, 则可以作为一种单例模式的实现方式

1.1 枚举类的属性

枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰。

枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。

若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数。

1.2 Enum枚举类

必须在枚举类的第一行声明枚举类对象。 JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举类作为限定。

枚举类和普通类的区别:

使用 enum 定义的枚举类默认继承了 java.lang.Enum 类

枚举类的构造器只能使用 private 访问控制符

枚举类的所有实例必须在枚举类中显式列出(, 分隔    ; 结尾). 列出的实例系统会自动添加 public static final 修饰

1.3 使用 Enum 定义的示例

package org.springframework.http;

import org.springframework.lang.Nullable;

/**

* Enumeration of HTTP status codes.

*

*

The HTTP status code series can be retrieved via {@link #series()}.

*

* @author Arjen Poutsma

* @author Sebastien Deleuze

* @author Brian Clozel

* @since 3.0

* @see HttpStatus.Series

* @see HTTP Status Code Registry

* @see List of HTTP status codes - Wikipedia

*/

public enum HttpStatus {

// 1xx Informational

/**

* {@code 100 Continue}.

* @see HTTP/1.1: Semantics and Content, section 6.2.1

*/

CONTINUE(100, "Continue"),

/**

* {@code 101 Switching Protocols}.

* @see HTTP/1.1: Semantics and Content, section 6.2.2

*/

SWITCHING_PROTOCOLS(101, "Switching Protocols"),

/**

* {@code 102 Processing}.

* @see WebDAV

*/

PROCESSING(102, "Processing"),

/**

* {@code 103 Checkpoint}.

* @see A proposal for supporting

* resumable POST/PUT HTTP requests in HTTP/1.0

*/

CHECKPOINT(103, "Checkpoint"),

// 2xx Success

/**

* {@code 200 OK}.

* @see HTTP/1.1: Semantics and Content, section 6.3.1

*/

OK(200, "OK"),

/**

* {@code 201 Created}.

* @see HTTP/1.1: Semantics and Content, section 6.3.2

*/

CREATED(201, "Created"),

/**

* {@code 202 Accepted}.

* @see HTTP/1.1: Semantics and Content, section 6.3.3

*/

ACCEPTED(202, "Accepted"),

/**

* {@code 203 Non-Authoritative Information}.

* @see HTTP/1.1: Semantics and Content, section 6.3.4

*/

NON_AUTHORITATIVE_INFORMATION(203, "Non-Authoritative Information"),

/**

* {@code 204 No Content}.

* @see HTTP/1.1: Semantics and Content, section 6.3.5

*/

NO_CONTENT(204, "No Content"),

/**

* {@code 205 Reset Content}.

* @see HTTP/1.1: Semantics and Content, section 6.3.6

*/

RESET_CONTENT(205, "Reset Content"),

/**

* {@code 206 Partial Content}.

* @see HTTP/1.1: Range Requests, section 4.1

*/

PARTIAL_CONTENT(206, "Partial Content"),

/**

* {@code 207 Multi-Status}.

* @see WebDAV

*/

MULTI_STATUS(207, "Multi-Status"),

/**

* {@code 208 Already Reported}.

* @see WebDAV Binding Extensions

*/

ALREADY_REPORTED(208, "Already Reported"),

/**

* {@code 226 IM Used}.

* @see Delta encoding in HTTP

*/

IM_USED(226, "IM Used"),

// 3xx Redirection

/**

* {@code 300 Multiple Choices}.

* @see HTTP/1.1: Semantics and Content, section 6.4.1

*/

MULTIPLE_CHOICES(300, "Multiple Choices"),

/**

* {@code 301 Moved Permanently}.

* @see HTTP/1.1: Semantics and Content, section 6.4.2

*/

MOVED_PERMANENTLY(301, "Moved Permanently"),

/**

* {@code 302 Found}.

* @see HTTP/1.1: Semantics and Content, section 6.4.3

*/

FOUND(302, "Found"),

/**

* {@code 302 Moved Temporarily}.

* @see HTTP/1.0, section 9.3

* @deprecated in favor of {@link #FOUND} which will be returned from {@code HttpStatus.valueOf(302)}

*/

@Deprecated

MOVED_TEMPORARILY(302, "Moved Temporarily"),

/**

* {@code 303 See Other}.

* @see HTTP/1.1: Semantics and Content, section 6.4.4

*/

SEE_OTHER(303, "See Other"),

/**

* {@code 304 Not Modified}.

* @see HTTP/1.1: Conditional Requests, section 4.1

*/

NOT_MODIFIED(304, "Not Modified"),

/**

* {@code 305 Use Proxy}.

* @see HTTP/1.1: Semantics and Content, section 6.4.5

* @deprecated due to security concerns regarding in-band configuration of a proxy

*/

@Deprecated

USE_PROXY(305, "Use Proxy"),

/**

* {@code 307 Temporary Redirect}.

* @see HTTP/1.1: Semantics and Content, section 6.4.7

*/

TEMPORARY_REDIRECT(307, "Temporary Redirect"),

/**

* {@code 308 Permanent Redirect}.

* @see RFC 7238

*/

PERMANENT_REDIRECT(308, "Permanent Redirect"),

// --- 4xx Client Error ---

/**

* {@code 400 Bad Request}.

* @see HTTP/1.1: Semantics and Content, section 6.5.1

*/

BAD_REQUEST(400, "Bad Request"),

/**

* {@code 401 Unauthorized}.

* @see HTTP/1.1: Authentication, section 3.1

*/

UNAUTHORIZED(401, "Unauthorized"),

/**

* {@code 402 Payment Required}.

* @see HTTP/1.1: Semantics and Content, section 6.5.2

*/

PAYMENT_REQUIRED(402, "Payment Required"),

/**

* {@code 403 Forbidden}.

* @see HTTP/1.1: Semantics and Content, section 6.5.3

*/

FORBIDDEN(403, "Forbidden"),

/**

* {@code 404 Not Found}.

* @see HTTP/1.1: Semantics and Content, section 6.5.4

*/

NOT_FOUND(404, "Not Found"),

/**

* {@code 405 Method Not Allowed}.

* @see HTTP/1.1: Semantics and Content, section 6.5.5

*/

METHOD_NOT_ALLOWED(405, "Method Not Allowed"),

/**

* {@code 406 Not Acceptable}.

* @see HTTP/1.1: Semantics and Content, section 6.5.6

*/

NOT_ACCEPTABLE(406, "Not Acceptable"),

/**

* {@code 407 Proxy Authentication Required}.

* @see HTTP/1.1: Authentication, section 3.2

*/

PROXY_AUTHENTICATION_REQUIRED(407, "Proxy Authentication Required"),

/**

* {@code 408 Request Timeout}.

* @see HTTP/1.1: Semantics and Content, section 6.5.7

*/

REQUEST_TIMEOUT(408, "Request Timeout"),

/**

* {@code 409 Conflict}.

* @see HTTP/1.1: Semantics and Content, section 6.5.8

*/

CONFLICT(409, "Conflict"),

/**

* {@code 410 Gone}.

* @see

* HTTP/1.1: Semantics and Content, section 6.5.9

*/

GONE(410, "Gone"),

/**

* {@code 411 Length Required}.

* @see

* HTTP/1.1: Semantics and Content, section 6.5.10

*/

LENGTH_REQUIRED(411, "Length Required"),

/**

* {@code 412 Precondition failed}.

* @see

* HTTP/1.1: Conditional Requests, section 4.2

*/

PRECONDITION_FAILED(412, "Precondition Failed"),

/**

* {@code 413 Payload Too Large}.

* @since 4.1

* @see

* HTTP/1.1: Semantics and Content, section 6.5.11

*/

PAYLOAD_TOO_LARGE(413, "Payload Too Large"),

/**

* {@code 413 Request Entity Too Large}.

* @see HTTP/1.1, section 10.4.14

* @deprecated in favor of {@link #PAYLOAD_TOO_LARGE} which will be

* returned from {@code HttpStatus.valueOf(413)}

*/

@Deprecated

REQUEST_ENTITY_TOO_LARGE(413, "Request Entity Too Large"),

/**

* {@code 414 URI Too Long}.

* @since 4.1

* @see

* HTTP/1.1: Semantics and Content, section 6.5.12

*/

URI_TOO_LONG(414, "URI Too Long"),

/**

* {@code 414 Request-URI Too Long}.

* @see HTTP/1.1, section 10.4.15

* @deprecated in favor of {@link #URI_TOO_LONG} which will be returned from {@code HttpStatus.valueOf(414)}

*/

@Deprecated

REQUEST_URI_TOO_LONG(414, "Request-URI Too Long"),

/**

* {@code 415 Unsupported Media Type}.

* @see

* HTTP/1.1: Semantics and Content, section 6.5.13

*/

UNSUPPORTED_MEDIA_TYPE(415, "Unsupported Media Type"),

/**

* {@code 416 Requested Range Not Satisfiable}.

* @see HTTP/1.1: Range Requests, section 4.4

*/

REQUESTED_RANGE_NOT_SATISFIABLE(416, "Requested range not satisfiable"),

/**

* {@code 417 Expectation Failed}.

* @see

* HTTP/1.1: Semantics and Content, section 6.5.14

*/

EXPECTATION_FAILED(417, "Expectation Failed"),

/**

* {@code 418 I'm a teapot}.

* @see HTCPCP/1.0

*/

I_AM_A_TEAPOT(418, "I'm a teapot"),

/**

* @deprecated See

*

* WebDAV Draft Changes

*/

@Deprecated

INSUFFICIENT_SPACE_ON_RESOURCE(419, "Insufficient Space On Resource"),

/**

* @deprecated See

*

* WebDAV Draft Changes

*/

@Deprecated

METHOD_FAILURE(420, "Method Failure"),

/**

* @deprecated

* See

* WebDAV Draft Changes

*/

@Deprecated

DESTINATION_LOCKED(421, "Destination Locked"),

/**

* {@code 422 Unprocessable Entity}.

* @see WebDAV

*/

UNPROCESSABLE_ENTITY(422, "Unprocessable Entity"),

/**

* {@code 423 Locked}.

* @see WebDAV

*/

LOCKED(423, "Locked"),

/**

* {@code 424 Failed Dependency}.

* @see WebDAV

*/

FAILED_DEPENDENCY(424, "Failed Dependency"),

/**

* {@code 425 Too Early}.

* @since 5.2

* @see RFC 8470

*/

TOO_EARLY(425, "Too Early"),

/**

* {@code 426 Upgrade Required}.

* @see Upgrading to TLS Within HTTP/1.1

*/

UPGRADE_REQUIRED(426, "Upgrade Required"),

/**

* {@code 428 Precondition Required}.

* @see Additional HTTP Status Codes

*/

PRECONDITION_REQUIRED(428, "Precondition Required"),

/**

* {@code 429 Too Many Requests}.

* @see Additional HTTP Status Codes

*/

TOO_MANY_REQUESTS(429, "Too Many Requests"),

/**

* {@code 431 Request Header Fields Too Large}.

* @see Additional HTTP Status Codes

*/

REQUEST_HEADER_FIELDS_TOO_LARGE(431, "Request Header Fields Too Large"),

/**

* {@code 451 Unavailable For Legal Reasons}.

* @see

* An HTTP Status Code to Report Legal Obstacles

* @since 4.3

*/

UNAVAILABLE_FOR_LEGAL_REASONS(451, "Unavailable For Legal Reasons"),

// --- 5xx Server Error ---

/**

* {@code 500 Internal Server Error}.

* @see HTTP/1.1: Semantics and Content, section 6.6.1

*/

INTERNAL_SERVER_ERROR(500, "Internal Server Error"),

/**

* {@code 501 Not Implemented}.

* @see HTTP/1.1: Semantics and Content, section 6.6.2

*/

NOT_IMPLEMENTED(501, "Not Implemented"),

/**

* {@code 502 Bad Gateway}.

* @see HTTP/1.1: Semantics and Content, section 6.6.3

*/

BAD_GATEWAY(502, "Bad Gateway"),

/**

* {@code 503 Service Unavailable}.

* @see HTTP/1.1: Semantics and Content, section 6.6.4

*/

SERVICE_UNAVAILABLE(503, "Service Unavailable"),

/**

* {@code 504 Gateway Timeout}.

* @see HTTP/1.1: Semantics and Content, section 6.6.5

*/

GATEWAY_TIMEOUT(504, "Gateway Timeout"),

/**

* {@code 505 HTTP Version Not Supported}.

* @see HTTP/1.1: Semantics and Content, section 6.6.6

*/

HTTP_VERSION_NOT_SUPPORTED(505, "HTTP Version not supported"),

/**

* {@code 506 Variant Also Negotiates}

* @see Transparent Content Negotiation

*/

VARIANT_ALSO_NEGOTIATES(506, "Variant Also Negotiates"),

/**

* {@code 507 Insufficient Storage}

* @see WebDAV

*/

INSUFFICIENT_STORAGE(507, "Insufficient Storage"),

/**

* {@code 508 Loop Detected}

* @see WebDAV Binding Extensions

*/

LOOP_DETECTED(508, "Loop Detected"),

/**

* {@code 509 Bandwidth Limit Exceeded}

*/

BANDWIDTH_LIMIT_EXCEEDED(509, "Bandwidth Limit Exceeded"),

/**

* {@code 510 Not Extended}

* @see HTTP Extension Framework

*/

NOT_EXTENDED(510, "Not Extended"),

/**

* {@code 511 Network Authentication Required}.

* @see Additional HTTP Status Codes

*/

NETWORK_AUTHENTICATION_REQUIRED(511, "Network Authentication Required");

private final int value;

private final String reasonPhrase;

HttpStatus(int value, String reasonPhrase) {

this.value = value;

this.reasonPhrase = reasonPhrase;

}

/**

* Return the integer value of this status code.

*/

public int value() {

return this.value;

}

/**

* Return the reason phrase of this status code.

*/

public String getReasonPhrase() {

return this.reasonPhrase;

}

/**

* Return the HTTP status series of this status code.

* @see HttpStatus.Series

*/

public Series series() {

return Series.valueOf(this);

}

/**

* Whether this status code is in the HTTP series

* {@link org.springframework.http.HttpStatus.Series#INFORMATIONAL}.

* This is a shortcut for checking the value of {@link #series()}.

* @since 4.0

* @see #series()

*/

public boolean is1xxInformational() {

return (series() == Series.INFORMATIONAL);

}

/**

* Whether this status code is in the HTTP series

* {@link org.springframework.http.HttpStatus.Series#SUCCESSFUL}.

* This is a shortcut for checking the value of {@link #series()}.

* @since 4.0

* @see #series()

*/

public boolean is2xxSuccessful() {

return (series() == Series.SUCCESSFUL);

}

/**

* Whether this status code is in the HTTP series

* {@link org.springframework.http.HttpStatus.Series#REDIRECTION}.

* This is a shortcut for checking the value of {@link #series()}.

* @since 4.0

* @see #series()

*/

public boolean is3xxRedirection() {

return (series() == Series.REDIRECTION);

}

/**

* Whether this status code is in the HTTP series

* {@link org.springframework.http.HttpStatus.Series#CLIENT_ERROR}.

* This is a shortcut for checking the value of {@link #series()}.

* @since 4.0

* @see #series()

*/

public boolean is4xxClientError() {

return (series() == Series.CLIENT_ERROR);

}

/**

* Whether this status code is in the HTTP series

* {@link org.springframework.http.HttpStatus.Series#SERVER_ERROR}.

* This is a shortcut for checking the value of {@link #series()}.

* @since 4.0

* @see #series()

*/

public boolean is5xxServerError() {

return (series() == Series.SERVER_ERROR);

}

/**

* Whether this status code is in the HTTP series

* {@link org.springframework.http.HttpStatus.Series#CLIENT_ERROR} or

* {@link org.springframework.http.HttpStatus.Series#SERVER_ERROR}.

* This is a shortcut for checking the value of {@link #series()}.

* @since 5.0

* @see #is4xxClientError()

* @see #is5xxServerError()

*/

public boolean isError() {

return (is4xxClientError() || is5xxServerError());

}

/**

* Return a string representation of this status code.

*/

@Override

public String toString() {

return this.value + " " + name();

}

/**

* Return the enum constant of this type with the specified numeric value.

* @param statusCode the numeric value of the enum to be returned

* @return the enum constant with the specified numeric value

* @throws IllegalArgumentException if this enum has no constant for the specified numeric value

*/

public static HttpStatus valueOf(int statusCode) {

HttpStatus status = resolve(statusCode);

if (status == null) {

throw new IllegalArgumentException("No matching constant for [" + statusCode + "]");

}

return status;

}

/**

* Resolve the given status code to an {@code HttpStatus}, if possible.

* @param statusCode the HTTP status code (potentially non-standard)

* @return the corresponding {@code HttpStatus}, or {@code null} if not found

* @since 5.0

*/

@Nullable

public static HttpStatus resolve(int statusCode) {

for (HttpStatus status : values()) {

if (status.value == statusCode) {

return status;

}

}

return null;

}

/**

* Enumeration of HTTP status series.

*

Retrievable via {@link HttpStatus#series()}.

*/

public enum Series {

INFORMATIONAL(1),

SUCCESSFUL(2),

REDIRECTION(3),

CLIENT_ERROR(4),

SERVER_ERROR(5);

private final int value;

Series(int value) {

this.value = value;

}

/**

* Return the integer value of this status series. Ranges from 1 to 5.

*/

public int value() {

return this.value;

}

/**

* Return the enum constant of this type with the corresponding series.

* @param status a standard HTTP status enum value

* @return the enum constant of this type with the corresponding series

* @throws IllegalArgumentException if this enum has no corresponding constant

*/

public static Series valueOf(HttpStatus status) {

return valueOf(status.value);

}

/**

* Return the enum constant of this type with the corresponding series.

* @param statusCode the HTTP status code (potentially non-standard)

* @return the enum constant of this type with the corresponding series

* @throws IllegalArgumentException if this enum has no corresponding constant

*/

public static Series valueOf(int statusCode) {

Series series = resolve(statusCode);

if (series == null) {

throw new IllegalArgumentException("No matching constant for [" + statusCode + "]");

}

return series;

}

/**

* Resolve the given status code to an {@code HttpStatus.Series}, if possible.

* @param statusCode the HTTP status code (potentially non-standard)

* @return the corresponding {@code Series}, or {@code null} if not found

* @since 5.1.3

*/

@Nullable

public static Series resolve(int statusCode) {

int seriesCode = statusCode / 100;

for (Series series : values()) {

if (series.value == seriesCode) {

return series;

}

}

return null;

}

}

}

1.4 枚举类

枚举类的主要方法:

values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。

valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常。

1.5 枚举的方法

1.6 实现接口的枚举类

和普通 Java 类一样,枚举类可以实现一个或多个接口。若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法。

二、注解Annotation

从 JDK 5.0 开始, Java 增加了对元数据(MetaData) 的支持, 也就是 Annotation(注解)。Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理. 通过使用 Annotation, 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息。Annotation 可以像修饰符一样被使用, 可用于修饰包,类, 构造器, 方法, 成员变量, 参数, 局部变量的声明, 这些信息被保存在 Annotation 的 “name=value” 对中。Annotation 能被用来为程序元素(类, 方法, 成员变量等) 设置元数据。

2.1 基本的 Annotation

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

三个基本的 Annotation:

@Override: 限定重写父类方法, 该注释只能用于方法

@Deprecated: 用于表示某个程序元素(类, 方法等)已过时

@SuppressWarnings: 抑制编译器警告

2.2 自定义 Annotation

定义新的 Annotation 类型使用 @interface 关键字。

Annotation 的成员变量在 Annotation 定义中以无参数方法的形式来声明. 其方法名和返回值定义了该成员的名字和类型。

可以在定义 Annotation 的成员变量时为其指定初始值, 指定成员变量的初始值可使用 default 关键字

public @interface MyAnnotation{

String name() default "相逢何必曾相识";

}

没有成员定义的 Annotation 称为标记; 包含成员变量的 Annotation 称为元数据 Annotation。

2.3 提取 Annotation 信息

JDK 5.0 在 java.lang.reflect 包下新增了 AnnotatedElement 接口, 该接口代表程序中可以接受注解的程序元素。

当一个 Annotation 类型被定义为运行时 Annotation 后, 该注释才是运行时可见, 当 class 文件被载入时保存在 class 文件中的 Annotation 才会被虚拟机读取。

程序可以调用 AnnotationElement 对象的如下方法来访问 Annotation 信息。

2.4 JDK 的元 Annotation

JDK 的元 Annotation 用于修饰其他 Annotation 定义;JDK5.0提供了专门在注解上的注解类型,分别是:

Retention

Target

Documented

Inherited

@Retention: 只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留多长时间, @Rentention 包含一个 RetentionPolicy 类型的成员变量, 使用 @Rentention 时必须为该 value 成员变量指定值:

RetentionPolicy.SOURCE: 编译器直接丢弃这种策略的注释

RetentionPolicy.CLASS: 编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解。 这是默认值

RetentionPolicy.RUNTIME:编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注释. 程序可以通过反射获取该注释

@Target: 用于修饰 Annotation 定义, 用于指定被修饰的 Annotation 能用于修饰哪些程序元素. @Target 也包含一个名为 value 的成员变量.

@Documented: 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档.

定义为Documented的注解必须设置Retention值为RUNTIME。

@Inherited: 被它修饰的 Annotation 将具有继承性.如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解

--------------------------------------

版权声明:本文为【PythonJsGo】博主的原创文章,转载请附上原文出处链接及本声明。

本篇文章同步在个人公众号:



推荐阅读
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了Java中Hashtable的clear()方法,该方法用于清除和移除指定Hashtable中的所有键。通过示例程序演示了clear()方法的使用。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
author-avatar
小丸子派大星_127
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有