反射机制
反射: 主要是指程序可以访问、检测和修改它本身状态或行为的一种能力
- java 反射特点
- Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高
- 允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性
- reflection的工作机制
package annotion;
public class reflection {
public static void main(String[] args) throws ClassNotFoundException {
//反射加载类,获取
Class c1 = Class.forName("annotion.user1");// 包名
Class c2 = Class.forName("annotion.user1");
Class c3 = Class.forName("annotion.user1");
Class c4 = Class.forName("annotion.user1");
System.out.println(c1);
// 验证是否为同一个类
// 一个类在内存中只有一个CLASS对象
// 被加载后,类的整个结构都会封装在class 中
System.out.println(c2.hashCode());
System.out.println(c3.hashCode());
System.out.println(c4.hashCode());
c1.getClass();
}
}
// 实体类: projo ,entity
class user1{
int age;
int id;
String name;
public user1() {
}
// get/set 方法
public user1(int age, int id, String name) {
this.age = age;
this.id = id;
this.name = name;
}
public int getAge() { return age;}
public void setAge(int age) { this.age = age; }
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getNaem() { return name; }
public void setNaem(String naem) { this.name = name; }
// 输出字符串
@Override
public String toString() {
return "reflection{" +
"age=" + age +
", id=" + id +
", naem='" + name + '\'' +
'}';
}
}
注解方法
package annotion;
import java.lang.annotation.*;
// 测试元注解
public class test01 {
@MyAnnotation
public void ta(){
}
}
@Retention 表示我们注解在什么地方还有效
// runtime 》 class > sources
@Retention(value = RetentionPolicy.CLASS.RUNTIME)
//定义一个注解
@Target 表示我们注解可以用在那些地方
@interface MyAnnotation{
}
@Inherited 表示子类可以继承父类的注释
@Documented 表示是否将我们的注释生成在Java的文档中
@Documented
@Target(value = {ElementType.METHOD,ElementType.TYPE}
package annotion;
import javax.annotation.processing.SupportedOptions;
public class rest01 extends Object{
@Override //重写
public String toString(){
return super.toString();
}
@Deprecated // 不推荐使用的方法
public void toUs(){
toUs();
}
{
System.out.println("jingffao");
}
}