java的反射的一些基本用法

2017-05-16  本文已影响10人  feng_wy

今天看了一个Method.invoke(Object var1, Object... var2)的方法,记录一下

public classTest {

private staticString getstr() {

return"wywywy";

}

publicString getMyname() {

return"my name is wy";

}

publicString getInfo(String[] objects) {

StringBuilder stringBuilder =newStringBuilder();

for(inti =0; i < objects.length; i++) {

Log.e(getClass().getName(), objects[i].toString());

}

return"i am is a shuai ge"+String.valueOf(objects.length-1);

}

}

第二个类

public classMainActivityextendsAppCompatActivity {

@Override

protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

try{

try{

try{

//1.

//反射加载类

Class tClass = Class.forName("com.example.wy.mytested.Test");

//得到方法

Method method = tClass.getDeclaredMethod("getstr");

//设置私有的方法也可以访问

method.setAccessible(true);

//如果是静态的可以直接传空

String a = (String) method.invoke(null);

Log.e(getClass().getName(), a);

//2.

Method method1 = tClass.getMethod("getMyname");

Object o =null;

try{

//如果不是静态的要传这个 方法的类的对象

o = method1.invoke(tClass.newInstance());

}catch(InstantiationException e) {

e.printStackTrace();

}

Log.e(getClass().getName(),"2-------------"+o);

//3.

Method method2 = tClass.getMethod("getInfo");

try{

//第二个参数是方法所需要的参数

Object s2=  method2.invoke(null,newString[]{"a","b","c"});

Log.e(getClass().getName(),(String)s2);

}catch(Exception e) {

e.printStackTrace();

}

}catch(IllegalAccessException e) {

e.printStackTrace();

}catch(InvocationTargetException e) {

e.printStackTrace();

}

}catch(NoSuchMethodException e) {

e.printStackTrace();

}

}catch(ClassNotFoundException e) {

e.printStackTrace();

}

}

}

上一篇下一篇

猜你喜欢

热点阅读