反射泛型注解

一、反射

1. 一段java代码在程序运行期间会经历三个阶段: source-->class-->runtime

 

2. Class 对象

    java中用一个Class对象来表示一个java类的class阶段

    Class对象封装了一个java类中定义的成员变量、成员方法、构造方法、类名、包名等

 

3. 反射

    反射就是获得一个java类的各个组成部分

 

4. 反射的用法

    1)需要获得java类的各个组成部分,首先需要获得代表java类的 Class 对象

    获得Class对象的三种方式:

    Class.forName(classname) 用于做类加载

    obj.getClass()              用于获得对象的类型

    类名.class                   用于获得指定的类型,传参用

 

    2) 反射类的成员方法

    Class clazz = Person.class;

    Method method = clazz.getMethod(methodName, new Class[]{paramClazz1, paramClazz2});

    method.invoke();

   

    3) 反射类的构造函数

    Constructor con = clazz.getConstructor(new Class[]{paramClazz1, paramClazz2,...})

    con.newInstance(params...)

 

    4) 反射类的属性

    Field field = clazz.getField(fieldName);

    field.setAccessible(true);

    field.setObject(value);

 

5. 反射用在哪里

    到底框架是什么?  框架就是将开发中大量重复的代码集中起来写个通用的程序

    框架就是用反射来实现的

    框架需要现在的类调用将来写的类

 

二、 泛型

1. 泛型是一种可变化的类型

   

2. 用途:

    一个类的多个成员方法用到的参数类型都是未知的类型,但又需要是同一个类型,就可将方法的参数类型

    定义为泛型,此泛型必须在类上先予以声明才能在方法中使用

 

    一个方法的多个参数和返回值需要是同一个类型,也可以用泛型来解决,在返回值前面声明泛型

 

3. 泛型的基本概念

List<E>为例:<>念着typeof 例, List<String> 就是 List typeof String

List<E>中的E称为类型参数变量

List<Integer>中的Integer称为实际类型参数

整个List<E>称为泛型类型

整个List<Integer>称为参数化的类型

 

4. 泛型的使用

    1)使用带泛型的类时,在创建对象时可以为泛型指定实际类型参数,指定的具体类型相当于给泛型传参

    2)子类在继承父类的时候,可以为父类定义的泛型指定实际类型参数

    class B<T>

    class A extends B<String>

    通过子类A获得的父类类型就是一个参数化的类型

    3)调用方法时传入参数的具体类型将作为方法中泛型的实际类型

 

三、注解

1. jdk中自带的三个注解

    @Deprecated 声明方法已过时

    @SuppressWarnings  取消编译器警告

    @Override  声明方法是继承自父类

 

 

   

2.  什么是注解

    注解就是java代码中的特殊标记,它用于告诉调用者类应该如何被运行

    注解相当于配置文件的功能

 

3. 自定义注解

使用 @interface 关键字可以声明一个注解

public @interface MyAnnotation1

 

注解中可以定义属性

String name default “aaa”;

 

value是注解中的特殊属性

注解中定义的属性如果名称为 value 此属性在使用时可以省写属性名

 

4.元注解  Annotation

元注解简单理解为 注解的注解

类似于描述一个注解的信息的配置文件

@Retention 指定注解的作用域

RetentionPolicy.SOURCE

RetentionPolicy.CLASS

RetentionPolicy.RUNTIME

 

@Target:指定注解用于修饰类的哪个成员.

@Target 包含了一个名为 value,类型为ElementType的成员变量。

 

@Inherited: 被它修饰的 Annotation 将具有继承性.

如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解

 

5. 反射注解

    在程序可以通过反射来获取注解中封装的值

 

四、动态代理

 

 

 

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值