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实例

JavaSE注解_第1张图片

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

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();  //固定写法,加括号

}

你可能感兴趣的:(JavaSE,java,intellij-idea,开发语言)