1.什么是注解(Annotation)?
2.内置注解
package Base;
import java.util.LinkedList;
public class aaa {
//测试什么是注解
//@Override 重写的注解
@Override
public String toString() {
return super.toString();
}
//@Deprecated 不推荐程序使用,但是可以使用,或者存在更好的方式
@Deprecated
public static void test(){
System.out.println("真好");
}
// @SuppressWarnings镇压警告
@SuppressWarnings("all")
public void t() {
LinkedList<String> l = new LinkedList<>();
}
public static void main(String[] args) {
test();
}
}
3. 元注解
package Base;
import java.lang.annotation.*;
public class aaa {
@Override
public String toString() {
return super.toString();
}
@app
public static void main(String[] args) {
}
//自己定义一个元注解
@Target(value = { ElementType.METHOD}) //Target表示用在什么地方
@Retention(value = RetentionPolicy.RUNTIME) //Retention表示注解在什么地方还有效 runtime>class>Sources
@Documented //表示是否将我们的注解生成在JavaDoc中
@Inherited //子类可以继承父类的注解
public @interface app{
}
}
4.自定义注解
package Base;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
public class aaa {
@apple("a")
public static void main(String[] args) {
}
}
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface app{
//以下是注解的参数:参数类型+参数名字+();
//使用default来默认定义参数
String name() default "";
int age() default 89;
int id() default -1; //如果默认是-1则代表不存在
}
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface apple{
String value(); //只有一个参数的时候 参数名为value时 使用注解的时候可以省略;
}
5.反射(Reflection)的概念
获得反射对象
package Base;
public class aaa extends Object{
public static void main(String[] args) throws ClassNotFoundException {
//通过反射获取类的Class对象
//传入包名+类名
Class c1 = Class.forName("Base.aaa");
System.out.println(c1);
//一个类在内存中只有一个class对象
//一个类被加载后,类的整个结构都会被封装在Class对象中 通过这个反射的对象我们可以获得类中的所有东西了
}
}
//实体类
class User{
private String name;
private int id;
public User() {
}
public User(String name, int id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", id=" + id +
'}';
}
}
7.得到Class类的几种方法