java 元数据 和 元注解
基本介绍
三种基本注解
@Override
@Deprecated
@SuppressWarnings
四种元注解
@Retention
@Target
@Documented
@@Inherited
一、基本介绍
1.概述
java注解(Annotation)[ˌ ænəˈ teɪʃn],又称java标注,也被称为元数据(关于数据的数据,描述数据的数据)(Metadata)[ˈ metədeɪtə],可用于修饰或者解释包、类、方法、属性、构造器,局部变量等数据信息。
java注解和注释一样,不会影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。在javaSE中,注解的功能比较单一,例如标记过时的功能,忽略警告等等。但注解在javaEE中占据了更重要的角色,尤其是在使用框架时,例如用来配置应用程序的任何切面,代替javaEE旧版中所残留的冗余代码和XML配置等等。
2.使用
使用Annotation时,要在它前面增加“@”符号,并把该注解当作一个修饰符来使用。以修饰它支持的程序元素。
二、3种基本注解
0.总览 :
@Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
@Deprecated - 标记某个程序元素(类或者方法等)已过时。如果使用该方法,会报编译警告。
@SuppressWarnings - 指示编译器去忽略注解中声明的警告。
1.“@Override”:
①含义
Override就是重写的意思,如下 :
②源码
@Override最大的价值在于它的判断功能。通过Ctrl + b/B 可以查看@Override源码,如下 :
/** Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*********************/package java.lang;import java.lang.annotation.*;/*** Indicates that a method declaration is intended to override a* method declaration in a supertype. If a method is annotated with* this annotation type compilers are required to generate an error* message unless at least one of the following conditions hold:** <ul><li>* The method does override or implement a method declared in a* supertype.* </li><li>* The method has a signature that is override-equivalent to that of* any public method declared in {@linkplain Object}.* </li></ul>** @author Peter von der Ahé* @author Joshua Bloch* @jls 8.4.8 Inheritance, Overriding, and Hiding* @jls 9.4.1 Inheritance and Overriding* @jls 9.6.4.4 @Override* @since 1.5*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
其实,@Override源码中,最重要的无非最后两行。“@interface”表示Override是一个注解类,而不是接口。
“@Override”只能修饰方法,不能修饰其他程序元素(比如类,包,属性等)。这一点,其实源码中也有体现——Override源码中的“@Target(ElementType.METHOD)”明确指出了修饰的元素类型是METHOD(方法)。
PS : “@Target”是用于修饰注解的注解,我们称之为“元注解”。
2.“@Deprecated”:
①含义
Deprecated就是不赞成的意思,如下 :
②源码
“@Deprecated”可以标记过时的程序元素。仍然通过Ctrl + b/B 快捷键追溯一下Deprecated的源码,如下 : (这次仅截取关键部分)
package java.lang;import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE})
public @interface Deprecated {String since() default "";boolean forRemoval() default false;
}
同样,“@interface”表示Deprecated是一个注解类。而“@Target”元注解中,也标注出了@Deprecated可以修饰的数据元素,从左往右依次为 : {构造器,属性,局部变量,方法,包,模块,参数,类型(即类)}。
③使用
“@Deprecated”修饰的程序元素并非无法使用,只是不建议使用。来举个栗子。
演示 :
package advanced.Annotation;/*** @author : Cyan_RA9* @version : 5.0*/
public class Deprecated_ {@Deprecatedpublic void f() {System.out.println("这方法没啥屁用,不建议使用。你非要用当我没说。。。");}
}class Test {public static void main(String[] args) {Deprecated_ deprecated_ = new Deprecated_();deprecated_.f();}
}
运行结果 :
其实,当你在调用@Deprecated注解修饰的方法时,IDEA就会给出提示,如下图所示 :
可以明显看到被“@Deprecated”注解修饰的f() 方法是被删除线“ ”标注的。
④补充
啥时候用“@Deprecated”比较多?
比如,当JDK进行版本更迭的时候,新版本的JDK对旧版本的某些类或者某些方法进行了更新,可能会定义新的类型,这时候就会在旧版本的对应类型或者对应方法前打上@Deprecated标注,提醒java人们这是旧的啦,建议你用新的捏。
3.“@SuppressWarnings” :
①含义
SuppressWarnings就是抑制警告,禁止警告的意思,如下 : (Warnings小学词汇)
②格式
“@SuppressWarnings”的使用与前面两个注解略有出入。使用格式如下 :
@SuppressWarnings("explanation1", "explanation2", "explanation3", ......)
//双引号中的说明信息不同,达到的抑制警告效果便不同。
③属性说明汇总
“@SuppressWarnings”中常见的属性说明有 :
"all" | 抑制所有警告 |
"boxing" | 抑制与“封装/拆装”相关的警告 |
"cast" | 抑制与"强转类型"相关的警告 |
"dep-ann" | 抑制与"淘汰注释"相关的警告 |
"deprecation" | 抑制与"淘汰"相关的警告 |
"fallthrough" | 抑制与"switch陈述式中遗漏break"相关的警告 |
"finally" | 抑制与"未传回finally区块"相关的警告 |
"hiding" | 抑制与"隐藏变数的区域变数"相关的警告 |
"incomplete-switch" | 抑制与"switch陈述式(enum case)中遗漏项目"相关的警告 |
"javadoc" | 抑制与"javadoc"相关的警告 |
"nls" | 抑制与"非nls字串文字"相关的警告 |
"resource" | 抑制与"使用Closeable类型的资源"相关的警告 |
"null" | 抑制与"空值分析"相关的警告 |
"rawtypes" | 抑制与"使用raw类型"相关的警告(泛型) |
"restriction" | 抑制与"使用不建议或禁止参照"相关的警告 |
"serial" | 抑制与"可序列化的类别遗漏serialVersionUID栏位"相关的警告 |
"static-access" | 抑制与"静态存取不正确"相关的警告 |
"static-method" | 抑制与"可能宣告为static的方法"相关的警告 |
"super" | 抑制与"置换方法相关但不含super呼叫"的警告 |
"synthetic-access" | 抑制与"内部类别的存取未最佳化"相关的警告 |
"sync-override" | 抑制"因置换同步方法而遗漏同步化"的警告 |
"unchecked" | 抑制与"未检查的作业"相关的警告 |
"unqualified-field-access" | 抑制与"栏位存取不合格"相关的警告 |
"unused" | 抑制与"未用的程式码和停用的程式码"相关的警告(变量未使用) |
部分属性演示 :
package advanced.Annotation;import java.util.ArrayList;
import java.util.List;/*** @author : Cyan_RA9* @version : 5.0*/@SuppressWarnings({})
public class SuppressWarnings_ {public static void main(String[] args) {List list = new ArrayList();list.add("");list.add(1);list.add(1);int i;System.out.println(list.get(2));}
}
警告信息如下图所示 :
这时候可以通过在注解“@SuppressWarnings”中分别添加"rawtypes", "unchecked", "unused"属性说明来去除警告信息。如下图所示 :
添加属性说明后,⚠全部消失了,如下图所示 :
⑤作用域
关于@SuppressWarnings注解的作用域 : 取决于该注解的定义位置。
eg : 当它放在main方法前时,抑制警告的范围就是main函数;当它定义在类上,作用域就是整个类;当然,也可以在固定的警告语句上面使用@SuppressWarnings注解,通过传入指定的属性说明实现精准的消除警告。
⑥源码
通过Ctrl + b/B快捷键快速追溯到SuppressWarnings注解类的源码,源码如下 : (仅截取关键部分)
package java.lang;import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {String[] value();
}
同样的。"@interface"元注解表明SuppressWarnings是一个注解类。而“@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE})”表明了@SuppressWarnings注解的使用范围,从左往后依次是”{类型(类),属性,方法,参数,构造器,局部变量,模块}“。
三、4种元注解
0.总览 :
在Java中,将“修饰注解的注解”称为元注解。元注解使用并不多,本身作用也没多大,了解即可。可以看懂源码就足够了。
@Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问(保存时间)。
@Documented - 标记这些注解是否包含在javadoc用户文档中。
@Target - 标记这个注解应该是哪种 Java 成员(可以作用于哪些程序元素)。
@Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)
1.“@Retention”:
①含义
Retention就是保持,保留的意思,如下图所示 :
②使用
“@Retention”只能用于修饰一个注解定义,用于指定该注解可以保留多长时间,@Retention元注解中包含一个RetentionPolicy类型的成员变量,使用@Retention元注解时,必须为该成员变量指定值。
RetentionPolicy成员变量的三种值 :
RetentionPolicy.SOURCE | 编译器使用后,直接丢弃这种策略的注解 |
RetentionPolicy.CLASS | 编译器将把注解记录在class文件中,当运行程序时,jvm不会保留注解,这是成员变量的默认值 |
RetentionPolicy.RUNTIME | 编译器将把注解记录在class文件中,当运行程序时,jvm会保留注解,程序可以通过反射获取该注解。 |
③示意图
三种成员变量值的效果如下 :
演示 :
以Override的源码为例,如下:(仅截取关键部分)
package java.lang;import java.lang.annotation.*;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
注意看,“@Retention(RetentionPolicy.SOURCE)”中,RetentionPolicy类枚举常量是SOURCE,这就表示“@Override”注解生效的范围仅仅在.java的源文件中,不会在.class文件中生效,也不会在程序运行时被jvm读取。
2."@Target" :
①含义
Target就是目标的意思,如下图所示 :
②使用
”@Target“元注解可以指明当前注解可以作用于哪些程序元素。之前的三大基本注解中,均演示过”@Target“元注解。如下 :
③源码
Target元注解源码如下:(仅截取了重要部分)
package java.lang.annotation;@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {ElementType[] value();
}
可以看到Target底层是一个ElementType类型的数组。而通过Ctrl + b/B追溯源码,我们可以看到ElementType本质上是一个枚举类。如下 :
package java.lang.annotation;public enum ElementType {/** Class, interface (including annotation interface), enum, or record* declaration */TYPE,/** Field declaration (includes enum constants) */FIELD,/** Method declaration */METHOD,/** Formal parameter declaration */PARAMETER,/** Constructor declaration */CONSTRUCTOR,/** Local variable declaration */LOCAL_VARIABLE,/** Annotation interface declaration (Formerly known as an annotation type.) */ANNOTATION_TYPE,/** Package declaration */PACKAGE,/*** Type parameter declaration** @since 1.8*/TYPE_PARAMETER,/*** Use of a type** @since 1.8*/TYPE_USE,/*** Module declaration.** @since 9*/MODULE,/*** Record component** @jls 8.10.3 Record Members* @jls 9.7.4 Where Annotations May Appear** @since 16*/RECORD_COMPONENT;
}
ElementType枚举类中的这些枚举常量,其实就是我们说的”程序元素“。即注解可作用于的程序成分。
3.”@Documented“ :
①含义
Documented就是登记在案,文件化的意思,如下图所示 :
②使用
“@Documented”元注解修饰的注解类,会在javadoc文件中显式地呈现。
演示 :
先定义一个注解类Demo,并在该注解类中使用@Documented元注解修饰。如下 :
package advanced.Annotation;import java.lang.annotation.*;/*** @author : Cyan_RA9* @version : 2.0*/
@Documented
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.METHOD)
public @interface Demo {//自定义一个注解类。
}
然后在定义一个测试类Test_EX,并在测试类中定义两个方法,用自定义的注解”@Demo“去修饰方法。如下 :
package advanced.Annotation.test;import advanced.Annotation.Demo;/*** @author : Cyan_RA9* @version : 1.0*/
class Test_EX {@Demopublic void greet() {System.out.println("Hello!");}@Demopublic void eat() {System.out.println("美汁儿美汁儿~");}
}
然后通过IDEA自带的生成javadoc的功能生成该测试类的javadoc文件,如下GIF图所示 :
可以看到,greet方法和eat方法的”@Demo“都保留在了生成的javadoc文件中。
4.”@Inherited“ :
①含义
Inherited就是继承的意思,如下所示 :
②使用
如果每个类使用了注解,而这种注解恰好被”@Inherited“元注解修饰,那么该类的子类同样会自动拥有父类的注解。
System.out.println("END-----------------------------------------------");
相关文章:
java 元数据 和 元注解
基本介绍三种基本注解OverrideDeprecatedSuppressWarnings四种元注解RetentionTargetDocumentedInherited一、基本介绍1.概述java注解(Annotation)[ˌ nəˈ teɪʃn],又称java标注,也被称为元数据(关于数据的数据&…...
RFID射频卡写入手机NFC心路小记
声明: 本文仅是作者学习探索的心里路程日记,如果您看完以后,从中获得了一些知识,作者不胜荣幸。科技是一把双刃剑,利用好了,可以方便生活,利用不当也肯能扰乱公共管理秩序,造成不必要…...
【C++】STL 模拟实现之 list
文章目录一、list 的常用接口及其使用1、list 一般接口2、list 特殊接口3、list 排序的性能分析二、list 迭代器的实现1、迭代器的分类2、list 迭代器失效问题3、list 迭代器源码分析4、list 迭代器模拟实现4.1 普通迭代器4.2 const 迭代器4.3 完整版迭代器三、list 的模拟实现…...
20230228----重返学习-数组-引用数据类型的转换-基础调试用方法-对象检测-各数据转布尔值及相等运算符-条件语句-循环语句
day-017-seventeen-20230228-数组-引用数据类型的转换-基础调试用方法-对象检测-各数据转布尔值及相等运算符-条件语句-循环语句 数组 字面量表示法 [数组成员0,数组成员1,数组成员2]用中括号语法来取值 var ary [5,6,7] console.log("ary[0]--->", ary[0])数组…...
apscheduler 定时任务框架
Apscheduler 介绍 四大组件 triggers:触发器,用于设定触发任务的条件job stores:作业存储器,用于存放任务,可以存放在数据库或内存,默认内存executors:执行器,用于执行任务&#x…...
Softing OPC Tunnel——绕过DCOM配置实现OPC Classic广域网通信
一 摘要 Softing OPC Tunnel是dataFEED OPC Suite的一个组件,可避免跨设备OPC Classic通信中出现的DCOM配置问题,同时可保证跨网络数据交换的高性能和可靠性。OPC Tunnel内部集成的存储转发功能,可在连接中断时缓存数据,并在重新…...
Java的运算操作
个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 文章目录算术运算符增量运算符注意自增自减运算符关系运算符逻辑运算符逻辑与&&逻辑或||逻辑非!…...
基于OBD系统的量产车评估测试(PVE)
在轻型汽车污染物排放限值及测量方法(中国第六阶段)中,除了对汽车尾气排放等制定了更为严格的限制之外,也在OBD系统认证项目中增加了新的要求——量产车评估(Production Vehicle Evaluation)测试。该测试由…...
【蓝桥杯集训10】Tire树 字典树 最大异或对专题(3 / 3)
目录 字典树模板 1、插入操作 2、查询操作 143. 最大异或对 - trie 二进制 3485. 最大异或和 - 前缀和Trie滑动窗口 字典树模板 活动 - AcWing 字典树:高效存储和查找字符串集合的数据结构 son[节点1地址][值]节点2地址 —— 节点1的子节点为节点2cnt[节点地…...
docker部署zabbix6.2.7+grafana
目录 1、下载docker 2、下载相关镜像文件 3、创建一个供zabbix系统使用的网络环境 4、创建一个供mysql数据库存放文件的目录 5、启动mysql容器 6、为zabbix-server创建一个持久卷 7、启动zabbix-server容器 8、创建语言存放目录 9、启动zabbix-web容器 10、启动zabbix…...
【Java开发】JUC基础 04:Synchronized、死锁、Lock锁
1 概念介绍并发:同一个对象被多个线程同时操作📌 线程同步现实生活中,我们会遇到“同一个资源,多个人都想使用”的问题,比如,食堂排队打饭,每个人都想吃饭,最天然的解决办法就是,排队…...
离散数学---期末复习知识点
一、 数理逻辑 [复习知识点] 1、命题与联结词(否定¬、析取∨、合取∧、蕴涵→、等价↔),命题(非真既假的陈述句),复合命题(由简单命题通过联结词联结而成的命题) 2、命题公式与赋值(成真、成假)&#x…...
在线安装ESP32和ESP8266 Arduino开发环境
esp32和esp8266都是乐鑫科技开发的单片机产品,esp8266价格便宜开发板只需要十多块钱就可以买到,而esp32是esp8266的升级版本,比esp8266的功能和性能更强大,开发板价格大约二十多元就可以买到。 使用Arduino开发esp32和esp8266需要…...
【Python实战】激情澎湃,2023极品劲爆舞曲震撼全场,爬虫一键采集DJ大串烧,一曲醉人女声DJ舞曲,人人都听醉~(排行榜采集,妙啊~)
导语 哈喽!大家好。我是木木子吖~今天给大家带来爬虫的内容哈。 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 今天教大家Python爬虫实战一键采集大家喜欢的DJ舞曲哦! …...
[SSD综述 1.5] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?
版权声明:付费作品,未经许可,不可转载前言SSD (Solid State Drive),即固态硬盘,通常是一种以半导体闪存(NAND Flash)作为介质的存储设备。SSD 以半导体作为介质存储数据&…...
SAP Insurance Analyzer
SAP Insurance Analyzer 是一款用于保险公司财务和风险管理的软件。SAP Insurance analyzer 支持基于 IFRS 17 或 Solvency II 的保险合同估值和计算要求。SAP Insurance Analyzer 于 2013 年 5 月推出,为源数据和结果数据集成了一个预配置的保险数据模型。 源数据…...
自动化测试 ——自动卸载软件
在平常的测试工作中,经常要安装软件,卸载软件, 即繁琐又累。 安装和卸载完全可以做成自动化。 安装软件我们可以通过自动化框架,自动点击Next,来自动安装。 卸载软件我们可以通过msiexec命令行工具自动化卸载软件 用msiexec 命令来卸载软件 …...
05 封装
在对 context 的封装中,我们只是将 request、response 结构直接放入 context 结构体中,对应的方法并没有很好的封装。 函数封装并不是一件很简单、很随意的事情。相反,如何封装出易用、可读性高的函数是非常需要精心考量的,框架中…...
clean
clean code 记得以前写过这题,写的乱七八糟,分析来分析去。 后悔应该早点写代码,leetcode大一就该刷了。 https://leetcode.cn/problems/plus-one/submissions/ class Solution { public:vector<int> plusOne(vector<int>&…...
佛科院计算机软件技术基础——线性表
一、基础知识了解:结构体的理解:我们知道整型是由1位符号位和15位数值位组成,而就可以把结构体理解为我们定义的数据类型,如:typedef struct {int data[2]; //存储顺序表中的元素int len; …...
linux下终端操作mysql数据库
目录 一.检查mysql是否安装 1. 查看文件安装路径 2. 查询运行文件所在路径(文件夹地址) 二.登录mysql 三.列出mysql全部用户 四.常用指令 1.查看全部数据库 2.选择数据库 …...
MySQL参数优化之thread_cache_size
1.thread_cache_size简介 每建立一个连接,都需要一个线程来与之匹配,此参数用来缓存空闲的线程,以至不被销毁,如果线程缓存中有空闲线程,这时候如果建立新连接,MYSQL就会很快的响应连接请求。 show statu…...
gRPC服务健康检查(二):gRPC健康检查协议详解
gRPC健康检查协议健康检查用于检测服务端能否正常处理rpc请求,客户端对服务端的健康检查可以点对点进行,也可以通过某些控制系统(如负载平衡)进行。客户端可以根据服务端返回的状态执行对应的策略。因为GRPC服务可以用于简单的客户…...
Android系统10 RK3399 init进程启动(四十七) Android init 进程整体代码逻辑简述
配套系列教学视频链接:安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言本文简单描述一下android init祖先进程启动的基本执行流程,让大家有一个整…...
CSDN 编程竞赛三十二期题解
竞赛总览 CSDN 编程竞赛三十二期:比赛详情 (csdn.net) 竞赛题解 题目1、传奇霸业 传奇霸业,是兄弟就来干。小春(HP为a)遇到了一只黄金哥布林(HP为x)。小春每次能对哥布林造成b点伤害,哥布林…...
Kubernetes 中的 Pod Hook
Pod Hook 我们知道Pod是Kubernetes集群中的最小单元,而 Pod 是有容器组组成的,所以在讨论 Pod 的生命周期的时候我们可以先来讨论下容器的生命周期。 实际上 Kubernetes 为我们的容器提供了生命周期钩子的,就是我们说的Pod Hook,…...
Linux操作系统安装MySQL(rpm安装)
Linux操作系统安装MySQL(rpm安装)1 背景2 环境说明3 准备工作3.1 端口查看3.2 检查安装3.3 创建MySQL用户和组4 MySQL安装4.1 下载MySQL4.2 解压安装包4.3 安装MySQL4.4 初始化MySQL4.5 启动MySQL4.6 设置MySQL初始密码4.6.1 查看数据库初始密码4.6.2 更…...
MySQL高级第二讲
目录 二、MySQL高级02 2.1 触发器 2.1.1 触发器介绍 2.1.2 创建触发器 2.2 MySQL的体系结构 2.3 存储引擎 2.3.1 存储引擎概述 2.3.2 各种存储引擎特性 2.3.3 InnoDB 2.3.4 MyISAM 2.3.5 MEMORY 2.3.6 MERGE 2.3.7 存储引擎的选择 2.4 优化sql 2.4.1 查看sql执行…...
凸优化专题1
多变量函数的求导与求梯度/矩阵求导 1. 导数 定义: 设f:Rn→Rm,且x∈intdomf,则f在点x的导数(或称Jacobian)记为矩阵Df(x)∈Rmnf:\R^n \rightarrow \R^m, 且x\in \mathbf{int}\ \mathbf{dom} f, 则f 在点x的导\\数(或称Jacobian)记为矩阵 Df(x) \in \R^{m\times n}f:Rn→Rm,且…...
【蓝桥杯每日一题】递推算法
🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…...
最简洁wordpress主题/微信推广引流平台
前言 继续ctf的旅程 攻防世界Misc高手进阶区的3分题 本篇是misc_pic_again的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 下下来一个png 扔进winhex 无果 扔进stegsolve 发现压缩包 解压得到一个无后缀文件 扔进winhex 得到flag 结语 e…...
温江网站制作/新品推广策划方案
/** * 对二维数组进行排序 * access public * param array $list 对二维数组 * param string $field 排序的键名 * param string $sortby 排序类型 (asc正向排序 desc逆向排序 nat自然排序) * return array */ private function list_sort_by($li…...
wordpress装插件/企业推广app
目录 Flask开发轻博客(一):欢迎来到 Flask 的世界 Flask开发轻博客(二):Flask 模板 Flask开发轻博客(三):Flask 的 Web 表单 Flask开发轻博客(四)…...
网站建设的公司有哪些内容/台州seo快速排名
对我个人而言,学习一个系统的最好的方法就是随着其启动运行的过程一点一点跟进(就好象看一个程序的源码要从main函数或者说从入口函数开始步步跟进)。当然具体的学习过程重点不是找到入口点就OK的。中间还有很多技巧,比如什么时候这个应该跳过一个实现什…...
做金属探测门批发网站/今日国际新闻最新消息事件
菜单是许多应用类型中常见的用户界面组件。要提供熟悉而一致的用户体验,您应使用 Menu API 呈现 Activity 中的用户操作和其他选项。 从 Android 3.0(API 级别 11)开始,采用 Android 技术的设备不必再提供一个专用“菜单”按钮。…...
普通企业网站建设/哪有培训seo
作为一名初次使用MaxCompute的用户,我体会颇深。MaxCompute 开箱即用,拥有集成化的操作界面,你不必关心集群搭建、配置和运维工作。仅需简单的点击鼠标,几步操作,就可以在MaxCompute中上传数据,分析数据并得…...