黑马程序员_技术加强之反射
来源:互联网 发布:信达软件下载 编辑:程序博客网 时间:2024/05/20 19:17
------ android培训
java中各个java类属于一类事物,各个java类都有自己的方法、属性、所属的包、类名等。
我们用Class类来描述这一类事物。
Class类的对象就是一个类在内存中所对应的字节码,表示的是一个类
九个预定义Class实例对象
boolean,byte,char,short,long,int,float,double和void :void.class;
反射就是把java类中的各种成分映射成相应的java类。//reflect
import java.lang.*;
class Person
{
Person(){}
public String name;
public int age;
}
class fanshe1
{
public static void main(String[] args) throws Exception
{
Person p=new Person();
p.getClass();//获取对象所在位置的字节码
Class c=Class.forName("Person");
//返回与带有给定字符串名的类或接口相关联的 Class 对象(Class的对象即是类)。
//确定此对象所表示的类或者接口所实现的接口
Class[] d=p.getClass().getInterfaces();
Class[] e=c.getInterfaces();
System.out.println(p.getClass());
System.out.println(c);
System.out.println(Person.class);
String a=c.getName();
//getName()以String的形式放回该Class对象所对应的实体(类、接口、数组类、基本类型和void)名称
String s1=new String();
Class c1=s1.getClass();//获取String类在内存中的字节码;类在内存中以字节码的形式存储
Class c2=String.class;
Class c3=Class.forName("java.lang.String");
sop(c1==c2);
sop(c1==c3);//true :一个类型在类中只有一个字节码
sop(c1.isPrimitive());//是否是基本数据类型 false //String 是一个类
sop(int.class.isPrimitive());//true
sop(int.class==Integer.class);//false,Integer是int的包装类,各有各的字节码
sop(int.class==Integer.TYPE);//true,包装类.Type用于获取包装类的基本类型字节码
sop(int[].class.isPrimitive());//false:只要在源程序中出现的数据类型,都有各自各Class实例对象
sop(int[].class.isArray());//true
//构造方法:用反射实现:String s=new String(new StringBuffer("abc"));
//Constructor con1=String.class.getConstructor(StringBuffer.class);
//String str1=(String)con1.newInstance(new StringBuffer("abc"));//返回的类型是Object,需要强制类型转换(由高到低)
//sop(str1.charAt(2));
//成员变量(字段)Field
fieldTest f=new fieldTest("3",5);
Field field=f.getClass().getField("b");
//Object obj=field.get(f);
Field field2=f.getClass().getDeclaredField("a");//获取声明的字段(包含私有)
field2.setAccessible(true);//声明允许访问私有
sop(field.get(f));
sop(field2.get(f));
//Method str1.charAt(1);
Method me=String.class().getMethod("charAt",int.class);//方法名:哪一个构造方法
System.out.println(me.invoke(str1,1));//"abc" 输出b
replaceTest(f);
}
public static void replaceTest(Object obj)
{
Field[] fie=obj.getClass().getFields();//获取所以字段
for(int i=0;i<fie.length;i++)
{
if(fie[i].getType()==String.class)
{
String oldValue=(String)fie[i].get(obj);
String newValue=oldValue.replace('b','a');
fie[i].set(obj,newValue);
}
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class fieldTest
{
private String a;
public int b;
public String str1="aabcde";
public String Str2="bbaa";
public fieldTest(String a,int b)
{
this.a=a;
this.b=b;
}
public String toString()
{
return str1+":"+str2;
}
}
- 黑马程序员_技术加强之反射
- 黑马程序员_基础加强之反射
- 黑马程序员_基础加强之反射
- 黑马程序员_基础加强_反射
- 黑马程序员_基础加强_反射
- 黑马程序员--JAVA基础加强之反射技术
- 黑马程序员_基础加强(3) 反射
- 黑马程序员_基础加强(反射)
- 黑马程序员_<<基础加强---反射>>
- 黑马程序员_Java基础加强_反射
- 黑马程序员_Java基础加强_反射
- 【黑马程序员】java基础加强_反射
- 黑马程序员_技术加强之新特性
- 黑马程序员_反射技术
- 黑马程序员_反射技术
- 黑马程序员_反射技术
- 黑马程序员之基础加强之反射
- 黑马程序员_学习日记十五_基础加强之反射
- AGP内存,系统内存,显存的区别 .
- 还原DB时错误:因为数据库正在使用,所以无法获得对数据库的独占访问权
- netfilter
- sscanf用法以及正则表达式的运用
- I'm Fine.
- 黑马程序员_技术加强之反射
- NSDateFormatter的格式字符串
- 【Error】Call requires API level 3 (current min is 1)解决办法
- android的Menu使用
- PCA实现代码
- Java内存泄露监控工具:JVM监控工具介绍
- 上传图片文件
- HttpServlet详解
- mysql数据库在表中指定位置增加一列