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);
}

}

Class对象、反射、动态代理的更多相关文章

  1. 【Java核心技术】类型信息(Class对象 反射 动态代理)

    1 Class对象 理解RTTI在Java中的工作原理,首先需要知道类型信息在运行时是如何表示的,这是由Class对象来完成的,它包含了与类有关的信息.Class对象就是用来创建所有“常规”对象的,J ...

  2. 【译】11. Java反射——动态代理

    原文地址:http://tutorials.jenkov.com/java-reflection/dynamic-proxies.html 博主最近比较忙,争取每周翻译四篇.等不急的请移步原文网页. ...

  3. java 反射 动态代理

    在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...

  4. 深入理解Java反射+动态代理

    答:   反射机制的定义: 是在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为j ...

  5. 【对线面试官】Java 反射&&动态代理

    // 抽象类,定义泛型<T> public abstract class BaseDao<T> { public BaseDao(){ Class clazz = this.g ...

  6. 静态代理和利用反射形成的动态代理(JDK动态代理)

    代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 静态代理 1.新建 ...

  7. 深入分析Java反射(四)-动态代理

    动态代理的简介 Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分 ...

  8. Java反射机制以及动态代理

    Java反射机制以及动态代理 Java反射机制 含义与功能 Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类 ...

  9. JDK动态代理+反射实现动态修改注解属性值

    这是最近朋友的一个需求,正好闲来无聊有些时间,跟着研究一下,如有不正确的地方,欢迎大家指正~ 一.准备自定义注解 注:如何实现自定义注解,请移步百度. 二.实现 1.实现方式1:通过反射+动态代理动态 ...

  10. java静态和动态代理原理

    一.代理概念 为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代.代理类负责请求的预处理.过滤.将请求分派给委托类 ...

随机推荐

  1. 快速排序算法简述及python的实现

    def kp(arr, i, j): if i<j: #i=j时意味着一边只剩单个数据 base = kpgc(arr, i, j) kp(arr, i, base-1) #kp(arr, i, ...

  2. Robust and Communication-Efficient Federated Learning from Non-IID Data

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 以下是对本文关键部分的摘抄翻译,详情请参见原文. arXiv:1903.02891v1 [cs.LG] 7 Mar 2019 Abstra ...

  3. 这可能是最详细的解析HTTP走私攻击的文章

    前言 HTTP Desync Attacks也就是HTTP走私攻击,是我见到的比较有趣的一种攻击方式,这里来对这种漏洞进行介绍. TL;DR HTTP走私攻击利用了HTTP协议本身的问题:HTTP中存 ...

  4. quartz表(11张)

    /* Navicat Premium Data Transfer Source Server : 本地连接 Source Server Type : MySQL Source Server Versi ...

  5. java23种设计模式——六、适配器模式

    @ 目录 介绍 应用场景 优缺点 模式实现 源码在我的github和gitee中获取 介绍 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模 ...

  6. 封装Vue Element的dialog弹窗组件

    我本没有想着说要封装一个弹窗组件,但有同行的朋友在问我,而且弹窗组件也确实在项目开发中用的比较多.思前想后,又本着样式统一且修改起来方便的原则,还是再为大家分享一个我所封装的弹窗组件吧. 其实,并不是 ...

  7. 地图_SDK

    不仅仅是Google,您必须知道的全球十大地图API https://blog.csdn.net/u013068887/article/details/79322096

  8. app转iap

    ios打包ipa的四种实用方法(.app转.ipa) http://blog.csdn.net/oiken/article/details/49535369 手动压缩改后缀方式 这种方式与4.1的方法 ...

  9. rpc中的注册中心

    使用模板模式,对注册中心进行设计,可以方便后续添加注册中心 模板抽象类,提供注册中心必要的方法. public abstract class ServiceRegistry { //这是一个模板的抽象 ...

  10. 2020JavaWeb实现文件下载

    Servlet实现文件下载: package com.demo.test; import org.apache.commons.io.IOUtils; import javax.servlet.Ser ...