Java反射常用示例
package xmq.study.reflection; import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier; /***
* Java 反射
* @author 943567518@qq.com
*
*/
public class Test1 { private String prop1;
private Integer prop2;
private Double prop3; public String getProp1() {
return prop1;
}
public void setProp1(String prop1) {
this.prop1 = prop1;
}
public Integer getProp2() {
return prop2;
}
public void setProp2(Integer prop2) {
this.prop2 = prop2;
}
public Double getProp3() {
return prop3;
}
public void setProp3(Double prop3) {
this.prop3 = prop3;
}
public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException {
Test1 test1=new Test1();
test1.setProp1("Hello");
test1.setProp2(100);
Class clazz=Test1.class;//获取Class对象方式1
Class clazz2=Class.forName("xmq.study.reflection.Test1");//获取Class对象方式2
String clazzName=clazz.getName();//获取类名,含包名
String clazzSimpleName=clazz.getSimpleName();//获取类名,不含包名
System.out.println("getName:"+clazzName+"\tgetSimpleName:"+clazzSimpleName);
int mod=clazz.getModifiers();//获取类修饰符
System.out.println("Modifier.isPublic:"+Modifier.isPublic(mod));//判断类修饰符
System.out.println("Modifier.isProtected:"+Modifier.isProtected(mod));//判断类修饰符
Package p=clazz.getPackage();//获取包
System.out.println("getPackage:"+p);
Class superClass=clazz.getSuperclass();//获取父类
System.out.println("getSuperclass:"+superClass);
Class[] interfaces=clazz.getInterfaces();//获取实现接口
System.out.println("getInterfaces:"+interfaces.length);
Constructor[] cons=clazz.getConstructors();//构造方法
System.out.println("getConstructors:"+cons.length);
Method[] methods=clazz.getMethods();//获取所有方法
System.out.println("getMethods:"+methods.length);
for(Method method:methods){
System.out.println("method.getName:"+method);
}
Method[] methods=clazz.getMethods();//获取私有方法
System.out.println("getMethods:"+methods.length);
for(Method method:methods){
System.out.println("method.getName:"+method.getName());
}
Method method=clazz.getMethod("getProp1", null);//获取指定方法
System.out.println("getMethod(,):"+method);
Object methodVlaue=method.invoke(test1, null);//调用方法
System.out.println("method.invoke(,):"+methodVlaue);
Method method3=clazz.getMethod("setProp3",Double.class);//获取指定方法
System.out.println("getMethod(,):"+method3);
Object methodVlaue3=method3.invoke(test1, 2.0);//调用setter方法,该方法没有返回值,所以methodVlaue3为null;此处注意参数2.0 ,不能用null
System.out.println("method.invoke(,):"+methodVlaue3);
Field[] fields=clazz.getDeclaredFields();//获取变量
System.out.println("getDeclaredFields:"+fields.length);
for(Field field:fields){
field.setAccessible(true);
field.set(test1,null);//设置字段的值
System.out.println("field.getAnnotations:"+field.getAnnotations().length+"\tfield.getName:"+field.getName()+"\tfield.get:"+field.get(test1));//获取实例属性名和值
}
Annotation[] annos=clazz.getAnnotations();//获取类注解
System.out.println("getAnnotations:"+annos.length);
}
}
控制台输出:
getName:xmq.study.reflection.Test1 getSimpleName:Test1
Modifier.isPublic:true
Modifier.isProtected:false
getPackage:package xmq.study.reflection
getSuperclass:class java.lang.Object
getInterfaces:0
getConstructors:1
getMethods:16
method.getName:public static void xmq.study.reflection.Test1.main(java.lang.String[]) throws java.lang.ClassNotFoundException,java.lang.IllegalArgumentException,java.lang.IllegalAccessException,java.lang.NoSuchMethodException,java.lang.SecurityException,java.lang.reflect.InvocationTargetException
method.getName:public java.lang.String xmq.study.reflection.Test1.getProp1()
method.getName:public void xmq.study.reflection.Test1.setProp1(java.lang.String)
method.getName:public java.lang.Integer xmq.study.reflection.Test1.getProp2()
method.getName:public void xmq.study.reflection.Test1.setProp2(java.lang.Integer)
method.getName:public java.lang.Double xmq.study.reflection.Test1.getProp3()
method.getName:public void xmq.study.reflection.Test1.setProp3(java.lang.Double)
method.getName:public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
method.getName:public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
method.getName:public final void java.lang.Object.wait() throws java.lang.InterruptedException
method.getName:public boolean java.lang.Object.equals(java.lang.Object)
method.getName:public java.lang.String java.lang.Object.toString()
method.getName:public native int java.lang.Object.hashCode()
method.getName:public final native java.lang.Class java.lang.Object.getClass()
method.getName:public final native void java.lang.Object.notify()
method.getName:public final native void java.lang.Object.notifyAll()
getDeclaredMethods:7
method.getName:public static void xmq.study.reflection.Test1.main(java.lang.String[]) throws java.lang.ClassNotFoundException,java.lang.IllegalArgumentException,java.lang.IllegalAccessException,java.lang.NoSuchMethodException,java.lang.SecurityException,java.lang.reflect.InvocationTargetException
method.getName:public java.lang.String xmq.study.reflection.Test1.getProp1()
method.getName:public void xmq.study.reflection.Test1.setProp1(java.lang.String)
method.getName:public java.lang.Integer xmq.study.reflection.Test1.getProp2()
method.getName:public void xmq.study.reflection.Test1.setProp2(java.lang.Integer)
method.getName:public java.lang.Double xmq.study.reflection.Test1.getProp3()
method.getName:public void xmq.study.reflection.Test1.setProp3(java.lang.Double)
getMethod(,):public java.lang.String xmq.study.reflection.Test1.getProp1()
method.invoke(,):Hello
getMethod(,):public void xmq.study.reflection.Test1.setProp3(java.lang.Double)
method.invoke(,):null
getDeclaredFields:3
field.getAnnotations:0 field.getName:prop1 field.get:null
field.getAnnotations:0 field.getName:prop2 field.get:null
field.getAnnotations:0 field.getName:prop3 field.get:null
getAnnotations:0
Java反射常用示例的更多相关文章
- Java反射常用API汇总
“JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性” 一.类对象的获取 1.通过对象获取 Object obj = ne ...
- java反射常用类
测试实体类 public class TestClass { public String classInfo; public String getClassInfo() { return classI ...
- JAVA反射机制示例,读取excel数据映射到JAVA对象中
import java.beans.PropertyDescriptor; import java.io.File; import java.io.FileInputStream; import ja ...
- Java反射机制示例
链接: http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html package com.stono.reftest; imp ...
- Java反射01 : 概念、入门示例、用途及注意事项
1.Java反射定义 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79360452 官方定义如下: Reflection enabl ...
- Java反射-中级知识掌握
PS:本文就Java反射常用的中级知识做下汇总和分析/cnxieyang@163.com/xieyang@e6yun.com
- Java反射详解及应用示例
反射是Java中最重要的内容之一,了解反射原理对我们学习各种框架具有很大的帮助 反射的原理: 反射应用示例: import java.lang.reflect.Constructor; import ...
- Java 反射机制(包括组成、结构、示例说明等内容)
第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象” ...
- [转载]Java 反射机制(包括组成、结构、示例说明等内容)
FROM:http://www.cnblogs.com/skywang12345/p/3345205.html 第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们 ...
随机推荐
- MongoDB最简单的入门教程之二 使用nodejs访问MongoDB
在前一篇教程 MongoDB最简单的入门教程之一 环境搭建 里,我们已经完成了MongoDB的环境搭建. 在localhost:27017的服务器上,在数据库admin下面创建了一个名为person的 ...
- liunx防火墙的基本操作
centos7中的使用 CentOS 7.0默认使用的是firewall作为防火墙 查看防火墙状态------->firewall-cmd --state 停止firewall-------&g ...
- QT+信号和槽函数_自定义槽函数_一个信号对应多个槽函数
以下的代码里面有自定义槽函数的内容,同时也有信号实现的函数: #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #i ...
- QT_5_ Qt中信号和槽 + 自定义信号和槽 + lambda 表达式
1.Qt中信号和槽 1.1 需求:点击按钮关闭窗口 1.2 利用connect进行链接 1.3 参数1 信号发送者(指针) 参数2 发送的信号(信号地址) 参数3 信号的接受者(指针) 参数4 处理槽 ...
- MySQL-04 高级特性
学习要点 MySQL系统函数 MySQL视图 MySQL存储过程 MySQL自定义函数 MySQL触发器 MySQL事务 MySQL事件 MySQL系统函数 数学函数 获取整数的函数:CEIL(x). ...
- OpenCV2:第三章 读取图像
一.简介 将图像文件读入内存,可以用cv::imread()函数 二.读取图像 Mat imread(const string& filename,int flags=1); Mat: 如果读 ...
- Java中的代理--proxy
讲到代理,好像在之前的springMVC,还是spring中或者是hibernate中学习过,并没有特别在意,这次好好理解一下.(原来是在spring中的AOP,面向切面 Aspect Oriente ...
- windows cmd 模仿电影黑客
1.win+R 2.输入cmd 3.按F11进入全屏 4.color a 改变颜色为绿色(可能看起来秀一点) 5.dir/s 查看所有文件,就跑起来了,看起来很酷,但是在懂得人眼里,没什么的(所以只能 ...
- bzoj 1098 [POI2007] 办公楼 biu
# 解题思路 画画图可以发现,只要是两个点之间没有相互连边,那么就必须将这两个人安排到同一个办公楼内,如图所示: 那,我们可以建立补图,就是先建一张完全图,然后把题目中给出的边都删掉,这就是一张补图, ...
- 【MySQL】索引和锁
前言 本文摘自数据库两大神器[索引和锁] 声明:如果没有说明具体的数据库和存储引擎,默认指的是MySQL中的InnoDB存储引擎 索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度 表 ...