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反射常用示例的更多相关文章

  1. Java反射常用API汇总

    “JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性” 一.类对象的获取 1.通过对象获取 Object obj = ne ...

  2. java反射常用类

    测试实体类 public class TestClass { public String classInfo; public String getClassInfo() { return classI ...

  3. JAVA反射机制示例,读取excel数据映射到JAVA对象中

    import java.beans.PropertyDescriptor; import java.io.File; import java.io.FileInputStream; import ja ...

  4. Java反射机制示例

    链接: http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html package com.stono.reftest; imp ...

  5. Java反射01 : 概念、入门示例、用途及注意事项

    1.Java反射定义 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79360452 官方定义如下: Reflection enabl ...

  6. Java反射-中级知识掌握

    PS:本文就Java反射常用的中级知识做下汇总和分析/cnxieyang@163.com/xieyang@e6yun.com

  7. Java反射详解及应用示例

    反射是Java中最重要的内容之一,了解反射原理对我们学习各种框架具有很大的帮助 反射的原理: 反射应用示例: import java.lang.reflect.Constructor; import ...

  8. Java 反射机制(包括组成、结构、示例说明等内容)

    第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象” ...

  9. [转载]Java 反射机制(包括组成、结构、示例说明等内容)

    FROM:http://www.cnblogs.com/skywang12345/p/3345205.html 第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们 ...

随机推荐

  1. 2015 AlBaath Collegiate Programming Contest(2月14日训练赛)

    A (By ggg): 题意:一个人还有x秒到红绿灯,这个红绿灯有g秒绿灯,y秒黄 灯,r秒红灯,问你到红绿灯的时候是什么灯.值得注意的是绿 灯变黄灯时,第g秒是黄灯了. B (By Anxdada) ...

  2. Linux-RedHat7.2 使用CentOS源

    -- 查看yum rpm -qa |grep yum --卸载yum rpm -qa | grep yum | xargs rpm -e --nodeps --拷贝centos系统yum工具安装程序到 ...

  3. Activiti6简明教程

    一.为什么选择Activiti 工作流引擎对比 二.核心7大接口.28张表 7大接口 (一)7大接口 RepositoryService:提供一系列管理流程部署和流程定义的API. RuntimeSe ...

  4. QT+lambda 表达式

    #include "mainwidget.h" #include <QPushButton> #include <QDebug> MainWidget::M ...

  5. 最短路 || HDU 2066 一个人的旅行

    本草的旅行故事(✺ω✺),可以从S个点中的任意一个开始,到达D个点中的任意一个,求最短路 *解法:把草儿的家记成点0,S个点与0的距离为0,然后spfa求最短路 又是改了一万次,①多组数据啊 ②改完多 ...

  6. PHP03 移动互联网和PHP

    学习要点 移动互联网 云计算 网络通信协议 Apache http服务器 PHP运行原理 学习目标 理解网络通信协议 掌握PHP运行原理 WAMP开发环境的搭建   移动互联网 定义 移动互联网,就是 ...

  7. Java编程:常见问题汇总

    每天在写Java程序,其实里面有一些细节大家可能没怎么注意,这不,有人总结了一个我们编程中常见的问题.虽然一般没有什么大问题,但是最好别这样做. AD: 每天在写Java程序,其实里面有一些细节大家可 ...

  8. ios之AFN

    https://github.com/AFNetworking/AFNetworking 与asi-http-request功能类似的网络库,不过是基于NSURLConnection 和 NSOper ...

  9. 2011 luogu P1311 选择客栈

    题目描述 丽江河边有 nn 家很有特色的客栈,客栈按照其位置顺序从 1 到 n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖 ...

  10. noip2019——动态规划刷题历程

    加粗的是值得总结的 从洛谷的普及题开始刷题: 背包式dp(有些技巧的) 1.p2639[USACO09OCT]Bessie的体重问题 -p1049取模意义下01背包 技巧:重量=价值 2.金明的预算问 ...