A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 嗷嗷嗷 中级黑马   /  2014-12-28 10:11  /  1517 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                                   透彻分析反射的基

反射的基石class类
java程序中的各个java类属于同一类事物,描述这类事物的java类名就是Class。
对比提问:众人用一个类怎么表示?众多的java类用一个什么类表示?
人 》person;Java类》Class
对比提问person类代表人,它的实例化对象就是张三,李四这这样一个个具体的人,Class类代表java类,
Java的实例化对象对应:
对应各个类在内存中的字节码。
一个类被加载器加载到内存中,占有一片存取空间,这个空间里的内容就是类的字节码,不同的类的字节码是不同的,
所以,这一个个空间分别用一个个的对象来表示,这些对象显然具有相同的类型。
Class--代表一类怎样的事物?
person p1=new person();
person p2=new person();
Date
Math
Class cls1=Date.Class//字节码1;
Class cls2=Date.Class//字节码2;
p1.getClass();
Class.forName("java.lang.Stirng")
如何得到各个字节码对应的实例对象(Class类型)
public static void main(String[] args)
{
  integer iobj=3;
system.out.println(iobj+12);
stirng s1=new String("abf");
stirng s2=new String("abf");
integer i1=137;
integer i2=137;
system.out.print(i1==i2);
integer i3=integer.valueof(231);
integer i4=integer.valueof(231);
}
public static void main(string[] args)
{
String strl="abc";
Class cls1=str1.getClass();
Class cls2=String.Class;
Class cls3=Class.forName("java.lang.String");
systen.out.println(cls1==cls2);
systen.out.println(cls1==cls3);
sysm.out(cls1.isprmitive());
sysm.out(int.Class.isprimitive());
sysm.out(int.Class==Integer.class);
sysm.out(int.class==integer.TYPE);
sysm.out(INT[]Class.isprimitive());
sysm.out(int[]clss.isprimitive());
九个预定义Class实例对象
成员变量的反射
Field类
field类代表某个类的一个成员变量
演示用eclipse自生成java类构造方法
new String(new StringBuffer("abc"));
Constructor constructor1=string.Class.getConstructor(string[] args)
String str2=(String)constructor1.newInstance();
system.out.println(str2.charAt(2));
peflectPoint pt1=new peflectPoint(3,5);
Field fiedy=pt1.gerClass().getField("y");
//Filldy 的值是多少?
system.out.print(fieldY.getField("x"));
fieldx.setAccessible(true);
system.out.print(fieldx.get(pt1));
反射就是java类中的各种成分映射相应的jiva类。
一个类中的每个成员都可以用相应的反射APi类的一个实例对象来表示.
通过调用class方法来调用对象.
构造方法的反射应用
Constructor类
.得到某个类所有的构造方法:例子:
ClassforName("java.lang.String')getConstructors();
得到某一个构造方法:
constructor constructor=ClassforName("java.lang.string").getConstructor(StringBuffur.Class);
创建实例化对象:
通常方式:String str=new stirng(new StringBuffer("abc"));
反射方式:String str=(String)constructo.newlnstance(new StringBuffer("abc"))
Method 类
method类代表某个类中的一个成员方法
得到类中的某一个方法:
ClassforName("java.lang.String")getMEthod("charAr".int.Class);
jdk1.4和jdk1.5的invoke方法的区别:
jdk1.5:public Objectinvoke(objectOBject.args)
jdk1.4:public Objectinvoke(objectobj.OBject[]args),
jdk1.4需要定义一个数组.


}

4 个回复

倒序浏览
分享的非常的好、
回复 使用道具 举报
学习很用心的,我还没有学习到呢
回复 使用道具 举报
今天又看到一点东西
回复 使用道具 举报
换了个人讲,反射听着就不是原来那个感觉了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马