java_day21_反射和注解
反射和注解
一.反射
反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。
反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。
参考博文
Java反射框架主要提供以下功能: 参考知乎
- 1.在运行时判断任意一个对象所属的类;
- 2.在运行时构造任意一个类的对象;
- 3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);
- 4.在运行时调用任意一个对象的方法
(一)、得到构造器的方法-Constructor
onstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数
Constructor[] getConstructors() -- 获得类的所有公共构造函数
Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关)
Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关)
(二).获得字段信息的方法-Field
Field getField(String name) -- 获得命名的公共字段
Field[] getFields() -- 获得类的所有公共字段
Field getDeclaredField(String name) -- 获得类声明的命名的字段
Field[] getDeclaredFields() -- 获得类声明的所有字段
(三).获得方法信息的方法-Method
Method getMethod(String name, Class[] params) -- 使用特定的参数类型,获得命名的公共方法
Method[] getMethods() -- 获得类的所有公共方法
Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型,获得类声明的命名的方法
Method[] getDeclaredMethods() -- 获得类声明的所有方法
(四).获取Class(类类型)的三种方式
1.根据类的对象获取
Person person = new Person ( );
Class clazz = person.getClass ( );
2.根据类获取
Class clazz = Person.class;
3.通过类名获取
Class clazz = Class.forName("com.lanou3g.code0510.reflection.Person")
(五).通过反射调用方法的代码:
Person person = new Person ( );//创建person类的对象
person.setName("张三");//设置属性值
person.setAge(19);//设置属性值
Class clazz = Person.Class;//创建Class对象
//通过类的方法名获得该方法
Method showMethod = clazz.getDeclaredMethod ("show");
showMethod.setAccessible (true);//让这个类的方法可以被访问
showMethod.invoke(Person);//调用这个方法
二.注解
它提供了一种结构化的,并且具有类型检查能力的新途径,从而使得程序员能够为代码加入元数据,而不会导致代码杂乱且难以阅读。
1.基本格式:public @interface 注解名 {定义体}
2.四个元注解,用于修饰注解的注解
1).@Target:表示该注解可以用于什么地方。
取值(ElementType)包括:
CONSTRUCTOR:用于描述构造器
FIELD:用于描述域
LOCAL_VARIABLE:用于描述局部变量
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述参数
TYPE:用于描述类、接口(包括注解类型) 或enum声明
2).@Retention:表示需要在什么级别保存该注解信息。
取值(RetentionPolicy)包括:
SOURCE:在源文件中有效(即源文件保留)
CLASS:在class文件中有效(即class保留)
RUNTIME:在运行时有效(即运行时保留),因此可以通过反射机制读取注解的信息。
3).@Documented:表示将此注解包含在javadoc中。
4).@Inherited:表示允许子类继承父类中的注解。
参考博文
转载于:https://www.cnblogs.com/memo-song/p/9021680.html
java_day21_反射和注解相关推荐
- 学习Kotlin(七)反射和注解
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
- 使用基于注解的mybatis时,利用反射和注解生成sql语句
在开发时遇到一个问题,在使用基于注解的mybatis插入一个对象到mysql时,在写sql语句时需要列出对象的所有属性,所以在插入一个拥有10个以上属性的对象时sql语句就会变得很长,写起来也很不方便 ...
- java注解的反射_Java注解与反射
概要 本文主要是总结Java注解与反射的相关知识,加深自己对Java类动态语言的理解,同时为日后学习Spring打下基础. 注解: 什么是注解 Annotation的作用 不是程序本身,但是可以对程序 ...
- junit单元测试,反射,注解
今日内容 1. Junit单元测试 2. 反射 3. 注解 Junit单元测试: * 测试分类:1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值.2. 白盒测试:需要写代码的.关注程 ...
- java 注解与反射_Java注解与反射直接上手
什么是注解(Annotation) 注解顾名思义为注释.讲解,可以理解为一种标签或标记,可以用在类.方法或者域上.向类.方法等添加注解,相当于给他们贴上了一层标签. 注解使用 在使用注解时,在类名.方 ...
- Java 使用反射处理注解
Java 使用反射处理注解 自定义注解的格式: [public|final] @interface 注解名//@interface 表明:这是一个自定义注解 {注解元素//注解元素 是无参数的方法 } ...
- 【JAVA SE】第十七章 反射、注解与Spring事务底层原理
第十七章 反射.注解与Spring事务底层原理 文章目录 第十七章 反射.注解与Spring事务底层原理 一.反射 1.简介 2.意义 3.缺点 4.应用场景 5.反射技术的使用 二.注解 1.概念 ...
- Java基础13:反射与注解详解
Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...
- 通过源码理解反射与注解是什么东西?
反射+注解(Java):练习(Java) 1.通过反射获得注解 2.获得注解value的值 3.获得注解value的值 代码示例: package reflect;import java.lang.a ...
最新文章
- 「BZOJ 2342」「SHOI 2011」双倍回文「Manacher」
- spring18-1:采用jdk的动态代理 proxy。
- 第七章 控制PL/SQL错误
- Codeforces 508E Arthur and Brackets 区间dp
- sublime编写python路径报错怎么改_sublime开发Python的编码问题
- oracle 数据库运维技术,Oracle数据库智能运维标准化工艺研究-orastar-DIY数据库运维工具-第1期 导论篇...
- Android Loader 异步加载详解二:探寻Loader内部机制
- Redis 未授权访问缺陷可轻易导致系统被黑
- 他让全世界凶手睡不着觉,现实版福尔摩斯,退休了4次又被拽回来工作,无敌实在是太寂寞了~...
- Docker上部署WebERP系统,开源ERP框架
- 设计模式--请参阅本质
- HDU 4607 Park Visit(树的直径)
- 机器学习和传统编程有什么区别?✅
- NP、OSPF路由聚合
- Office2007 三合一绿色精简版
- java编程 编写求解九宫格_java编程-九宫格问题
- screen.colorDepth(色彩深度) 和 screen.pixelDepth(像素深度)
- Oracle 错误疑难解决方案和总结
- 西游记中唐僧禅心坚定不好女色
- SSM框架学习(2)CRM项目软件开发周期
热门文章
- 如何得到通过GetOpenFileName选择的多个文件的文件名
- C语言 递归实现分解质因数
- java 使用servlet做学生管理系统(无框架)
- 爬虫:通过滑动或者点触验证码的方法及实现(点触+滑动)
- Python 操作 Excel,总有一个模块适合自己
- WH-G405tf连接公网服务器进行透传
- 数组去重是面试中经常问到的问题
- 自己写的一个复杂查询
- pig 的chararry类型不能用比较运算符comparison operator
- ECMA262 Edition5 Object,Object的属性和方法,Object.prototype的方法.