您的位置:首页 > 编程语言 > Java开发

Java 反射机制学习(一)

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

应用: 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">test
100
TestPacageX.Person
TestPacageX.Person
TestPacageX.Person
int



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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: