public class reflect08 {
public static void main(String[] args) throws Exception {
//以前
//CustomerService cs = new CustomerService();
//cs.logout();
//通过反射机制
Class c = Class.forName("A.CustomerService");
//获取某个特定的方法,方法名+形参列表
Method m = c.getDeclaredMethod("login",String.class,String.class );
//通过反射机制执行login方法
Object o = c.newInstance();//创建对象
Object retuValue = m.invoke(o,"name","13");
//通过o对象的m方法,传递“name”“12”两个参数,方法的执行结果是retuValue
System.out.println(retuValue);
}
}
反编译某个类的所有的构造方法
public class reflect11 {
public static void main(String[] args) {
Class c = java.lang.String.class;
Constructor[] cs = c.getDeclaredConstructors();//构造方法
/*
* for(Constructor con:cs) {
*
* System.out.println(Modifier.toString(con.getModifiers()));//修饰符
*
* System.out.println(con.getName());//方法名
*
* Class [] para = con.getParameterTypes();//获取所有的形参 for(Class p:para) {
* System.out.println(p.getSimpleName()); }
*
* }
*/
StringBuffer sb = new StringBuffer();
//类的修饰符 类名
sb.append(Modifier.toString(c.getModifiers()) + " class" + c.getSimpleName() + "{\n");
for (Constructor con : cs) {
sb.append("\t");
//构造方法的修饰符
sb.append(Modifier.toString(c.getModifiers()) + " ");
sb.append(c.getSimpleName() + "{");
// 形参
Class[] para = con.getParameterTypes();
for (int i = 0; i < para.length; i++) {
Class ParaTypes = para[i];
if (i == para.length - 1) {
sb.append(ParaTypes.getSimpleName());
} else {
sb.append(ParaTypes.getSimpleName() + ",");
}
}
sb.append("){}\n}");
}
sb.append("}");
System.out.println(sb);
}
}
反编译某类的某个构造方法
newInstance属于构造方法ConStructor ,传递参数调用用有参数的构造方法
public class Reflecty020 {
public static void main(String[] args) throws Exception{
Class c = Customer12.class;
//c.newInstance();//调用的是无参数构造方法
Constructor con = c.getDeclaredConstructor(String.class,int.class);
Object o = con.newInstance("zAlice",12);
System.out.println(o);
}
}
class Customer12{
String name ;
int age;
Customer12(String name,int age){
this.age = age;
this.name = name;
}
public String toString() {
return "M "+name+"A "+age;
}
}
关于类获取父类和和父接口
获取父类和父接口
public class reflect0123 {
public static void main(String[] args) {
Class c = java.lang.String.class;
//获取父类
Class superclass = c.getSuperclass();
System.out.println(superclass.getName());
//获取父接口
Class [] ins = c.getInterfaces();
for(Class i:ins) {
System.out.println(i.getName());
}
}
}