黑马程序员:反射

 

反射的基石————Class类

 

得到各个字节码对应的实例对象

1、类名.class

2、对象.getClass()

3、Class.forName(“类名”)

class  Demo
{
	public static void main(String[] args) throw Exception
	{
		String s1="abd";

		Class cls1=s1.getClass();

		Class cls2=String.class;

		Class cls3=Class.forName("java.lang.String");

		//注意:三种方法都是同一份字节码
	}
}


 

反射————把java类中的各种成分映射成相应的java类

 

Constructor类

 

得到某个类所有的构造方法

————Constructor[] constructor = Class.forName("java.lang.String"),getConstrutors

 

创建实例对象

————通常方法:String str=new String(new StringBuffer("abc"));

————反射方法:String str=(String)constructor.newInstance(new StringBuffer("abc"));

调用获得的方法时要用到上面相同类型的实例对象

 

Field类————代表某一个类中的一个成员变量

 


 Constructor constructor1 = String.class.getConstructor(StringBuffer.class);

 String str2=(String)constructor1.newInstance(new StringBuffer("abc"));

 System.out.println(str2.charAt(2));





public class ReflectPoint//建立反射点
{
	private int x;
	public int y;
	public String str1="ball";
	public String str2="basketball";
	public String str2="itcast";

	public void Reflectpoint(int x, int y)
	{
	  super();
	  this.x=x;
	  this.y=y;
	}

	public String toString(){
	  return str1+":"+str2+":"+str3;
	}
}




ReflectPoint pt1=new ReflectPoint(3,5);//赋值

Field fieldY = pt1.getClass().getField("y");//y在pt1中的字节码,y为一个变量

fieldY.get(pt1)//y对应在pt1对象中的值

Field fieldX = pt1.getClass().getDeclaredField("x");//因为x为私有的不能getField

fieldX.setAccessible(true);//暴力反射

fieldX.get(pt1);




//把字符串中的“b‘转换成”a“

private static void changeStringValue(Object obj)throw Exception
{
  Field[] field = obj.getClass().getField();

  for(Field field : fields)
	{
     // if(field.getType().equals(String.class))
	 if(field.getType() == String.class)//同一份字节码
		{
	       String oldValue=(String)field.get(obj);
		   String newValue=oldValue.replace('b','a');
		   field.set(obj,newValue);
	 }
  }
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值