Java中反射机制详解

发表于:2011-10-08 10:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:青春流水指间    来源:51Testing软件测试网采编

  反射:

  可以动态的获取指定类中的成员,以及建立类对象。

  好处:提高了程序的扩展性。

  张三,李四等这些生活中的对象,可以通过Person类的形式对其进行描述。

  当class文件产生以后,这些class文件也是生活中的事物,那么对这些class文件也可以进行描述,该描述对应的类型就是Class。

  在java中,每一个字节码文件都有一一个与之对应的Class对象。不仅包括引用数据类型,也包括基本数据类型。int.Class

  1. String.class----Class  
  2.      Class class1=String.class;  
  3.      String s="abc";  
  4.      Class class2=s.getClass();  
  5.      Class class3 = Class.forName("java.lang.String");

  以上就是获取字节码文件的三种方式。

  以前操作对象的时候用的是new关键字完成,并通过对象。成员方式进行调用

  1. Person p= new Person();  
  2.        //1.光加载Person.class文件。 
  3.        //2.对对象进行初始化。 
  4.        p.function("heihei");  
  5.        //在对象调用成员方法时,需要明确两个因素: 
  6.                1.对象  2.获取参数列表

  现在可以通过字节码对象完成以上动作。

  1. //加载Person.class文件,获取Person.class文件对象的Class对象 
  2.        Class clazz = Class.forName("Person");  
  3.        //通过字节码文件对象,对指定类进行创建并初始化。 
  4.        Person p=(Person)clazz.newInstance();  
  5.        //通过对象调用成员 
  6.        //p.function("heihei");

  类可以作为参数进行传递,那么方法也一样可以作为参数进行传递,因为方法存在于字节码文件内, 所以可以通过Class对象获取字节码文件中的内容。

  1. Method m =  Class.getMethod("function",String.class);  
  2.         m.invoke(p,"heihei");

  类或者方法都作为参数传递这样对于开发到底有那些好处呢?

  需求:设计一个主板,为了提高后期的扩展性,也就是为了后期提高电脑的额功能,对外提供了PCI的接口。以方便电脑功能的扩展。

  1. interface PCI{   
  2.                    void open();  
  3.                    void close();  
  4.                }  
  5.                class MainBoard{  
  6.                    public void usePCI(PCI p){  
  7.                        p.open();  
  8.                        p.close();  
  9.                        }  
  10.                }  
  11.                class MainBoardDemo{  
  12.                    public static void main(String[] args){  
  13.                        MainBoard mb=new MainBoard();  
  14.                           //mb.usePCI(null); 
  15.                                mb.usePCI(NetCard);  
  16.                        }  
  17.                }

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号