Class对象是所有类的根源,Object是所有对象的根源。
编译后的新类会产生一个Class对象,保存在同名的.class文件中。每个类都有一个Class对象,它包含了所有的与类有关的信息。所有的Class对象都是在第一次使用时,动态加载到jvm中的。
反射:在运行时打开和检查.class文件,通过来访问Class对象属性以及方法,Class类与java.lang.reflect类库一起对反射进行了支持。
import java.lang.reflect.Field;
import java.lang.reflect.Method;public class Student {
private String name; private int flag; public String sex;public String getName() {
return name; }public void setName(String name) {
this.name = name; }public int getFlag() {
return flag; }public void setFlag(int flag) {
this.flag = flag; }public boolean isRight(int flag) {
return flag > 60; }public String getSex() {
return sex; }public void setSex(String sex) {
this.sex = sex; } public static void main(String[] args) { try { Class<?> clazz = Class .forName("com.leadbank.basic.reflect.Student"); Object obj = clazz.newInstance(); Field[] field = clazz.getFields(); for (Field temp : field) { System.out.println(temp.getType() + "------" + temp.getName()); } Method[] method = clazz.getMethods(); for (Method temp : method) { System.out.println(temp.toGenericString() + "------" + temp.getName()); if (temp.toGenericString().contains("isRight")) { Integer i=80; Object o=temp.invoke(obj,i); System.out.println(o); } } } catch (Exception e) { e.printStackTrace(); } }}动态代理:通过反射机制动态访问类
接口
public interface Interface {
public String sysout(String name);
}
实现类
public class RealObject implements Interface {
public String sysout(String name) {
return "hello!" + name; }}
代理类
public class DynamicProxyHandler implements InvocationHandler {
private Object proxy;
public DynamicProxyHandler(Object proxy) {
this.proxy = proxy; }public Object invoke(Object obj, Method method, Object[] args)
throws Throwable { return method.invoke(proxy, args); }public static void main(String[] args) {
RealObject ro = new RealObject(); Interface proxy=(Interface) Proxy.newProxyInstance(Interface.class.getClassLoader(), new Class[]{Interface.class}, new DynamicProxyHandler(ro)); Object obj=proxy.sysout("jack"); System.out.println(obj); }}