Java 反射和映射(主要描述下反射)

什么是反射?等同于映射吗?

    彻底不相关的。反射是一个机机制,映射是一种关系。

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

    映射是一种对应关系,在不少的状况下,表示一种存在的联系而已。this


反射能作什么

  • 在运行时判断任意一个对象所属的类;spa

  • 在运行时构造任意一个类的对象;代理

  • 在运行时判断任意一个类所具备的成员变量和方法;对象

  • 在运行时调用任意一个对象的方法;get

  • 生成动态代理。hash



     通俗的讲,当某些API没有暴露出来,可是咱们又须要用到其中的某些方法属性就须要了。


ForExample:

//假如JavaBean没有暴露出构造方法
package mypackage;


public class JavaBean {


private int age;
private String name;
public  String adress;
public int getAge() {
return age;
}
private void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}

        
}
 

//咱们能够经过Class类来获取实例对象
package mypackage;


import java.lang.reflect.Method;


public class JNITest {
  public static native void  getStringFromC();
public static void main(String[] args) {


       try {
           //获取类
           Class<?> class1 = Class.forName("mypackage.JavaBean");


           //获取全部的公共的方法
           Method[] methods =  class1.getMethods() ;
           
           for (Method method : methods) {
               System.out.println( method );
           }
           //获取实例类
           Object object  = class1.newInstance();
           JavaBean javaBean  = (JavaBean)object;
           javaBean.setName("Hellow");
           System.out.println("--->"+javaBean.getName());


          } catch (Exception e) {
           e.printStackTrace();
       }
   }


}


运行结果:
public java.lang.String mypackage.JavaBean.getName() public void mypackage.JavaBean.setName(java.lang.String) public java.lang.String mypackage.JavaBean.getAdress() public void mypackage.JavaBean.TestMethod() public int mypackage.JavaBean.getAge() public void mypackage.JavaBean.setAdress(java.lang.String) public final void java.lang.Object.wait() throws java.lang.InterruptedException public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException public boolean java.lang.Object.equals(java.lang.Object) public java.lang.String java.lang.Object.toString() public native int java.lang.Object.hashCode() public final native java.lang.Class java.lang.Object.getClass() public final native void java.lang.Object.notify() public final native void java.lang.Object.notifyAll() --->Hellow