获取某个特定的方法,通过反射机制执行 反编译某个类的所有的构造方法

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());
		}
		
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值