旗下导航:搜·么
当前位置:网站首页 > JAVA教程 > 正文

深切明白java中反射机制(含数组参数)【JAVA教程】,java,反射机制

作者:搜教程发布时间:2019-11-30分类:JAVA教程浏览:67评论:0


导读:java的反射是我一向异常喜好的处所,由于有了这个,能够让顺序的灵活性大大的增添,同时通用性也提高了许多。反射道理什么的,我就不想做过大引见了,网上一搜,就一大把。(下面我是只...

java的反射是我一向异常喜好的处所,由于有了这个,能够让顺序的灵活性大大的增添,同时通用性也提高了许多。反射道理什么的,我就不想做过大引见了,网上一搜,就一大把。(下面我是只附录引见下)

Reflection 是Java被视为动态(或准动态)言语的一个症结性子。这个机制许可顺序在运行时透过Reflection APIs获得任何一个已知称号的class的内部信息,包含其modifiers(诸如public, static 等等)、superclass(比方Object)、完成之interfaces(比方Cloneable),也包含fields和methods的一切信息,并可于运行时转变fields内容或唤起methods

【引荐进修:java视频教程】

在这里,我想说的是假如依据字符串去做我们本身想要的事(包含动态实行对应的要领,生成响应的类),我们在传送数据的时刻,大部分都是传字符串的(HTTP,socket)等,我们接受到这些字符串时,再依据这些字符串内容而去做响应的事,那是一件异常不错的事,能够长途挪用要领(客户端发送指定的字符串,让服务器依据反射去实行对应的要领)。。。

事实上,我也曾做过如许项目,客户端(不是java言语写的)应用socket去呼唤服务器(java写的)要领,同时还能够直接通报参数,这些都是依据java的反射手艺完成的。好了,其他的就多说了,我们从最基础的看起吧,下面是一个最基础要领反射

/**
 * @(#)TestInt.java
 * 
 * @author soda E-mail:sujun10@21cn.com
 * @version 1.0
 * <br>Copyright (C), 2007 soda.C
 * <br>This program is protected by copyright laws.
 * <br>Date:2007.4
 */
import java.lang.reflect.Method;

public class TestInt 
{
  //测试要领
  public String test(String name,int i)
  {
    System.out.println("name:" + name);
    System.out.println(i);
    return "反射胜利!";
  }

  public static void main(String[] args)
  {
    try
    {
      //猎取class文件,能够Class.for("Test")猎取,如许也能够依据字符串生成类啦
      Class te = TestInt.class;
      Class[] cl = new Class[2];
      //增加参数范例
      cl[0] = String.class;
      cl[1] = int.class;
      System.out.println("11111111");
      //依据public的要领,以及参数,参数是Class[]情势
      Method method = te.getMethod("test", cl);
      System.out.println("222222222222");
      //入手下手添补参数
      Object[] params = new Object[2];
      //params[0] = new String("soda");
      params[0] = new String("soda");
      params[1] = new Integer(23);
      System.out.println("22222222222");
      //猎取该class的实例
      Object obj = te.newInstance();
      //举行要领挪用
      Object result = method.invoke(obj, params);
      System.out.println("效果:" + result);
    }
    catch (Exception e)
    {
      System.out.println(e);
    }
    
  }
}

编译实行,能够看到想要的效果,设想一下,把那些字符串变成别的处所传过来的数据:)

再来一个要领中有数组的反射,我研讨了一下,有一点点的区分的。人人要仔细看哦

/**
 * @(#)Test.java
 * 
 * @author soda E-mail:sujun10@21cn.com
 * @version 1.0
 * <br>Copyright (C), 2007 soda.C
 * <br>This program is protected by copyright laws.
 * <br>Program Name:FlashSyncServer
 * <br>Date:2007.1
 */
import java.lang.reflect.Method;
//这里我就不做什么诠释了,和前面的险些一样,人人也能够本身去查查api,Class类的api
public class Test 
{
  public void test(double[] dou)
  {
    System.out.println(dou.length);
    System.out.println(dou[0]);
  }
  public static void main(String[] args) throws Exception
  {
    try
    {
      Class[] cl = new Class[1];
      cl[0] = double[].class;
      System.out.println("cl[0]:" + cl[0]);
      Object[] in = new Object[1];
      //注重这里,不是Double[],而是double[]。这里不能用对象数组
      double[] db = new double[1];
      db[0] = 100.0;
      in[0] = db;
      Class te = Test.class;
      Method method = te.getMethod("test", cl);
      Object obj = te.newInstance();
      Object objs = method.invoke(obj, in);
    }
    catch (Exception e)
    {
      System.out.println(e);
    }
    
  }
}

好了,基础的是如许了,再庞杂的顺序也是有基础演化而来的。

本文来自 java入门 栏目,迎接进修!

以上就是深切明白java中反射机制(含数组参数)的细致内容,更多请关注ki4网别的相干文章!

标签:java反射机制


欢迎 发表评论: