根据 class 文件反编译得到 Java 源代码
这属于反射的内容,这里的源代码只是反编译
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:方法的形参最后多一个逗号;无法得到方法体