美文网首页
2018-06-02(java-反射)

2018-06-02(java-反射)

作者: acebear | 来源:发表于2018-06-02 21:54 被阅读0次

    class类的使用

    1.面向对象的世界里,万事万物皆对象

    2.类是对象,任何类都是java.lang.Class类的实例对象

    例子:

    class food{}

    food f=new food();

    那么food的实例对象有以下几种表达方式:

    1.Class c1=food.class;//任何一个类都有隐含的静态变量class

    2.Class c2=f.getClass();

    3.Class c3=null;

    c3=Class.forName("com.package.demo");//参数为类的全称

    其中c1==c2或者是c2==c3都是true,因为不管c1 、c2都代表了food类的类类型,一个类只可能是class类的一个实例对象。

    可通过类的类类型创建该类的对象实例:food f=(food)c1.newInstance();//前提:需要有无参的构造方法

    基本的数据类型、void关键字都存在类类型(ps:void的无参构造方法是私有的),可直接调用class类的方法。方法也是一个对象,所有的方法的类类型都是method。

    方法的反射:方法的名称和参数列表才能唯一决定一个方法。

    操作:method.invoke(对象(方法名),参数列表)

    例子:

    class A{

    public void print(int a,int b){

    System.out.println(a+b);

    }

    public void print(String a,String b){

    System.out.println(a+b);

    }}

    class Main{

    public static void main(String[] args){

    //要获取方法,就是获取类的信息,获取类的信息首先要获取类的类类型

    A a1=new A();

    Class c=a1.getClass();

    //getMethod()获取的是public的方法,getDelcaredMethod()获取的是自己声明的方法

    Method m=c.getMethod("print",int.class,int.class);//获取方法对象;若方法无参数,则写成c.getMethod("print",new Class[]{})或者c.getMethod("print");

    Object o=m.invoke(a1,new Object[]{10,20});//用m对象来进行方法的调用,效果和a1.print()一样。如果方法没有返回值则返回null,有则返回具体的返回值

    //也可写成Object o=m.invoke(a1,10,20);

    }}

    相关文章

      网友评论

          本文标题:2018-06-02(java-反射)

          本文链接:https://www.haomeiwen.com/subject/etxdsftx.html