java反射

    java.lang.Class是java反射的中心。Class(Boolean)表示布尔类的类对象,Class<?>表示其类未知的类类型。Class<Test> t = Test.Class。Object类中有getClass()方法返回引用类对象的类对象。

    Class中的方法:getSimpleName()获取简单的类名;getModifiers()返回类的所有修饰符;getSuperclass()方法获取超类的名称,Object调用getSuperclass()返回null。

反射:
     1.获取对应的Class对象
方式1:★
Class clazz=Class.forName("全限定名"); //类加载到内存中,形成字节码对象
方式2:
Class clazz=类名.class;
方式3:
Class clazz==对象.getClass();
2.通过class对象创建一个实例对象(相当于  new 类())
Object clazz.newInstance();
例如: TestClass a = clazz.newInstance(); //通过字节码对象,创建一个实例对象(相当于调用空参的构造器)
a.方法名();
这个方法等价于 TestClass a =new TestClass(); a.方法名();
3.通过class对象获取一个方法(public修饰的)
Method method=clazz.getMethod("方法名",Class .... paramType这是可变参数); //这里clazz是字节码对象
paramType为参数的类型
例如: Method method=clazz.getMethod("add",int.class,Sting.class);
4.让方法执行:
method.invoke(Object 实例对象a,Object ... 参数);
Object 实例对象:以前调用方法的对象 就是a
Object ... 参数:该方法运行时需要的参数 就是 10和30
执行这个方法 相当于
a.add(10,30);
例如:

method.invoke(a,10,30) //这里“a”是实例对象

package com.itheima.reflect;
import java.lang.reflect.Method;
import org.junit.Test;
import com.itheima.HelloMyServlet;

public class Demo {
	@Test
	public void f1(){
		//调用helloMyServlet中的方法
		HelloMyServlet a = new HelloMyServlet();
		a.add();
		a.add(10, 20);
	}
	
	@Test
	public void f2() throws Exception{
		Class clazz = Class.forName("com.itheima.HelloMyServlet");
		
		//通过字节码对象创建一个实例对象(相当于调用空参的构造器)
		HelloMyServlet a =(HelloMyServlet) clazz.newInstance();
		
		a.add();
	}
	
	@Test
	//调用空参的add方法
	public void f3() throws Exception{
		Class clazz = Class.forName("com.itheima.HelloMyServlet");
		
		//通过字节码对象创建一个实例对象(相当于调用空参的构造器)
		HelloMyServlet a =(HelloMyServlet) clazz.newInstance();
		
		//获取方法对象
		Method method = clazz.getMethod("add");
		
		//让方法对象执行   obj调用这个方法的实例,相当于a  ,args是该方法执行时候所需要的参数   a.add()
		method.invoke(a);//相当于 a.add()
	}
	
	@Test
	//调用有两个参数的add方法
	public void f4()throws Exception{
		//获取class对象
		//Class clazz = Class.forName("com.itheima.HelloMyServlet");
		Class clazz=HelloMyServlet.class;
		
		//通过clazz对象创建一个实例
		HelloMyServlet a =(HelloMyServlet) clazz.newInstance();
		
		//获取有两个参数的add方法
		Method m = clazz.getMethod("add",int.class,int.class);
		
		//执行方法
		m.invoke(a, 10,30);//相当于 a.add(10,30);	
	}
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值