一、语言的动态性介绍

强类型语言(静态类型语言)是指需要进行变量/对象类型声明的语言,一般情况下需要编译执行。例如C/C++/Java

/C#弱类型语言(动态类型语言)是指不需要进行变量/对象类型声明的语言,一般情况下不需要编译(但也有编译型

的)。

二、java语言的动态性----反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都

能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

三、反射相关的API

1.java.lang包下
Class<T>:表示一个正在运行的 Java 应用程序中的类和接口,是Reflection的起源

2.java.lang.reflect包下
Field 类:代表类的成员变量(也称类的属性)
Method类:代表类的方法
Constructor 类:代表类的构造方法
Array类:提供了动态创建数组,以及访问数组的元素的静态方法.

四、Class<T>

1.类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象

2.Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自

动构造的,因此不能显式地声明一个Class对象

3.Class是Reflection起源。要想操纵类中的属性和方法,都必须从获取Class object开始

五、获取Class Object的方法

六、通过反射实例化对象

平常情况我们通过new Object来生成一个类的实例,但有时候我们没法直接new,只能通过反射动态生成。
实例化无参构造函数的对象,两种方式:
①Class. newInstance();
②Class. getConstructor (new Class[]{}).newInstance(new Object[]{})
实例化带参构造函数的对象:
clazz. getConstructor(Class<?>... parameterTypes) . newInstance(Object... initargs)

首先我们新建一个JavaBean—User,User继承自另一个Bean—BaseUser。

举例准备

实例化

七、通过反射动用Method(方法)

1. 获得当前类以及超类的public Method:
Method[] arrMethods = classType. getMethods();

2. 获得当前类申明的所有Method:
Method[] arrMethods = classType. getDeclaredMethods();

3. 获得当前类以及超类指定的public Method:
Method method = classType. getMethod(String name, Class<?>... parameterTypes);

4. 获得当前类申明的指定的Method:
Method method = classType. getDeclaredMethod(String name, Class<?>... parameterTypes)

5.通过反射动态运行指定Method:
Object obj = method. invoke(Object obj, Object... args)

八、通过反射调用Field(变量)

1.  获得当前类以及超类的public Field:
Field[] arrFields = classType. getFields();

2. 获得当前类申明的所有Field:
Field[] arrFields = classType. getDeclaredFields();

3. 获得当前类以及超类指定的public Field:
Field field = classType. getField(String name);

4. 获得当前类申明的指定的Field:
Field field = classType. getDeclaredField(String name);

5. 通过反射动态设定Field的值:
fieldType.set(Object obj, Object value);

6. 通过反射动态获取Field的值: 
Object obj = fieldType. get(Object obj) ;

九、JAVA反射总结

1. 只要用到反射,先获得Class Object

2. 没有方法能获得当前类的超类的private方法和属性,你必须通过getSuperclass()找到超类以后再去尝试获得

3. 通常情况即使是当前类,private属性或方法也是不能访问的,你需要 设置压制权限setAccessible(true)来取得

private的访问权。但说实话,这已经破坏了面向对象的规则,所以除非万不得已,请尽量少用。

JAVAJ基础学习之反射机制相关推荐

  1. JAVA基础,注解反射机制

    文章目录 注解 (非常重要) 什么是注解 基本注解 @Override @Deprecated @SuppressWarnings @SafeVarargs @FunctionalInterface ...

  2. [java学习] java_反射机制

    摘自http://baike.baidu.com/view/3454964.htm#5 反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-r ...

  3. Java 学习之反射机制“解刨”分解类,并获取内容!

    正常情况下,单纯的做开发是接触不到反射机制的(额,当然并不排除例外的情况了).下面我就对我学到的反射方面的知识做一个小小的总结,旨在复习和以后的查看. 原理分析: 所谓反射就是将一个类当做我们研究的对 ...

  4. Java基础篇:反射机制详解

    反射机制 反射机制.反射含义 1.利用反射获取类对象的三种方法 2.利用反射获取类对象的类名.方法.属性 3.利用反射获取类对象中的构造器.构造器参数类型.实例化构造器 实例化重点 类的加载方式不同 ...

  5. 大数据Java基础之Java反射机制

    欢迎关注公众号,一起进步,共同成长. 15-1 Java反射机制概述 15-2 理解Class类并 获取Class的实例 15-3 类的加载 与ClassLoader的理解 15-4 创建运行时类的对 ...

  6. Android插件化开发基础之Java反射机制研究

    一.获得Class对象 Class<?> c = Class.forName("classname"); 抛出ClassNotFoundException 二.获得实现 ...

  7. Mars3D开发基础学习:Property属性机制

    平台是数据驱动和 time-dynamic visualization,这些可都是仰仗Property属性机制来实现的. Property最大的特点是和时间相互关联,在不同的时间可以动态地返回不同的属 ...

  8. Java反射机制再学习

    Java反射机制的学习 Java反射机制的学习 转自:http://www.blogjava.net/zh-weir/archive/2011/03/26/347063.html 总结的很到位,记录下 ...

  9. 反射 数据类型_Java基础:反射机制详解

    一.什么是反射: (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法.本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取t对 ...

最新文章

  1. ORA-01658:Unable to create INITIAL extent for segment in tablespace %s
  2. JavaScript 中常见设计模式整理
  3. 采样干扰十大滤波算法程序大全
  4. python : pandas库的后继者polars库
  5. 计算机导论中如何求模,计算机导论作业答案
  6. c语言实验上机报告,c语言上机实验报告_实验报告.doc
  7. matlab j计算丰水期的值,科学计算与MATLAB语言超星2020期末考试查题公众号答案
  8. 文通互联网图片文字识别系统
  9. unl导入导出数据库
  10. VMware虚拟机与windows主机之间相互复制粘贴
  11. 35、矩阵(稀疏矩阵)的压缩存储(一)
  12. npm install xxx 出现Unexpected token < in
  13. 百度图片下载器2.0
  14. 第1条:考虑采用静态工厂方法代替构造器
  15. scala.Predef$.$conforms()Lscala/Predef$$less$colon$less;
  16. Java中mysql的读写分离_mysql读写分离
  17. 简单快速建立pytorch环境YOLOv5目标检测 模型跑起来(超简单)
  18. 软件工程师安德烈·梅萨加冕世界小姐
  19. hadoop安装Snappy HBase本地安装Snappy
  20. 中国铁塔成立6周年 | 致敬时光,致敬奋斗者!

热门文章

  1. mysql视图中数据如何修改_怎么修改Mysql数据表中的视图
  2. 中国地形图(大陆部分,不含岛屿).tif
  3. # PyTorch学习笔记(15)--神经网络模型训练实战
  4. 生活娱乐 冯增最牛的房车
  5. 商城系统(SpringBoot后端+Vue管理员前端+微信小程序)正式开源啦!
  6. grep 满足 或 排除多个关键字
  7. deepin/UOS自带浏览器安装插件
  8. PVE系统+NAS+WEB 折腾笔记 :3-安装黑群晖
  9. 一个基于Tensorflow的神经网络机器翻译系统
  10. Idea自动补全热键被win10系统占用