当前位置:网站首页>Notes and notes
Notes and notes
2022-07-04 05:54:00 【Chang'an has a hometown y】
java Notes and notes for
1 notes
Classification of notes
Single-line comments : //
Multiline comment : /* */
Documentation Comments :/** */
effect : Deliver additional information , Show the programmer , Not involved in compilation
2 notes
Annotation It is a special mark in the code , You can compile 、 Class loading 、 Read while running
, And carry out the corresponding treatment .
2.1 The difference between annotation and annotation

2.2 Custom annotation
package com.yq.day72;
public @interface MyAnno {
// Range of attribute types Basic data types string class Enumeration type Annotation type
// And arrays of the above types
int age();
double price();
String name();
String[] names();
Class c();
MyAnno3 anno();
// Annotations cannot inherit
}
@interface MyAnno3 {
}
Annotations cannot be inherited
2.3 Use of annotations
Instantiate the object not through new, It is Property name = Property value
Use When Assign values to each attribute
@ Annotation name ( Property name 1=value, Property name 2=value,....)
Be careful :
1. Each attribute must be assigned
2. There are default values that can be omitted
3. There's only one property , And for value, The assignment can be simplified
4. Copy and use of arrays {}
5. The value of a reference type cannot be null
2.4 Annotation processor
Combine reflection to apply
Specific steps to use
1. Get registered information through reflection
2. Get file bytecode object
3. How to get objects , Determine whether the above method uses annotations
4. An example of getting annotations is used
5. Get attribute value , To operate
Method used : Belong to category Class
| boolean isAnnotation() | If so Class Object represents an annotation type, and returns true. |
|---|---|
| A getAnnotation(Class annotationClass) | If there is a comment of the specified type for the element , Then return these comments , Otherwise return to null. |
Code instance :
package com.yq.day72;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
/** * @author [email protected] * @description * @since 2022/07/02 11:41 * Create a learning object , Don't use new The way , Use reflection and annotation to realize * name The length of is 5 Between , Age 18-25 Between */
// Test class
public class Demo04 {
// Define a bytecode file object , Assign a value
static Class<?> aClass;
static {
try {
aClass = Class.forName("com.yq.day72.Student");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException, InstantiationException, IllegalAccessException {
Student zhansa = getInstance("zga", 293);
System.out.println(zhansa);
}
public static Student getInstance(String name,int age) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
// Verification of name obtain student Properties of name
Field name1 = aClass.getDeclaredField("name");
// Decide whether to use annotations Judgment properties name Whether there are notes on
boolean a1 = name1.isAnnotationPresent(NameLimit.class);
if (a1){
// Get an instance of the annotation
NameLimit a2 = name1.getAnnotation(NameLimit.class);
// Get the attribute value of the annotation
int length = a2.length();
// Judge
if (name.length()>length){
throw new IllegalArgumentException(" The length is large ");
}
}
// Verification of age obtain age Properties of
Field age1 = aClass.getDeclaredField("age");
// Judge if there is a comment
boolean annotationPresent = age1.isAnnotationPresent(AgeLimit.class);
if (annotationPresent){
// Get an instance of the annotation
AgeLimit annotation = age1.getAnnotation(AgeLimit.class);
// Get attribute value
int i = annotation.maxAge();
int i1 = annotation.minAge();
if (age>i || age <i1){
throw new IllegalArgumentException(" Age is illegal !!!!!");
}
}
// Get construction method
Constructor<?> declaredConstructor = aClass.getDeclaredConstructor(String.class, int.class);
// Ignore restrictions
declaredConstructor.setAccessible(true);
// Create student objects
Student o = (Student) declaredConstructor.newInstance(name, age);
return o;
}
}
class Student{
// annotation
@NameLimit
String name;
// annotation
@AgeLimit
int age;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
private Student(String name, int age) {
this.name = name;
this.age = age;
}
}
// Yuan notes
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface NameLimit{
int length() default 5;
}
// Yuan notes
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface AgeLimit{
int maxAge() default 25;
int minAge() default 18;
}
2.5 Yuan notes
Notes describing annotations , Metadata meta data
Common meta notes
**@Retention Yuan notes , To define the retention level of our own annotations .**
- RetentionPolicy.RUNTIME
- RetentionPolicy.CLASS Default
- RetentionPolicy.SOURCE
**@Target Yuan notes , The purpose of annotation **
For annotations , Goals that can work :
1. The whole class ElementType.TYPE
2. Member variables ElementType.FIELD
3. Construction method ElementType.CONSTRUCTOR
4. Member method ElementType.METHOD
2.6 annotation VS The configuration file

边栏推荐
- 724. Find the central subscript of the array
- 70000 words of detailed explanation of the whole process of pad openvino [CPU] - from environment configuration to model deployment
- Arc135 C (the proof is not very clear)
- 卸载Google Drive 硬盘-必须退出程序才能卸载
- Design and implementation of tcp/ip series overview
- How to clone objects
- 复合非线性反馈控制(二)
- 2022.7.2-----leetcode.871
- Uninstall Google drive hard drive - you must exit the program to uninstall
- Component、Container容器常用API详解:Frame、Panel、ScrollPane
猜你喜欢

Configure cross compilation tool chain and environment variables

Detectron:训练自己的数据集——将自己的数据格式转换成COCO格式

BUU-Reverse-easyre

APScheduler如何设置任务不并发(即第一个任务执行完再执行下一个)?
![BUU-Crypto-[GXYCTF2019]CheckIn](/img/b8/ad6c05977f6943f30e9975acb6eb6e.jpg)
BUU-Crypto-[GXYCTF2019]CheckIn

One click filtering to select Baidu online disk files

卸载Google Drive 硬盘-必须退出程序才能卸载

C语言练习题(递归)

How to configure static IP for Kali virtual machine

SQL injection - injection based on MSSQL (SQL Server)
随机推荐
The end of the Internet is rural revitalization
Yiwen unlocks Huawei's new cloud skills - the whole process of aiot development [device access - ESP end-to-side data collection [mqtt]- real time data analysis] (step-by-step screenshot is more detai
【雕爷学编程】Arduino动手做(105)---压电陶瓷振动模块
Leetcode 184 Employees with the highest wages in the Department (July 3, 2022)
2022.7.3-----leetcode.556
lightroom 导入图片灰色/黑色矩形 多显示器
19. Framebuffer application programming
Leakage detection relay jy82-2p
C语言练习题(递归)
剑指 Offer II 038. 每日温度
AWT常用组件、FileDialog文件选择框
el-select如何实现懒加载(带搜索功能)
ES6 modularization
Steady! Huawei micro certification Huawei cloud computing service practice is stable!
Compound nonlinear feedback control (2)
[Excel] 数据透视图
ES6 模块化
fastjson
Nexus 6p从8.0降级6.0+root
HMS v1.0 appointment. PHP editid parameter SQL injection vulnerability (cve-2022-25491)