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多线程基本知识 . ...
随机推荐
- 【Mongodb教程 第八课 】MongoDB 更新文档
MongoDB的 update() 和 save() 方法用于更新文档的集合. update()方法更新现有的文档值,而替换现有的文档通过的文件中 save() 方法. MongoDB Update( ...
- Saltstack运行cmd.run重新启动tomcat后出现日志乱码(15)
Saltstack使用的cmd.run调用的是核心模块cmdmod.py,以下我们来看一下cmdmod.py模块的源代码: cat /usr/lib/python2.6/site-packages/s ...
- Centos 6.4 实际工作环境搭建(LNMP)
基本配置 服务器IP设置.编辑网卡配置文件,命令: vi /etc/sysconfig/network-scripts/ifcfg-eth0 注:ifcfg-eth0参数 TYPE=Ethernet ...
- Eclipse:Some sites could not be found. See the error log for more detail.解决的方法
今天遇到了一个奇葩的问题.我把我的sdk tools的版本号升级到23后.我在eclipse中尝试升级ADT,发现了这么一个问题,以下分析下原因: 当我在eclipse中选择Help-->Che ...
- C语言 字符串操作 笔记
/* C语言字符串的操作笔记 使用代码和注释结合方式记录 */ # include <stdio.h> # include <string.h> int main(void) ...
- Xcode6 设置LaunchImage图标
最近设置LaunchImage图标时发现怎么都没有效果,后来发现是Xcode6中新建项目的时候会默认添加一个LaunchScreen.xib的文件,我们启动程序的时候也会发现,加载的时LaunchSc ...
- jQuery 1.x and 2.x , which is better?
1. jQuery 1.x和2.x的区别 或者可以说是jQuery 2.x有什么新特征? jQuery官方发布2.x原话 不再支持IE6/7/8,如果在IE9/10里只用“兼容性视图”模式也将会受到影 ...
- javaScript查找HTML元素
1.通过id查找 例:查找id="intro"元素 var x=document.getElementById("intro"); 2.通过标签名查找 例:查找 ...
- mysql workbench快捷键
注释/取消注释, ctrl+/ 暂时不知道怎么设置(原配置是 ctrl+divide)格式化sql语句(美化sql语句), ctrl+b
- UVALive3989 Ladies' Choice —— 稳定婚姻问题 Gale - Shapely算法
题目链接:https://vjudge.net/problem/UVALive-3989 题解: 题意:有n个男生和n个女生.每个女生对男神都有个好感度排行,同时每个男生对每个女生也有一个好感度排行. ...
枚举反射泛型注解.html