1反射是什么
对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性;
1 通过一个对象获得完整的包名和类名
代码如下:
package
net.xsoftlab.baike;
public
class
TestReflect {
public
static
void
main(String[] args)
throws
Exception {
TestReflect testReflect =
new
TestReflect();
System.out.println(testReflect.getClass().getName());
}
}
// 结果 net.xsoftlab.baike.TestReflect
2 实例化Class类对象
package net.xsoftlab.baike;
public class TestReflect {
public static void main(String[] args) {
Class<?> class1 = null;
Class<?> class2 = null;
Class<?> class3 = null;
try {
class1 = Class.forName("net.xsoftlab.baike.TestReflect");
class2 = new TestReflect().getClass();
class3 = TestReflect.class;
System.out.println("类名称 " + class1.getName());
System.out.println("类名称 " + class2.getName());
System.out.println("类名称 " + class3.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class TestReflect {
public static void main(String[] args) {
Class<?> class1 = null;
Class<?> class2 = null;
Class<?> class3 = null;
try {
class1 = Class.forName("net.xsoftlab.baike.TestReflect");
class2 = new TestReflect().getClass();
class3 = TestReflect.class;
System.out.println("类名称 " + class1.getName());
System.out.println("类名称 " + class2.getName());
System.out.println("类名称 " + class3.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
类名称 net.xsoftlab.baike.TestReflect
类名称 net.xsoftlab.baike.TestReflect
类名称 net.xsoftlab.baike.TestReflect
类名称 net.xsoftlab.baike.TestReflect
类名称 net.xsoftlab.baike.TestReflect
3
3.1主入口
package net.xsoftlab.baike;
import com.in.tttt;
public class TestReflect extends tttt{
public static void main(String[] args) {
try {
Class<?> clazz = Class.forName("com.in.tttt");
Class<?> parentClass = clazz.getSuperclass();
System.out.println("clazz的父类为:" + parentClass.getName());
Class<?> intes[] = clazz.getInterfaces();
System.out.println("clazz实现的接口有:");
for (int i = 0; i < intes.length; i++) {
System.out.println((i + 1) + ":" + intes[i].getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
import com.in.tttt;
public class TestReflect extends tttt{
public static void main(String[] args) {
try {
Class<?> clazz = Class.forName("com.in.tttt");
Class<?> parentClass = clazz.getSuperclass();
System.out.println("clazz的父类为:" + parentClass.getName());
Class<?> intes[] = clazz.getInterfaces();
System.out.println("clazz实现的接口有:");
for (int i = 0; i < intes.length; i++) {
System.out.println((i + 1) + ":" + intes[i].getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.2父类
package com.in;
public class tttt implements dddd{
public void mm(){
System.out.println("ddd");
}
@Override
public void d() {
System.out.println("dd1");
}
}
3.3接口类
package com.in;
public interface dddd {
public void d();
}
运行结果:
clazz的父类为:java.lang.Object
clazz实现的接口有:
1:com.in.dddd