String className = obj.getClass().getName() 得到类名
然后:
A a = (A)Class.forName(className).newInstance()
//上面这句话的意思是,forName(className):静态加载className这个类
// .newInstance(),实例化一个对象
//A 代表你知道的这人类或者这个类的父类, 把强制转化成你所要的对象。
这和你
A a = new A();
是一样的效果!
java中是可以多继承的,所以子类获得父类的类名,可以使用getSuperClass()这个方法来获得,示例如下:public class Test1 extends Date {
public static void main(String[] args) {
new Test1().test()//测试获得父类类名方法
}
public void test() {
System.out.println(Test1.class.getSuperclass().getName())//打印父类类名,使用getSuperclass()方法
}
}
可以使用以下代码来获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名。import java.io.File
import java.lang.reflect.Method
public class LoopApp {
public static void main(String[] args) throws Exception {
String packageName = ""
File root = new File(System.getProperty("user.dir") + "\\src")
loop(root, packageName)
}
public static void loop(File folder, String packageName) throws Exception {
File[] files = folder.listFiles()
for (int fileIndex = 0fileIndex <files.lengthfileIndex++) {
File file = files[fileIndex]
if (file.isDirectory()) {
loop(file, packageName + file.getName() + ".")
} else {
listMethodNames(file.getName(), packageName)
}
}
}
public static void listMethodNames(String filename, String packageName) {
try {
String name = filename.substring(0, filename.length() - 5)
Object obj = Class.forName(packageName + name)
Method[] methods = obj.getClass().getDeclaredMethods()
System.out.println(filename)
for (int i = 0i <methods.lengthi++) {
System.out.println("\t" + methods[i].getName())
}
} catch (Exception e) {
System.out.println("exception = " + e.getLocalizedMessage())
}
}
}