黑马程序员_反射总结

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

反射的基石-->Class(首字母要大写)和用来定义类的class要区别开;

java的中的各个类属于同一个事物,用来描述这同一个事物的属性的就是就是Class;

Class的一个实例就是一个类的字节码;

如何得到字节码的实例对象:

1.用类名 .class ;2.实例对象.getClass();3.Class.forName("类名");

九个预定义的Class对象:八个基本数据类型和void关键字;

Interger.type==int.class(基本数据类型整数int的那份字节码);

只要在源程序中出现的类型,都有各自的class实例对象;

反射就是将一个类的各种成分,比如方法,包什么的都解析为一个类;field(字段,成员变量),method(方法),constructor,package;

Constructor程序的实例:

import java.lang.reflect.*;
class Myconstructor
{
 int x=1;
 public Myconstructor(){}
 public Myconstructor(int x)
 {
  this.x=x;
 }
 public static void main(String[] args) throws Exception
 {
  Constructor c1=Myconstructor.class.getConstructor(int.class);
  System.out.println(c1.newInstance(5));//不加5则会运行时发生构造函数参数不匹配的错误,说明经过constructor的折腾,新产生的对象只有符合int.class的构造函数。自己怀疑产生了一个只有构造函数的实例,因为加了.x 后打印会出错
 }
}

 

反射比较影响程序性能; 

Field所代表的不是某个类对象的成员变量的具体的值,而只是这个类的变量本身,可以用field.get( 对象名);

Field的实例:

import java.lang.reflect.*;
class ReflectPoint
{
 private int x;//没有public的话,getfield就读取不到,其他三种都不行,都尝试过了,
 //改成getDeclaredField,则四种类型都可以读取
 private int y;
 public ReflectPoint(int x,int y)
 {
  this.x=x;
  this.y=y;
 }
 public static void main(String[] args) throws Exception
 {
  ReflectPoint pt1=new ReflectPoint(3,5);
  Field fieldX=pt1.getClass().getDeclaredField("x");
 // Field fieldX=pt1.getClass().getField("x");
  System.out.println(fieldX.get(pt1));
  Field fieldY=pt1.getClass().getDeclaredField("y");
  System.out.println(fieldY.get(pt1));
 }
}

 

Method代表一个类里面的方法

 

用反射的方法来返回某个类的main方法,(为什么要用反射这种看似麻烦的方法来调用某类的main方法呢?直接写类名.main()方法不是更方便吗?但是如果写程序时并不知道某类的类名呢?这个类名如果是用参数传进来的呢?显然就只能用反射来调用这个编写程序时并不知道其类名的main方法了)

 

【数组的反射】

具有相同类型和维数的数组都属于同一个类;

 

反射的综合案例


相对路径既不是相对于java命令,也不是相对于所执行的类,而是相对于当前路径。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值