JavaSE注解和反射

注解分类和说明点

注解:可对程序做解释可被其他程序读取

元注解:@Target:表明注解的使用范围,@Retention:表示要在什么级别保存注解信息,@Document,@Inherited

自定义注解:@interface +注解名

在自定义注解内部可以定义多个属性,如果要使用自定义注解,则必须给注解内部的属性赋值。

通过反射可以读取到private修饰的属性

反射相关的主要API:

java.lang.Class

java.lang.reflect.Method:代表类的方法

java.lang.reflect.Filed:代表类的成员变量

java.lang.reflect.Constructor:代表类的构造器

通过反射获取类的Class对象:

##一个类在内存中只有一个Class对象,一个类被加载后,类的整个结构都会被封装在Class对象中

Class c1=Class.forName("com.kuang.reflection.User)

Class c2=person.getClass()  //通过Person类的实例对象person 获得Person类对应的class实例

Class c3=Student.class//直接通过类名获得对应的class实例

Class c4=Integer.TYPE //基本内置包装类都有一个TYPR属性

Class c5=c1.getSuperclass(); //获得对象c1的父类的class实例

所有类型的class实例

 通过反射获取类的运行时结构(属性,方法,构造器)

Field[] fields=c1.getFileds();//找到全部public属性
fields=c1.getDelcaredDield();//找到全部属性
Method[] methods=c1.getMethods();//找到全部public方法
Method[] methods=c1.getDeclaredMethods();
Constructor[] constructors=c1.getConstructors();//找到全部public构造器
Constructor[] constructors=c1.getDeclaredConstructors();

通过反射创建对象方式一(通过class实例)

Class c1=Class.forName("com.kuang.reflection.User)//class实例

User user=(User)c1.newInstance();//class实例创建一个object对象,并强转

通过反射创建对象方式二(通过构造器)

Constructor constructor=c1.getDeclaredConstructor(String.class,int.class,int.class)//没有参数则是调用无参构造器

User user2=(User)constructor.newInstance("lian",01,18);

通过反射调用对象方法

User user3=(User)c1.newInstance();

Method setName=c1.getDelcaredMethod("setName",String.class)

setName.invoke(user3,"连");//激活,传(对象名,属性值)

user3.getName()

通过反射操作属性

User user4=(User)c1.newInstance();

  //要操作哪个属性,需定义

Field name=c1.getDelcaredField("name");

name.setAccessible(true);  //因为不能操作私有属性,所以设置为true需要关闭安全检查开关

  //通过反射重新设置属性的值~~

name.set(user4,"连2");

通过反射操作注解!(重点)

@tableLian("db_student")

class Student{

   @FieldLian(columnName="db_id",type="int",length=10)

   int id;

   //关于id的setter和getter省略

}

自定义两个注解:

  @Target(ElementType.TYPE)

  @Retention(RetentionPolicy_RunTIME)

@interface FieldLian{

     String columnName();

     String type();

     int  length();  //固定写法,加括号

}

==========================

  @Target(ElementType.TYPE)

  @Retention(RetentionPolicy_RunTIME)

@interface tableLian{

String value();  //固定写法,加括号

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值