Java基础学习13--注解和反射

一、注解Annotation

1、注解概述

注释+解释:不是程序本身,而是对其做出解释,并能被其它程序读取。

格式:@注释名(参数)

定义注解的关键字:@interface

2、常见的内置注解:

@Override重写覆盖方法

@Desperated已过时的,不推荐程序员使用的(但是使用也不会错)

@SuppressWarnings()镇压警告,用来抑制编译时的警告信息(不建议使用)

3、元注解

用来解释注解的注解,Java定义了四个标准的元注解:

@Target 描述注解的使用范围,即描述该注解可以在哪些地方(字段/类/方法...)使用

@Retention (建议定义为RUNTIME)描述需要在什么级别保存该注视信息(source<class<runtime),描述注解的生命周期

@Documented 描述是否将我们的注解生成在JAVAdoc中

@Inherited 表示子类可以继承父类的注解

4、自定义注解@interface(注意和接口interface的区别)

定义注解的参数:参数类型+参数名();

注意:

  • 参数名一定要加括号();
  • 如果定义的注解有参数,则使用该注解时必须要加参数,否则会报错(除非该参数定义了默认值);
  • 如果只有一个参数,一般定义参数名为value

二、反射机制Reflection

1、反射概述

反射使Java语言从静态变为了动态语言(在运行的时候可以动态改变自身结构,如javascript)。

反射机制能实现程序在运行时获取任意类的内部信息,并能直接操作任意对象的内部属性和方法。

主要API:

  1. java.lang.Class:代表一个类
  2. java.lang.reflect.Method:代表类的方法
  3. java.lang.reflect.Field:代表类的成员变量
  4. java.lang.reflect.Constructor:代表类的构造器

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

2、Class类

  • 在Object类中定义了getClass方法,此方法将被所有的子类继承。
  • 这个方法返回值的类型是一个Class类,这个类是Java反射的源头。
  • 实际上所谓的反射:从程序的运行结果来看,就是可以通过对象反射求出类的名称

3、 Class类的常用方法

4、Class类特点

  • Class本身是一个类。
  • Class对象只能由系统建立对象。
  • 一个加载的类在JVM中只会有一个Class实例。
  • 一个Class对象对应的是一个加载到JVM中的一个.class文件。
  • 每个类的实例都会记得自己是由哪个Class实例所生成。
  • 通过Class可以完整地得到一个类中的所有被加载的结构。
  • Class类是Reflection的根源,针对任何你想动态加载、运行的类、唯有鲜活的相应的Class对象。

5、获取Class类的几种方式

  1. 若已知具体的类,可以通过类的class属性获取,该方法最为安全可靠,程序性能最高。Class clazz = Person.class;
  2. 若已知某个类的实例,调用该实例的getClass方法获取Class对象。                                Class clazz = person.getClass();
  3. 若一致一个类的全限定类名,且该类的类路径下,可通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException异常。                                                                 Class clazz = Class.forName("com.demo.entity.User");
  4. 内置基本数据类型可以直接用类名.Type获得。
  5. 还可以利用ClassLoader获得。

6、有了Class对象,我们可以做什么

  1. 创建类的对象:调用Class对象的newlnstance()方法。
    • 类必须有一个无参的构造器。
    • 类的构造器的访问权限需要足够。
  2. 没有无参构造器,是否可以创建对象?可以
    • 通过CLass类的getDeclaredConstructor(Class…parameter)取得本类的指定形参类型的构造器。
    • 向构造器的形参中传递一个对象数组进去,里面包含了构造器中所需的各个参数。
    • 通过Constructor实例化对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值