首页
留言
Search
1
在Centos7下搭建Socks5代理服务器
1,153 阅读
2
在windows11通过Zip安装Mysql5.7
677 阅读
3
Mysql5.7开放远程登录
581 阅读
4
数据库
570 阅读
5
mysql5.7基本命令
474 阅读
综合
正则表达式
git
系统
centos7
ubuntu
kali
Debian
网络
socks5
wireguard
运维
docker
hadoop
kubernetes
hive
openstack
ElasticSearch
ansible
前端
三剑客
Python
Python3
selenium
Flask
PHP
PHP基础
ThinkPHP
游戏
我的世界
算法
递归
排序
查找
软件
ide
Xshell
vim
PicGo
Typora
云盘
安全
靶场
reverse
Java
JavaSE
Spring
MyBatis
C++
QT
数据库
mysql
登录
Search
标签搜索
java
centos7
linux
centos
html5
JavaScript
php
css3
mysql
spring
mysql5.7
linux全栈
ubuntu
BeanFactory
SpringBean
python
python3
ApplicationContext
kali
mysql8.0
我亏一点
累计撰写
139
篇文章
累计收到
34
条评论
首页
栏目
综合
正则表达式
git
系统
centos7
ubuntu
kali
Debian
网络
socks5
wireguard
运维
docker
hadoop
kubernetes
hive
openstack
ElasticSearch
ansible
前端
三剑客
Python
Python3
selenium
Flask
PHP
PHP基础
ThinkPHP
游戏
我的世界
算法
递归
排序
查找
软件
ide
Xshell
vim
PicGo
Typora
云盘
安全
靶场
reverse
Java
JavaSE
Spring
MyBatis
C++
QT
数据库
mysql
页面
留言
搜索到
2
篇与
注解
的结果
2023-02-20
Java 注解作用与应用场景
Java 注解作用与应用场景模拟Junit框架需求:定义若干个方法,只要加了MyTest注解,就会触发该方法执行。分析:定义一个自定义注解MyTest,只能注解方法,存活范围是一直都在。定义若干个方法,部分方法加上@MyTest注解修饰,部分方法不加模拟一个junit程序,可以触发加了@MyTest注解方法执行package frame; import java.lang.annotation.ElementType; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.annotation.Retention; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @Target(ElementType.METHOD) //注解只能在方法使用 @Retention(RetentionPolicy.RUNTIME) //让注解可以一直存活 @interface MyTest { } public class DEMO { // @MyTest private void test1(){ System.out.println("-----test1-----"); } @MyTest public void test2(){ System.out.println("-----test2-----"); } // @MyTest public void test3(){ System.out.println("-----test3-----"); } @MyTest private void test4(){ System.out.println("-----test4-----"); } public static void main(String[] args) throws InvocationTargetException, IllegalAccessException { Class demoClass = DEMO.class; DEMO demo = new DEMO(); Method[] declaredMethods = demoClass.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { if (declaredMethod.isAnnotationPresent(MyTest.class)){ declaredMethod.setAccessible(true); declaredMethod.invoke(demo); } } } }运行结果-----test2----- -----test4-----
2023年02月20日
199 阅读
0 评论
0 点赞
2023-02-20
Java 注解
Java 注解注解(Annotation)就是Java代码里的特殊标记,比如:@Override、@Test等,作用是:让其他程序根据注解信息来决定怎么执行该程序。注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上等位置自定义注解自己定义注解value: 特殊属性,只有一个value参数(或者其他参数有默认值)可以直接省略value写值模板: public @interface 注解名称{ public 属性类型 属性名() default 默认值; }案例@interface MyTest1 { String aaa(); boolean bbb() default true; String[] ccc(); } @interface MyTest2 { String value(); //特殊属性,只有一个value参数(或者其他参数有默认值)可以直接省略value写值 } @interface MyTest3 { String value(); //特殊属性,只有一个value参数(或者其他参数有默认值)可以直接省略value写值 int age() default 1; } @MyTest1(aaa = "类注解",ccc = {"a","b","c"}) public class AnnotationTest1 { @MyTest1(aaa = "函数注解",ccc = {"aa","bb","cc"}) public void test1(){ } @MyTest2("只有一个value参数(或者其他参数有默认值)可以直接省略value写值2") public void test2(){ } @MyTest3("只有一个value参数(或者其他参数有默认值)可以直接省略value写值3") public void test3(){ } }注解的原理可以查看注解编译后的文件,本质上是接口,里面写的一些属性都是抽象方法字节码文件@interface MyTest1 { String aaa(); boolean bbb() default true; String[] ccc(); } @interface MyTest2 { String value(); } @interface MyTest3 { String value(); int age() default 1; }元注解指的是修饰注解的注解常见的元注解:@Target、@Retention@Target 声明被修饰的注解只能在哪些位置使用@Target(ElementType.TYPE)TYPE,类,接口FIELD,成员变量METHOD,成员方法PARAMETER,方法参数CONSTRUCTOR,构造器LOCAL_VARIABLE,局部变量@Target(ElementType.TYPE) // 当前被修饰的注解只能在类上使用 @interface MyTest4{ } @Target({ElementType.TYPE,ElementType.METHOD}) // 当前被修饰的注解只能在类和方法上使用 @interface MyTest5{ }@Retention 声明注解的保留周期@Retention()SOURCE 只作用在源码阶段,字节码文件中不存在CLASS(默认值) 保留到字节码文件阶段,运行阶段不存在RUNTIME(开发常用) 一直保留到运行阶段@Retention(RetentionPolicy.SOURCE)//只作用在源码阶段,字节码文件中不存在 @interface MyTest6 { } @Retention(RetentionPolicy.CLASS)//保留到字节码文件阶段,运行阶段不存在 @interface MyTest7 { } @Retention(RetentionPolicy.RUNTIME)//一直保留到运行阶段 @interface MyTest8 { }注解的解析判断类上、方法上、成员变量上是否存在注解,并把注解里的内容给解析出来使用反射package Annotations; import java.lang.annotation.*; import java.lang.reflect.Method; import java.util.Arrays; @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface MyTestAnnotation { String value(); double aaa() default 100; String[] bbb(); } @MyTestAnnotation(value = "类注解",aaa = 99.5,bbb = {"a","b"}) class TestClass { @MyTestAnnotation(value = "方法注解",aaa = 199.5,bbb = {"b","a"}) public void test1(){ } } public class MyTestClass{ public static void main(String[] args) throws Exception{ { // 1.获取class对象 Class c = TestClass.class; // 2.解析类上的注解 // 判断类上是否包含了某个注解 if (c.isAnnotationPresent(MyTestAnnotation.class)){ MyTestAnnotation myTestAnnotation = (MyTestAnnotation) c.getDeclaredAnnotation(MyTestAnnotation.class); System.out.println(myTestAnnotation.value()); System.out.println(myTestAnnotation.aaa()); System.out.println(Arrays.toString(myTestAnnotation.bbb())); } } System.out.println("--------------------------"); { // 1.获取class对象 Class c = TestClass.class; Method m = c.getDeclaredMethod("test1"); // 2.解析方法上的注解 // 判断方法上是否包含了某个注解 if (m.isAnnotationPresent(MyTestAnnotation.class)){ MyTestAnnotation myTestAnnotation = (MyTestAnnotation) m.getDeclaredAnnotation(MyTestAnnotation.class); System.out.println(myTestAnnotation.value()); System.out.println(myTestAnnotation.aaa()); System.out.println(Arrays.toString(myTestAnnotation.bbb())); } } } }输出结果类注解 99.5 [a, b] -------------------------- 方法注解 199.5 [b, a]
2023年02月20日
167 阅读
0 评论
0 点赞