反射Method

根据 class 文件反编译得到 方法

这属于反射的内容,这里的源代码只是反编译 Method 得到的方法不完整源代码
不常用,同样只是见识一下 反射机制 的威力!!!

代码:

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class ReflectMethodTest {
    public static void main(String[] args) {

        Class userServiceClass = null;
        StringBuilder s = new StringBuilder();

        try {
//            userServiceClass = Class.forName("com.bjpowernode.javase.reflect.UserService");
            userServiceClass = Class.forName("java.lang.String");

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

        Method[] methods = userServiceClass.getDeclaredMethods(); // 获取包括私有方法在内的所有的方法

        s.append(Modifier.toString(userServiceClass.getModifiers()) + " class "
                + userServiceClass.getSimpleName() +"{\n");

        for (Method m : methods){
//            public boolean login(String username, String password){
            s.append('\t');
            s.append(Modifier.toString(m.getModifiers()));
            s.append(" ");
            s.append(m.getReturnType().getSimpleName());
            s.append(" ");
            s.append(m.getName());
            s.append("(");
            // 加入参数列表
            Class[] parametersTypes = m.getParameterTypes();
            for (Class c : parametersTypes){
                s.append(c.getSimpleName());
                s.append(",");
            }
            s.append("){\n");
            s.append("\t}\n");
        }
        System.out.println(s);

    }
}

运行结果:

public final class String{
	 byte[] value(){
	}
	public boolean equals(Object,){
	}
	public int length(){
	}
	public String toString(){
	}
	public int hashCode(){
	}
	public void getChars(int,int,char[],int,){
	}
	public int compareTo(String,){
	}
	public volatile int compareTo(Object,){
	}
	public int indexOf(String,int,){
	}
	public int indexOf(int,){
	}
	static int indexOf(byte[],byte,int,String,int,){
	}
	public int indexOf(int,int,){
	}
	public int indexOf(String,){
	}
	static void checkIndex(int,int,){
	}
	public static String valueOf(int,){
	}
	public static String valueOf(float,){
	}
	public static String valueOf(boolean,){
	}
	public static String valueOf(long,){
	}
	public static String valueOf(double,){
	}
	public static String valueOf(Object,){
	}
	public static String valueOf(char,){
	}
	public static String valueOf(char[],){
	}
	public static String valueOf(char[],int,int,){
	}
	 byte coder(){
	}
	private static Void rangeCheck(char[],int,int,){
	}
	public IntStream codePoints(){
	}
	public boolean isEmpty(){
	}
	public char charAt(int,){
	}
	public int codePointAt(int,){
	}
	public int codePointBefore(int,){
	}
	public int codePointCount(int,int,){
	}
	public int offsetByCodePoints(int,int,){
	}
	public byte[] getBytes(Charset,){
	}
	public void getBytes(int,int,byte[],int,){
	}
	public byte[] getBytes(String,){
	}
	public byte[] getBytes(){
	}
	 void getBytes(byte[],int,byte,){
	}
	public boolean contentEquals(StringBuffer,){
	}
	public boolean contentEquals(CharSequence,){
	}
	private boolean nonSyncContentEquals(AbstractStringBuilder,){
	}
	public boolean equalsIgnoreCase(String,){
	}
	public int compareToIgnoreCase(String,){
	}
	public boolean regionMatches(boolean,int,String,int,int,){
	}
	public boolean regionMatches(int,String,int,int,){
	}
	public boolean startsWith(String,){
	}
	public boolean startsWith(String,int,){
	}
	public boolean endsWith(String,){
	}
	public int lastIndexOf(int,){
	}
	static int lastIndexOf(byte[],byte,int,String,int,){
	}
	public int lastIndexOf(String,int,){
	}
	public int lastIndexOf(String,){
	}
	public int lastIndexOf(int,int,){
	}
	public String substring(int,int,){
	}
	public String substring(int,){
	}
	public CharSequence subSequence(int,int,){
	}
	public String concat(String,){
	}
	public String replace(CharSequence,CharSequence,){
	}
	public String replace(char,char,){
	}
	public boolean matches(String,){
	}
	public boolean contains(CharSequence,){
	}
	public String replaceFirst(String,String,){
	}
	public String replaceAll(String,String,){
	}
	public String[] split(String,){
	}
	public String[] split(String,int,){
	}
	public static transient String join(CharSequence,CharSequence[],){
	}
	public static String join(CharSequence,Iterable,){
	}
	public String toLowerCase(){
	}
	public String toLowerCase(Locale,){
	}
	public String toUpperCase(Locale,){
	}
	public String toUpperCase(){
	}
	public String trim(){
	}
	public String strip(){
	}
	public String stripLeading(){
	}
	public String stripTrailing(){
	}
	public boolean isBlank(){
	}
	private int indexOfNonWhitespace(){
	}
	public Stream lines(){
	}
	public IntStream chars(){
	}
	public char[] toCharArray(){
	}
	public static transient String format(String,Object[],){
	}
	public static transient String format(Locale,String,Object[],){
	}
	public static String copyValueOf(char[],int,int,){
	}
	public static String copyValueOf(char[],){
	}
	public native String intern(){
	}
	public String repeat(int,){
	}
	private boolean isLatin1(){
	}
	static void checkOffset(int,int,){
	}
	static void checkBoundsOffCount(int,int,int,){
	}
	static void checkBoundsBeginEnd(int,int,int,){
	}
	static String valueOfCodePoint(int,){
	}

PS:方法的形参最后多一个逗号;无法得到方法体,因为我不是专业的开发反编译器的工程师。。。

猜你喜欢

转载自www.cnblogs.com/yerun/p/12710730.html