通俗的讲,当某些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