什么是类发射

来源:互联网 发布:网络电视华人台 编辑:程序博客网 时间:2024/05/21 17:51

什么是类发射

       JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

 

反射(Reflection)是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查, 也称自审,并能直接操作程序的内部属性。例如,使用它能获得Java类中各成员的名称并显示出来。


Java的这一能力在实际应用中应用得很多,在其它的程序语言中根本就不存在这一牲。例如,Pascal、C或者C++中就没有办法在程序中获得函数定义相关的信息。
JavaBean是类反射的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过类反射动态的载入并取得Java组件(类)的属性。后面学习的各种框架,基本上都会有反射的使用。


反射使用的三个步骤

     第一步:获得你想操作的类的java.lang.Class对象。在运行中的Java程序中,用java.lang.Class类来描述类和接口等。

    第二步:调用诸如getDeclaredMethods的方法,取得该类中定义的所有方法的列表。
    第三步:使用反射的API来操作这些信息。


获取class对象的三种方式

      方式一

通过对象的getClass方法进行获取。这种方式需要具体的类和该类的对象,以及调用getClass方法。

    方式二

任何数据类型(包括基本数据类型)都具备着一个静态的属性class,通过它可直接获取到该类型对应的Class对象。这种方式要使用具体的类,然后调用类中的静态属性class完成,无需调用方法,性能更好。

    方式三

通过Class.forName()方法获取。这种方式仅需使用类名,就可以获取该类的Class对象,更有利于扩展。

  

package reflect.instance;import vo.Person;public class ReflectGetClass {public static void main(String[] args) {    getClass1();    fetClass2();    getClass3();}// 通过Class.forName(str)的方式获取Class对象,该方式依赖的是字符串(类的名字),可以实现解耦private static void getClass3() { Class c;try {c = Class.forName("vo.Person"); System.out.println(c);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//通过对象getClass()方法获取private static void getClass1() {    Person p=new Person("jack",2);      Class c=p.getClass();      System.out.println(c);}//任何数据类型(包括基本数据类型)度具备一个静态的属性class,通过它可直接获取到该类型的Class对象private static void fetClass2(){//Class c=Person.class;//Class c=int.class;//Class c=String.class;Class c =Integer.class;System.out.println(c);}}

package vo;public class Person {     String name;     int age;public Person(String name, int age) {super();this.name = name;this.age = age;}}
















0 0
原创粉丝点击