黑马程序员_反射总结

这篇博客主要介绍了Java反射机制,包括映射Java类、类的实例化、函数的获取与调用、字段的获取与设置、内部类等内容。还提到了在不同JDK版本下Arrays.asList()方法对不同类型数组的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



------- android培训java培训、期待与您交流!---------

反射概述:

反射就是把java类中的各种成分映射成相应的java类。 相对于类抽象实例,反射机制抽象的是类、类的方法、类的变量。


一、映射java类

  String str1 = "abc";
  Class cls1 = str1.getClass();
  Class cls2 = String.class;
  Class cls3 = Class.forName("java.lang.String");
  Class type = array.getClass().getComponentType();//获取数组元素的类型


</pre><pre>

二、类的实例化

	Class clazz=Class.forName("MyClass");
        Object mMyClass=class.getConstructor(arg.class).newInstance(arg.class);//有参数构造函数
        Object mMyClass=class.newInstance();//用无参数构造函数初始化


三、函数的获取与调用

	Class clazz=String.class;
	Object mInstance=clazz.getConstructor(String.class).newInstance("abc");
	Method m=clazz.getMethod("charAt",int.class);//获取指定的public方法
	Method m=clazz.getDeclareMethod("charAt",int.class);//获取指定私有的方法
	Method[] mArray=clazz.getMethods();//获取所有public方法
	Method[] mArray=clazz.getDeclareMethods();//获取所有方法
/*-----------------------------方法的调用-------------------------*/
	int i=1;
	m.setAccessible(true);//私有方法调用前要设置可见性
	m.invoke(mInstance,i);//等效于mInstance.charAt(i);
	m.invoke(mInstance,(Object)new String[]{"abc","123"});//如果编译器兼用1.4jdk, 对于传递数组要转型为Object.

四、获取与设置字段

		Field[] f=clazz.getDeclaredFields();
		f[0].setAccessible(true);//设置可读私有字段
		f[0].get(mInstance);//读出mInstance的第一个字段的值
		f[0].set(mInstance, 'd');//设置mInstance的第一个字段的值


五、内部类

	Class clazz=Class.forName("OuterClass");
        Class classes[]=clazz.getDeclaredClasses();  
        for (Class c:classes){ //对成员内部类进行反射   
            int  i=c.getModifiers();  
            String s=Modifier.toString(i);  
            if (s.contains( "static" )) //静态内部类的处理   
                 c.getConstructor().newInstance();  
            else //实例内部类的处理   
                 c.getConstructor(ric.getClass()).newInstance(ric);  
        }  

      //由于匿名内部类没有构建器,因此无法创建实例,也无法直接访问其中的方法,但可以通过下面的方式巧秒的执行其中的方法或成员变量。   

        Runnable r=(Runnable)(clazz.getField("ta" ).get(ric));  
        r.run();

六、etc

对于String[]         Arrays.asList(Object[] obj) 1.4jdk      会返回只含有包含几个元素的List对象

对于int[]               Arrays.asList(<T> ....arg) 1.5jdk        会返回只含一个int[]元素的List对象


------- android培训java培训、期待与您交流!---------




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值