Reflection

反射能在运行时获取一个类的全部信息,并且可以调用类方法,修改类属性,创建类实例。

而在编译期间不用关心对象是谁

反射可用在动态代理,注解解释,和反射工厂等地方。

---------------------

public class BasicTest {public static void main(String[] args) throws Exception {Demo demo = new Demo(10,"moss");// 所有类的对象都是Class的实例Class<?> clazz = null;Class<?> clazz2 = null;//获取类对象clazz = Class.forName("demos.reflection.Demo");clazz2 = Demo.class;clazz2 = demo.getClass();Q.p(clazz.getClass());Q.p(clazz==clazz2);// 使用默认构造函数 创建一个新的实例  demo = (Demo) clazz.newInstance();demo.me();//获取所有public的构造函数Constructor<?>[] con =clazz2.getConstructors(); Q.pl(con);//使用自定义构造函数 创建一个新的实例  demo=(Demo) con[1].newInstance(100,"jack");demo.me();//获取超类 接口
        Q.p(clazz.getSuperclass());Q.pl(clazz.getInterfaces());//获取所有属性,不包括继承的Field[] fields = clazz.getDeclaredFields();Q.pl(fields);//获取无参函数,调用无参函数Method method=clazz.getMethod("me");Q.p("method "+method);method.invoke(clazz.newInstance());//获取有参函数,调用有参函数 method = clazz.getDeclaredMethod("you", int.class,String.class);Q.p("method2 "+method);method.invoke(clazz.newInstance(), 19, "you");//获取所有方法,不包括父类的, 可通过getMethods()获取全部的Method[] methods = clazz.getDeclaredMethods();Q.pl(methods);//给属性赋值Field field = clazz.getDeclaredField("name");field.setAccessible(true);field.set(demo, "reSetName");Q.p(demo.getName());//获取注解method = clazz.getMethod("toString");Annotation[] as = method.getDeclaredAnnotations();Q.pl(as);}
}

class Father{protected String father;
}interface Interface{}public class Demo extends Father implements Interface{private static String k = "k";private Integer id;private String name;Demo(){}public Demo(String name){this.name=name;}public Demo(int id, String name){this.id=id;this.name=name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void me() {Q.p("["+id+"----"+name+"]");}public void you(int id, String name){Q.p("["+id+"----"+name+"]");}@Overridepublic String toString(){return "["+id+"----"+name+"]";}}

---------------------

end

转载于:https://www.cnblogs.com/luangeng/p/6032011.html

Java基础--反射Reflection相关推荐

  1. [Java基础] 反射机制汇总

    引言 初学Java反射机制的时候,只是感觉很神奇,但是不知道学了该怎么用,所以过了一段时间就忘得差不多了:最近接触到了框架,在学习中遇到了反射,深深体会到了反射机制的神奇,回来复习了一下反射机制,写一 ...

  2. 16、Java 基础-反射

    Java 反射 1.反射 反射是指程序可以访问.检测.修改它本身的状态或行为的一种能力. 2.Java的反射机制 java的反射机制是指在程序的运行状态中,给定任意一个类,都可以获取到这个累的属性和方 ...

  3. java基础反射知识总结_非常好的Java基础反射总结

    前言疯狂复习基础ing- 最近复习的Jv基础反射做了应该总结,果然反射不只有那么一点点东西,多的是精髓! 最重要的是最后推荐的那两篇文章,写的非常非常好!!反射 1.反射的原理Jv反射机制就是在运行状 ...

  4. Java基础—反射—简单介绍

    一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见的 JavaScript 就是动态语言,除此之外 Ruby,Python 等也属于 ...

  5. Java基础-反射机制

    目录 1.反射机制概述 2.获取class的三种方式 2.1.Class.forName()方式 2.2.obj.getClass()方式 2.3..class方式 3.通过反射实例化对象 4.通过读 ...

  6. Java基础——反射.

    反射 反射是什么? Class类 利用反射还原类 通用toString() 通用数组拷贝 反射是什么? 能够分析类能力的程序称为反射,利用反射能够编写动态操作Java代码的程序 Class类 每个对象 ...

  7. Java基础反射简介

    反射机制问题 1.根据配置文件re.properties指定信息,创建Cat对象并调用方法hi //res.properties classfullpath=com.hspedu.Cat method ...

  8. [Java基础]反射获取成员方法并使用

    代码如下: package ClassObjectPack01;import ClassObjectPack.Student;import java.lang.reflect.Constructor; ...

  9. [Java基础]反射获取成员变量并使用

    代码如下: package ClassObjectPack;public class Student {private String name;int age;public String addres ...

最新文章

  1. 转载——Java与WCF交互(一):Java客户端调用WCF服务
  2. HTTPS 的工作原理
  3. Emacs常用快捷键
  4. 【C++基础】模板参数与模板继承
  5. matlab求偏微分方程程序,用MATLAB解偏微分方程.pdf
  6. 本地调试微信程序ngrok
  7. opencv3.4.1 + vs 2017 + cmake 3.11.3 + win10 配置. 终章
  8. html中怎么点按钮切换图片,如何只用css实现点击按钮切换图片
  9. Atitit.biz业务系统 面向框架  面向模式---------数据映射imp
  10. 经典的Java算法面试题
  11. RED GIANT-2023版本更新内容介绍
  12. MFC Rect 的详解
  13. android模拟器横屏快捷键,Android模拟器横屏切换方法
  14. 功放限幅保护_【干货】如何利用限幅器保护音箱√
  15. MATLAB text的“关键字”
  16. [LiteratureReview]EAO-SLAM Monocular Semi-Dense Object SLAM Based on Ensemble Data Association
  17. 深入浅出SQL读书笔记
  18. java 静态区在jvm哪里,JDKJREJVM这三者的联系与区别///java跨平台///堆栈常量区静态区...
  19. c++ 结构体和vector进行lower_bound和upper_bound
  20. 力扣1705——吃苹果的最大数目(贪心+优先队列)

热门文章

  1. 一个Java程序员的阿里面试心得,附答案解析
  2. 【响应式Web前端设计】!important的用法及作用
  3. Keras【Deep Learning With Python】机器学习和线性回归
  4. python【力扣LeetCode算法题库】面试题 01.07- 旋转矩阵
  5. mysql锁与程序锁_数据库加锁(转)
  6. oracle执行计划走索引类型,SQL执行计划问题:where条件是主键(NUMBER类型字段)LIKE  :VAR,为什么执行计划不走索引?...
  7. (2)搞一搞 seata 之 Spring Cloud 整合
  8. 网站降低用户跳出率的常见技巧有哪些?
  9. 如何有效建设网站外链?
  10. mysql8.0.19.0安装_一、MySQL8.0.19 安装教程