【探索Java世界06】Java反射注解

一、反射

1.概述

  • 面向对象的编程思想
    类:从很多对象中抽取出来的公有的特性行为,抽象描述一组对象
    对象:在现实生活中存在很多对象,很多相同特征相同行为
  • 类是用来描述一组对象的
  • 反射机制认为是用来描述一组类的
    Class		用来描述类本身
    Package		用来描述类所属的包
    Filed		用来描述类中的属性
    Method		用来描述类中的方法
    Constructor	用来描述类中的构造方法
    Annotation	用来描述类中的注解@Qverride 注解可以放置在(
            类上面,属性上面,方法上面,构造方法上面,参数前)

2.如何获取Class

  • 三种方式
	Class c = Class.forName("包名.类名");
	Class c = 类名.class;
	Class c = 对象.getClass();//object类中的方法

3.Class中常用的方法

    int result = getModifiers();//获取类的修饰符(权限 特征)
    String name = getName();//获取全名(包.类名)
    String simpleName = getSimpleName();//获取简单名
    Package p = getPackage(); p.getName();	//获取包名
    Class s = getSuperClass();//获取父类
    Class[] ss =getInterface();//获取所有的实现接口
    Object obj = newInstance();//默认调用无参数构造方法创建对象 
    Field f = getField("属性名");
    Field[] fs = getFields();//获取全部的属性
    getDeclaredField("属性");//只能获取公有的属性,包括继承的属性
    Field[] fs = getDeclaredFields();//可以获取私有属性,可以获取私有和公有属性,但只能获取本类中的

4.Field类中的常用方法

	int = getModifers()获取属性的修饰符
	Class = getType();获取属性类型
	String getName();获取属性的名字
	操作属性 向里面存值  set(对象,值)
	从里面取值	值 = get(对象)
	setAccessable(true);可以修改私有属性的操作

5.如何操作类中的方法

  • class类中的方法
	Method m = class.getMethod(方法名,"Class...参数列表");获取一个公有方法(本类+父类)
	Method[] ms = class.getMethods();获取所有方法(公有 本类+父类)
	Method = getDeclaredMethod("方法名字",参数类型列表)获取一个方法(自己类,公有私有)
	Method[]  = getDeclaredMethods();获取所有方法(本类,公有私有)
   获取构造方法
	Constructor = getConstructor(class...参数类型列表)	 
	Constructor[] cs = class.getConstructors();
	Constructor = getDeclaredConstructor();
	Constructor[] = getDeclaredConstructors();
  • Method类中的方法
	int mm = m.getModifiers();获取方法的修饰符
	Class mrt = m.getReturnType();获取返回值数据类型
	String mn = m.getName();获取方法的名字
	Class[] mp = m.getParameterTypes();获取方法参数列表的类型
	Class[] ms = m.getExceptionTypes();获取方法抛出异常的类型
	Object = invoke(对象,执行方法需要传递的所有参数);执行方法一次
  • Constructor类中的方法
	int = getModifiers();获取方法的修饰符
	String = getName();获取方法的名字
	Class[] cp = c.getParameterTypes();获取方法参数列表的类型
	Class[] cs = c.getExceptionTypes();获取方法抛出异常的类型

二、注解

  • 注释
    Annotation(注释 注解)

  • 注解

1.注解的写法

  • @xxx(一些信息)

2.注解放置的位置

  • 类上面 属性上面 方法上面 构造方法上面 参数前面

3.注解的作用

  • 用来充当注释的作用(仅仅是一个文字的说明)@Deprecated
  • 用来做代码的检测(验证)@Override
  • 可以携带一些信息(内容)文件.properties .xml 注解

4.java中已经写好的注解供我们使用

  • @Deprecated 用来说明方法是废弃的

  • @Override 用来做代码检测的,检测此方法是否是一个重写

  • @SuppressWarnings(信息) 是一个String[]类型{“”,“”,“”} 如果数组内的元素只有一个长度,可以省略{}

    unused 变脸定义后没被使用
    serial 类实现了序列化接口,不添加序列号ID号
    rawtypes 集合没有定义泛型
    deprecation 方法已废弃
    unchecked 出现泛型的问题,可以不检测
    all 包含了以上所有(一般不推荐使用)

5.注解中可以携带信息,也可以不携带

  • 信息不能随便写,信息的类型只能是如下的类型
	1、基本数据类型
	2String类型
	3、枚举累心enum
	4、注解类型@
	5、数组类型[] 数组的内部需要时以上四种类型之一

6.如何描述一个注解类型

  • 通过@interface定义一个新的注解类型
  • 发现写法与接口非常相似(可以利用接口的特点来记忆注解)
	可以描述public static final的属性,比较少见
	可以描述public abstract的方法,方法要求返回值必须有,返回值类型是以上5
  • 自己定义的注解拿来使用时需要操作的步骤
    光定义不够,需要很多细致的说明(需要java提供好的注解来说明)
    元注解(也是注解,不是拿来使用的,是用来说明注解)
    @Target 描述当前的这个注解可以放置的位置
    @Retenton 描述当前的这个注解存在什么作用域中的
        源代码文件--->编译--->字节码文件--->加载---->内存执行
        SOURCE             CLASS               RUNTIME
    @Inherited 描述当前这个注解是否能被子类对象继承
    @Document 描述这个注解是否能被文档所记录
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值