Java 反射机制学习(一)

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

应用: 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()






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值