【Java-Reflection】Class以及反射成员变量和方法
来源:互联网 发布:mysql strcmp 编辑:程序博客网 时间:2024/04/30 15:29
一、获取Class对象
获取Class对象有两种方法:1. ClassName.class 2. Class.forName(className); className是全名,包括包名。
package com.yjb.example;public class ReflectionDemo {public static void main(String[] args){ <span style="white-space:pre"></span>//Class myClass = MyObject.class;//或者通过类的全名获取classClass mainClass = Class.forName("com.yjb.example.ReflectionDemo");//get inner classClass innerClass = Class.forName("com.yjb.example.MyObject"); }}<p class="p1"><pre name="code" class="java">class MyObject{public int publicint =0;private int privateint =0;public MyObject(){}public MyObject(int i){privateint = i;System.out.println("con-->"+i);}public int publicMethod(){return 0;}public String publicMethod(String s){return s;}private String privateMethod(){return "this is private method";}}
<span style="white-space:pre"></span>//获取Class名字(不包含包名)<span style="white-space:pre"></span>System.out.println("SimpleName:"+innerClass.getSimpleName());<span style="white-space:pre"></span>//获取Class全名(包括包名)<span style="white-space:pre"></span>System.out.println("Name:"+innerClass.getName());<span style="white-space:pre"></span>//获取Class的修饰符,返回的是一个int类型,可以通过isXXXX判断内容<span style="white-space:pre"></span>int modifier = mainClass.getModifiers();<span style="white-space:pre"></span>System.out.println(modifier);<span style="white-space:pre"></span>System.out.println(Modifier.isPublic(modifier));
二、获取构造器
//获取指定参数的构造器,设置指定参数用 new Class[]{String.class,int.class.....}后面也会用到Constructor con = innerClass.getConstructor(new Class[]{int.class});//获取所有的构造器Constructor[]cons = innerClass.getConstructors();for(Constructor c:cons){//获取每个构造器的参数System.out.println(c.getParameterTypes());}//通过构造器实例化对象,注意得转型MyObject myObject = (MyObject)con.newInstance(1);
三、获取变量field
//获取所有的public成员变量Field[] fields = innerClass.getFields();for(Field f:fields){//获取变量的名字System.out.println(f.getName());}//获取指定名字的成员变量(也必须是public)Field field = innerClass.getField("publicint");MyObject myObject2 = new MyObject();myObject2.publicint=1;//通过get()获取指定对象实例的成员变量数值System.out.println(field.get(myObject2));//通过set()设置对象的变量field.set(myObject2, 2);//再次读取,已被修改System.out.println(field.get(myObject2));
四、获取方法method
//get all methods include privateMethod[] methods = innerClass.getDeclaredMethods();//get all public methodsMethod[] ms = innerClass.getMethods();//get method by name and paramsMethod m1 = innerClass.getMethod("publicMethod", new Class[]{String.class});System.out.println(m1);Method m2 = innerClass.getMethod("publicMethod", null);System.out.println(m2);//获取method的参数Class[] paramsTypes = m1.getParameterTypes();for(Class c : paramsTypes)System.out.println(c);//获取method的返回类型Class returnTypes = m2.getReturnType();System.out.println(returnTypes);//run the methodObject returnValue = m1.invoke(myObject, "this is my invoke");System.out.println(returnValue);
五、private field和method
<pre name="code" class="java"><span style="white-space:pre"></span>/*
<span style="white-space:pre"></span>*注:所有的getMethod getField 都只能获取public,想获取private得用getDeclaredField和getDeclaredMethod
*在调用field.get以及method.invoke之前,要setAccessible(true)*///reflect private filedMyObject myObject3 = new MyObject(99);Field myPrivateField = myObject3.getClass().getDeclaredField("privateint");//set accessablemyPrivateField.setAccessible(true);System.out.println("private_field:"+myPrivateField.get(myObject3));//reflect private methodMethod PrivateMethod = MyObject.class.getDeclaredMethod("privateMethod", null);PrivateMethod.setAccessible(true);System.out.println(PrivateMethod.invoke(new MyObject(), null));
0 0
- 【Java-Reflection】Class以及反射成员变量和方法
- Java Reflection 教程(7):类私有成员变量和方法
- Java反射---Class对象,获得类的方法、成员变量和构造函数信息
- 反射(成员方法和成员变量)
- 【Java】java使用反射访问对象方法和成员变量
- Java通过反射访问私有成员变量和私有方法
- 通过Java反射机制获取对象、方法和成员变量
- JAVA之通过反射遍历JavaBean成员变量和方法
- Reflection—Java反射机制综述和Class
- Java 反射:Class类,动态加载类获取方法和成员变量构造信息,方法反射的基本操作,集合泛型的本质
- Java 类的成员变量和方法以及构造方法
- java反射学习笔记(3)---使用Class来获取方法、成员变量、构造函数信息
- Java利用反射操作成员变量,方法
- java反射2-获取构造方法、成员变量、成员方法
- java 反射机制 笔记 reflection .class
- Class类和Reflection,反射API
- 使用java反射操作类的构造函数,成员变量和成员方法
- Java Reflection 教程(4):Fields 成员变量
- POJ 2195(二分图最大权匹配)
- 单线程多线程、并行和并发
- [解决]Spark集群HA无法正常启动的问题
- Redhat Linux DHCP服务器的安装:
- Mac Homebrew 使用
- 【Java-Reflection】Class以及反射成员变量和方法
- apr
- MAC 系统下的快捷键 和 终端下的文件目录操作
- TextInput失去焦点时, 键盘不消失
- jquery方法focusin/focusout的使用
- Windows简易静态库制作方式
- 装饰者模式
- android FM手动调频流程
- margin-top 失效的问题