<span id="beda98515b"></span><address id="bf3a9ffcb3"><style id="bg3f49f245"></style></address><button id="bl6ae8a5ec"></button>
                        

          

          公用通道>

          您以后地点地位wn: bwin官方娱乐网站 > 行业旧事 > IT技能讨论 >

          IT技能讨论

          Java反射

          公布者b平台b:bwin平台网址成都锦江点击娱乐: 分享到
          在Java运转时情况中唯一授权,关于恣意一个类可否晓得这个类有哪些属性和办法官网站官网w?关于恣意一个工具唯一网网址i官网,可否挪用它的恣意一个办法授权平台b平台?答案是一定的w。这种静态获取类的信息以及静态挪用工具的方

          在Java运转时情况中授权网址官网,关于恣意一个类可否晓得这个类有哪些属性和办法网官网网i?关于恣意一个工具n娱乐,可否挪用它的恣意一个办法平台官方官网官网?答案是一定的唯一。这种静态获取类的信息以及静态挪用工具的办法的功用来自于Java言语的反射机制nnnb(Reflection唯一官方官方平台)b唯一ww网。
          请求收费试学】【在线报名在线征询

          Java反射机制次要提供一下功用w平台平台i。

          在运转时判别恣意一个工具所属的类平台n唯一平台。

          在运转时结构恣意一个类的工具平台网wbn。

          在运转时判别恣意一个类所具有的成员变量和办法网w授权娱乐i。

          在运转时挪用恣意一个工具的办法网。

          Reflection是Java被视为静态官网平台(或准静态娱乐)言语的一个要害性子唯一网。这个机制容许顺序在运转时透过Reflection API获得任何一个已着名称的class的外部信息娱乐唯一,包罗其modifiers官方授权(诸如piblic官网,static等等平台b)i平台唯一唯一官网、superclass平台网娱乐平台b(比方Object平台唯一ww)官网、完成之interfaces唯一(比方Serializable站)n网,也包罗fields和methods的一切信息b官方网址网唯一,并可于运转时改动fields内容或挪用methods官网。
          请求收费试学】【在线报名在线征询

          普通而言授权n站n,开辟者社群说到静态言语站,大抵认同的一个界说是官网平台网站b:“顺序运转时nw,容许改动顺序构造或变量范例授权,这种言语称为静态言语”网授权授权。从这个观念看娱乐平台唯一站,Perl官网平台网,Python,Ruby是静态言语官网站官网i,C++b,Javan官网平台唯一,C#不是静态言语i。

          虽然在如许的界说与分类下Java不是静态言语娱乐网,它却有着一个十分突出的静态相干机制站bw:Reflection网址娱乐网官方娱乐。这个字的意思是唯一n官网:“反射b平台网址网b、映像娱乐、倒影”n网授权,用在Java身上指的是我们可以于运转时加载i网、探知唯一i网授权、运用编译时期完全未知的classes官网娱乐b。换句话说官方b授权网址i,Java顺序可以加载一个运转时才得着名称的class官网,得悉其完好结构官方官网官方网(但不包罗methods界说平台授权平台)官方授权官网官网,并天生其工具实体bi唯一、或对其fields设值唯一wi、或唤起其methods网址b。这种“看破class的才能平台娱乐(the ability of the program to examine itselfn唯一唯一授权)”被称为introspection网(自察b站n、内观官网、反省官网授权网址i官方)授权i官网。Reflection和introspection是常被并提的两个术语n官网平台。
          请求收费试学】【在线报名在线征询

          在JDK中授权唯一n,次要由以下类来完成Java反射机制唯一授权娱乐网,这些类位于java.lang.reflect包中n。

          Class类n网:代表一个类官网b平台官方。

          File类唯一:代表类的成员变量网官网(成员变量也成为类的属性唯一官方网n)

          Method类i官方网址平台官方:代表类的办法官方。

          Construtor类n:代表类的结构办法

          Arry类官方:提供了静态创立数组唯一w,以及拜访数组的元素的静态办法i。

          Class Class<T>Java当中每一个工具都市有一个与之联系关系的class工具n,这个class工具是独一的i平台官网。这个class工具是在JDK启动的时分就加载出去的授权网址官方唯一唯一,那么他是我们反射的入口点i网址站。
          请求收费试学】【在线报名在线征询

          newInstance()

          Creates a new instance of the class represented by this Class object.

          创立一个新的实例w,是由这个Class工具所代表的谁人类的实例

          Class Methodn官网网唯一站:关于我在类中界说的恣意一个办法都市有一个与之联系关系的Method工具w网n官网,这个Method会取得这个办法的一切信息网唯一,除了办法界说之外唯一,其他都能取得娱乐娱乐站娱乐授权。

          Java的每一个类他外面的每一个办法都市有一个与之对应的Method工具娱乐,假如要想经过反射来挪用这个办法的时分唯一ni,你就要取得这个办法与之对应的Method工具i站,取得Method工具之后网址,就能经过Method工具所代表的谁人办法网娱乐w授权网。

          getMethod(String name, Class<?>... parameterTypes)办法

          想获取一个办法经过这个办法的名字和办法的参数娱乐w(由于有重载以是才要参数bn授权网)

          invoke(Object obj, Object... args)

          前往一个Object范例网址n娱乐,实在便是办法的前往范例wn(援用站平台(int--integer官网w官方)站bi)
          请求收费试学】【在线报名在线征询

          代码实例

          package com.test;

          import java.lang.reflect.Method;

          public class InvokeTester {

          public int add(int param1, int param2) {

          return param1 + param2;

          }

          public String echo(String msg) {

          return "hello:" + msg;

          }

          public static void main(String[] args) throws Exception {

          Class<?> classType = InvokeTester.class;

            // 取得InvokeTester类所对应的Class工具

          Object invokeTester = classType.newInstance();

          // 以上两行代码等价于

          // InvokeTester it = new InvokeTester();

          Method addMethod = classType.getMethod("add", int.class, int.class);

          // 这个Method工具就等价于add办法

          Object result = addMethod.invoke(invokeTester, new Object[]{100,200});

          //以上两行代码等价于it.add(100,200);

          System.out.println((Integer) result);

          Method echoMethod = classType.getMethod("echo",

          new Class[] { String.class });

          //以上两行代码等价于it.echo("hello");

          Object result2 = echoMethod.invoke(invokeTester, new Object[]{"hello"});

          System.out.println((String)result2);

          }

          }

          getConstructor(Class<?>... parameterTypes)

          取得某个特定的结构办法所对应的工具网址网址官方网,在经过结构办法Constructor的newInstance(Object... initargs)办法天生类的实例
          请求收费试学】【在线报名在线征询

          getDeclaredFields()取得工具的一切属性授权授权娱乐官方,每个属性对应一个Field工具

          实例2package com.test;

          import java.lang.reflect.Field;

          import java.lang.reflect.Method;

          public class ReflectTester {

          public Object copy(Object object) throws Exception {

          Class<?> classType = object.getClass();

          System.out.println("Class:" + classType.getName());

          // 经过默许结构办法创立一个新的工具

          Object objectCopy = classType.getConstructor(new Class[] {})

          .newInstance(new Object[] {});

          // 下面这行代码等价于Object objectCopy2 = classType.newInstance();这个是独一的n唯一平台,

          // 运用默许的结构办法授权站,而这里运用的则是全能的娱乐w娱乐,能经过差别的结构办法实例工具

          // 并且getConstructor办法和newInstance办法的参数个数和范例肯定要婚配

          // 先是结构办法的参数范例平台唯一唯一官方,然后是实例工具为结构办法传的真实参数

          // 取得工具的一切属性

          Field fields[] = classType.getDeclaredFields();

          for (int i = 0; i < fields.length; i++) {

          Field field = fields[i];

          String fieldName = field.getName();

          String firstLetter = fieldName.substring(0, 1).toUpperCase();

          // 取得和属性对应的getXXX()办法的名字

          String getMethodName = "get" + firstLetter + fieldName.substring(1);

          // 取得和属性对应的setXXX()办法的名字

          String setMethodName = "set" + firstLetter + fieldName.substring(1);

          // 取得和属性对应的getXXX()办法

          Method getMethod = classType.getMethod(getMethodName,

          new Class[] {});

          // 取得和属性对应的setXXX()办法

          Method setMethod = classType.getMethod(setMethodName,

          new Class[] { field.getType() });

          // 挪用原工具的getXXX()办法

          Object value = getMethod.invoke(object, new Object[] {});

          System.out.println(fieldName + ":" + value);

          // 挪用拷贝工具的setXXX()办法

          setMethod.invoke(objectCopy, new Object[] { value });

          }

          return objectCopy;

          }

          public static void main(String[] args) throws Exception {

          Customer customer = new Customer("Tom", 21);

          customer.setId(new Long(1));

          Customer customerCopy = (Customer) new ReflectTester().copy(customer);

          System.out.println("Copy information:" + customerCopy.getId() + " "

          + customerCopy.getName() + " " + customerCopy.getAge());

          }

          }

          class Customer {

          private Long id;

          private String name;

          private int age;

          public Customer() {

          }

          public Customer(String name, int age) {

          this.name = name;

          this.age = age;

          }

          public Long getId() {

          return id;

          }

          public void setId(Long id) {

          this.id = id;

          }

          public String getName() {

          return name;

          }

          public void setName(String name) {

          this.name = name;

          }

          public int getAge() {

          return age;

          }

          public void setAge(int age) {

          this.age = age;

          }

          }

          经过反射操纵一维数组

          public static void main(String args[]) throws Exception

          {

          Class classType = Class.forName("java.lang.String");

          // 创立一个长度为10的字符串数组

          Object array = Array.newInstance(classType, 10);

          // 把索引地位为5的元素设为"hello"

          Array.set(array, 5, "hello");

          // 取得索引地位为5的元素的值

          String s = (String) Array.get(array, 5);

          System.out.println(s);

          }

          Class class非常特别官网,他和普通的classes一样承继自Objecti,实在体用以表达Java顺序运转时的classes和interfaces娱乐,也用来表达enum平台站网址i、array官网i授权官方、primitive网、Java types

          官网(boolean网址平台,byte官网唯一唯一网,char官网官方娱乐w,short授权唯一唯一网址w,intn,long站i,float,doublei)以及要害词voidw站。当一个class被加载i网址授权,或当加载器站平台(class loadern娱乐b平台)的defineClass官网官网iw(i)被JVM挪用网址授权,JVM便自定发生一个Class object站网址娱乐。假如你想借由“修正Java规范库源码”来察看Class object的实践天生机遇i授权官网娱乐站(比方在Class的constructor内添加一个printlnwnb站唯一(i站授权)官方唯一网,不克不及够娱乐官方!由于Class并没有public constructor平台站b网址网)

          Class是Reflection来源授权n。针对任何你想探勘的class官方官网官网站,唯有先为他发生一个cClass object唯一唯一授权授权,接上去才干经过后者唤起为数十多个的Reflection APIS。
          请求收费试学】【在线报名在线征询

          上一篇i官网娱乐授权平台:进步MySQL 盘问服从的本领 下一篇站:成为Java妙手的25个学习目的
          

          bwin平台网址征询教师

          bwin平台网址成都锦江校区引见

          bwin平台网址成都锦江校区是bwin平台网址总部在成都设立的一家树模校区网i授权网址。涵盖ACCP官网i娱乐网址官网、Java官网平台i官网网、.Net平台平台b娱乐、网络营销平台网i网网址、市场营销,游戏开辟等多专业校区娱乐n,承当讲授w网w授权、失业树模站官方站网址、以及教员培育保送等职责娱乐b网网。
          bwin平台网址作为北京大学上司的专业盘算机学校平台网址,以北京大学弱小师资作为依托网授权i,延续13年被评为站w平台官网n“中国IT教诲第一品牌b授权网网”官网官方唯一,累计培育60+万良好软件工程师,是名符实在的软件工程师的摇篮i官网…官网b…请认准品牌名校——bwin平台网址成都锦江校区网唯一,地点ww官方:成都市春熙路北口东行500米网址网授权唯一(大慈寺22号网址)授权站平台。