JAVA高级特性反射和注解
反射:



getSimpleName()获取类名
getName()获取完整的“包,类”名称;
Class 类的使用
无参构造实例化对象
public static void main(String[] args) throws ClassNotFoundException, InstantiationException,
IllegalAccessException {
//通过类路径获取类Class对象
Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
//调用newInstance()方法, 调用无参构造创建类对象
Person person = (Person) clazz.newInstance();
//操作对象
person.setAge(12);
person.setName("张三");
System.out.println(person);
}
有参构造实例化对象
public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
//获取类的Class对象
Class<?> clazz =clazz.forName("com.project.enmutestdemo.fanshe.Person");
//通过参数类型获取类的具体的某一个构造器
Constructor<?> c = clazz.getConstructor(String.class,int.class);
Person person = null;
// 传入实参, 通过构造器创建类对象
person = (Person) c.newInstance("张三", 20);
System.out.println(person);


getmodified 获取访问修饰符(public private 。。。)
取得类中属性
public static void main(String[] args) throws ClassNotFoundException {
Class<?> clazz = null;
//通过类路径获取类Class对象
clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
//取得本类的属性
Field[] f = clazz.getDeclaredFields();
//循环操作类的属性
for(int i = 0; i < f.length; i++){
//取得该属性的类型
Class<?> t = f[i].getType();
//取得该属性的修饰符数字
int mo = f[i].getModifiers();
//通过修饰符数字取得属性的修饰符
String priv = Modifier.toString(mo);
System.out.print("本类属性: ");
System.out.print(“ 修饰符为: ”+priv+" ");
System.out.print(“类型为: ”+t.getName()+" ");
System.out.print(“名称为: ”+f[i].getName()+”\n”); 通过反射 操作属性
//获取类的Class对象
Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
//调用无参构造器创建类对象
Object obj = clazz.newInstance();
//通过属性名称获取属性的Field对象
Field nameFiled = clazz.getDeclaredField("name");
//通过set方法对对象的属性进行赋值
nameFiled.set(obj, "张三");
//通过get方法获取对象的属性值
System.out.println(" 姓名: "+nameFiled.get(obj)); 操作类中的属性
//获取类的Class对象
Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
//调用无参构造器创建类对象
Person obj = clazz.newInstance();
//通过属性名称获取属性的Field对象
Field nameFiled = clazz.getDeclaredField("name");
//设置该属性的访问权限为可访问
nameFiled.setAccessible(true);
//通过set方法对对象的属性进行赋值
nameFiled.set(obj, "张三");
//通过get方法获取对象的属性值
System.out.println(" 姓名: "+nameFiled.get(obj));

取得类的全部方法
//获取类的Class对象
Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
Method[] method = clazz.getDeclaredMethods();//获取本类所有方法
for(int i = 0; i < method.length;i++){//循环操作方法
Class<?> r = method[i].getReturnType();//获取方法的返回值类型
Class<?> p[] =method[i].getParameterTypes();//获取方法的参数类型
int xx = method[i].getModifiers();//获取方法的修饰符数字
System.out.print(Modifier.toString(xx)+" ");//获取修饰符
System.out.print(r.getSimpleName()+" ");//获取方法返回值类型名称;
System.out.print(method[i].getName());//获取方法名称
System.out.print("(");
for(int x = 0; x < p.length;x++){//循环操作参数类型
System.out.print(p[x].getSimpleName() +" "+ "arg"+x);//输出参数
if(x < p.length -1){//判断是否输出“ , ”
System.out.print(",");//输出“ , ”
}
}S
ystem.out.println();//换行
}
调用类中的方法
public static void main(String[] args) throws ClassNotFoundException,
NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
InvocationTargetException, InstantiationException {
//获取类的Class对象
Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person");
//通过方法名称获取无参Method对象
Method me = clazz.getMethod("speak");
//调用无参构造器创建类对象
Object obj = clazz.newInstance()
me.invoke(obj);

注解:


JAVA高级特性反射和注解的更多相关文章
- Java高级特性——反射机制(第二篇)
在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...
- Java高级特性——反射机制(完结)——反射与注解
按照我们的学习进度,在前边我们讲过什么是注解以及注解如何定义,如果忘了,可以先回顾一下https://www.cnblogs.com/hgqin/p/13462051.html. 在学习反射和注解前, ...
- Java高级特性——反射机制(第三篇)
获取类运行时的结构 通过反射获取运行时类的完整结构 Field.Method.Constructor.Superclass.Interface.Annotation >实现的全部接口 >所 ...
- Java高级特性——反射
感谢原文作者:peter_RD_nj 原文链接:https://www.jianshu.com/p/9be58ee20dee 注意:同一个类在JVM中只存在一份字节码对象 概述 定义 JAVA反射机制 ...
- Java高级特性——反射机制(第一篇)
——何为动态语言,何为静态语言?(学习反射知识前,需要了解动态语言和静态语言) 动态语言 >是一类在运行时可以改变其结构的语言,例如新的函数.对象.甚至是代码可以被引进,已有的函数可以被删除或者 ...
- Java高级篇反射和注解
反射是什么? 反射的作用?能带来什么好处? 反射的使用? 注解的使用? 注解和反射配合实战...
- Java高级特性—反射和动态代理
1).反射 通过反射的方式可以获取class对象中的属性.方法.构造函数等,一下是实例: 2).动态代理 使用场景: 在之前的代码调用阶段,我们用action调用service的方法实现业务即可. 由 ...
- Java 高级基础——反射
Java 高级基础--反射 反射的意义:Java 强类型语言,但是我们在运行时有了解.修改信息的需求,包括类信息.成员信息以及数组信息. 基本类型与引用类型 基本类型,(固定的 8 种) 整数:byt ...
- java高级特性增强
第4天 java高级特性增强 今天内容安排: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 .1. java多线程基本知识 . ...
随机推荐
- 追踪分布式Memcached默认的一致性hash算法
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- [办公应用]从美国带回来的兄弟牌brother打印机如何处理
周末帮朋友去调一台国外带回来的brother一体机,型号MFC-J630W.这是她单位老板从国外带回来的,说是便宜:不过她说只有英文说明书,她不太会操作.我想这还不容易么,就满口答应下来了.我先到br ...
- setTimeout不可靠的修正办法及clearTimeout
javascript里的这两个定时器函数,大家一定耳熟能详: setTimeout("函数()",毫秒)就是开启一个计时器,指定毫秒后执行该函数一次. 有关定时器,javascri ...
- 搭建nodejs服务,访问本地站点文件
搭建nodejs服务器步骤: 1.安装nodejs服务(从官网下载安装) 2.在自己定义的目录下新建服务器文件如 server.js 例如,我在E:\PhpProject\html5\websocke ...
- LeetCode 1.两数之和(JS)
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- mongodb05---游标
游标cursor: 通俗的说,游标不是查询结果,而是查询的返回资源,或者接口. 通过这个接口,你可以逐条读取.就像php中的fopen打开文件,得到一个资源一样, 通过资源,可以一行一行的读文件. v ...
- 用dpkg命令制作deb包方法总结
用dpkg命令制作deb包方法总结 如何制作Deb包和相应的软件仓库,其实这个很简单.这里推荐使用dpkg来进行deb包的创建.编辑和制作. 首先了解一下deb包的文件结构: deb 软件包里面的结构 ...
- AngularJS 指令(Directives)实践指南
指令(Directives)是所有AngularJS应用最重要的部分.尽管AngularJS已经提供了非常丰富的指令,但还是经常需要创建应用特定的指令.这篇教程会为你讲述如何自定义指令,以及介绍如何在 ...
- JFreeChart生成饼形图(3) (转自 JSP开发技术大全)
JFreeChart生成饼形图(3) (转自 JSP开发技术大全) 14.3 利用JFreeChart生成饼形图 通过JFreeChart插件,即可以生成普通效果的饼形图,也可以生成3D效果的饼形图: ...
- iOS7 push/pop转场动画
前言 iOS 7之后,苹果提供了自定义转场动画的API,我们可以自己去定义任意动画效果.本篇为笔者学习push.pop自定义转场效果的笔记,如何有任何不正确或者有指导意见的,请在评论中留下您的宝贵意见 ...
枚举反射泛型注解.html