Java 反射机制学习(一)

来源:互联网 发布:联系淘宝客服 编辑:程序博客网 时间:2024/05/16 11:00

定义:在运行过程状态中,对于任意一个类,都能够知道这个类所有属性和方法;任意的一个类,可以调用它的方法;

应用: Spring 框架 IOC(控制反转);Hibernate 关联映射;白盒测试

反射API:java.lang: Class<T>:表示一个正在运行的java应用程序的类和接口 ,是Reflection的起源



package TestPacageX;public class ReflectTest {public static void main(String[] args){ Class<?> c1=null; Class<?> c2=null; Class<?> c3=null; Class<?> c4=null;//方式一:使用对象的getClass()Person p=new Person("test",100);c1=p.getClass();System.out.println(c1.getName());    //方式二: static method Class.forName() 最常使用try{c2=Class.forName("TestPacageX.Person");}catch(Exception e){e.printStackTrace();}    // 方式三:使用。class语法c3=Person.class;//方式四:如果是机JAVA封装类,使用Type语法c4 = Integer.TYPE;System.out.println(c2.getName());System.out.println(c3.getName());System.out.println(c4.getName());}}class Person{private String name;private int age;public Person(){}     public Person(String name, int age){     this.name=name;     this.age=age;     System.out.println(name);     System.out.println(age);}     public Person(String name){     this.name=name;     System.out.println(name);}     public Person(int age){     this.age=age;     System.out.println(age);}    }
<pre name="code" class="html">test100TestPacageX.PersonTestPacageX.PersonTestPacageX.Personint

package TestPacageX;import java.lang.reflect.Constructor;public class ReflectTest {public static void main(String[] args){// 获得所有的公有的构造方法try{Class<?> c =Class.forName("TestPacageX.Person");System.out.println("指定参数类型所有的公有的构造方法");Constructor[] constructors1=c.getConstructors();for(int i=0;i<constructors1.length;i++)System.out.println(constructors1[i].toGenericString());//获得特定参数类型的公有构造方法System.out.println("指定参数类型的公有的构造方法");try{Constructor constructors2=c.getConstructor(new Class[]{String.class,int.class});System.out.println(constructors2.toGenericString());}catch(Exception e){e.printStackTrace();}//获得特定参数类型的构造方法System.out.println("指定参数类型的构造方法");try{Constructor constructors3=c.getDeclaredConstructor(new Class[]{String.class,int.class});System.out.println(constructors3.toGenericString());}catch(Exception e){e.printStackTrace();}// 获得所有的构造方法System.out.println("获得所有的构造方法");Constructor[] constructors4=c.getDeclaredConstructors();for(int i=0;i<constructors4.length;i++)System.out.println(constructors4[i].toGenericString());}catch(ClassNotFoundException e){e.printStackTrace();} }}class Person{private String name;private int age;public Person(){}     public Person(String name, int age){     this.name=name;     this.age=age;     System.out.println(name);     System.out.println(age);}     private Person(String name){     this.name=name;     System.out.println(name);}     public Person(int age){     this.age=age;     System.out.println(age);}    }
指定参数类型所有的公有的构造方法public TestPacageX.Person(int)public TestPacageX.Person(java.lang.String,int)public TestPacageX.Person()指定参数类型的公有的构造方法public TestPacageX.Person(java.lang.String,int)指定参数类型的构造方法public TestPacageX.Person(java.lang.String,int)获得所有的构造方法public TestPacageX.Person(int)private TestPacageX.Person(java.lang.String)public TestPacageX.Person(java.lang.String,int)public TestPacageX.Person()






0 0