关于java反射的笔记

1.反射就是把Java类中的各个成分映射成与其相应的java类。例如System有很多方法,System.exit()、Syetem.getPriperties()等等,

这些方法又都属于Method类,System.exit()、Syetem.getPriperties()只是Method类的两个对象。

2.Constructor:所有的构造方法都属于Constructor类。

 (1)得到某个类的所有的构造方法:

      Constructor[]constructors = Class.forName("java.lang.String").getConstructors();

                备注:因为造方法不一定只有一个,所以用一个数组进行存放 

  (2)因为一个类的构造方法可能有多个,我们有时候只需要得到某个类的某个构造方法:

      Constructorconstroctors =Class.forName("java.lang.String").getConstructors(StringBuffer.class);

                备注:可以用参数区分造方法,但是jdk1.4及1.4以前getConstructors()的参数不是可变的,所以如果jdk是1.4及1.4以前的版本,可以构造方法的将参数存到一个数组里面,再把数组作为一个参数提供给getConstructors().

3.编译只是把文件转换成相应的二进制,而不是运行,也就是说不会进行“=”的操作。

                Constructorconstructor1 = String.calss.getConstructor(StringBuffer.calss);

                Stringstr = (String)constructor1.newInstance(new StringBuffer("ww"));

                备注:

                                ①因为程序编译时不会运行“=”的操作,所以只会知道constructor1.newInstance(newStringBuffer("ww"))

                                是个Constructor类型,因此,要让编译器可以知道constructor1.newInstance(newStringBuffer("ww"))是String

                                类型的,我们就需要在前面加上(String)告诉器。

                                ②因为constructor1是StringBuffer类型的,所以要把“ww”用newStringBuffer("ww")把String类型转换成StringBuffer类型

 

4.public class ReflectPoint {

                privateint x;

                publicint y;

               

                publicReflectPoint(int x, int y) {

                                super();

                                this.x= x;

                                this.y= y;

                }

 

}

 

import java.lang.reflect.Field;

 

 

public class ReflectTest{

                publicstatic void main(String[] args) throws Exception{

                                ReflectPointpt1 = new ReflectPoint(3,5);

                                FieldfieldY = pt1.getClass().getField("y");

                                System.out.println(fieldY);

                                System.out.println(fieldY.get(pt1));

                }

 

}

 

运行结果:publicint ReflectPoint.y

                  5

原因:int是基本类型,int[]不是object类型,所以jdk1.4处理不了,只能jdk1.5及以上版本处理。        

 

5.同一个文件,比较的时候建议用“==”而不是equals

例如:String[] arr = new String[2];

在比较arr

 

6.静态方法的使用不需要对象

例如:Method methodCharAt =String.class.getMethod("charAt",int.calss);

     methodCharAt.invoke(null,1);//null:表示没有其他对象;1:参数

即:如果Method对象invoke()方法第一个参数是null,则表示该Mehod对象是一个静态方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值