1.什么是动态语言?

程序运行时,可以改变程序的结构或者变量类型;如Python,javaScript

function(){

var s="var a=3;var b=4;" evals(s);

}

在执行javascript代码的的过程中,可以改变变量的值或插入语句改变结构。

但Java,c 并不是动态的语言

不过我们可以利用反射的机制,字节码的操作等获得动态语言的特性,使得Java的编程更加灵活。

2.反射(reflection)

----程序已经运行,但依然可以加载,探知使用编译期间完全未知的类

----在程序运行的时候,可以只根据类的名称,来动态加载一个类。

对于任意一个已经加载的类,我们都能知道它的所有属性和方法,对于任意一个对象,我们都能调用它的方法和属性。

----Class  clz  = Class.forName("包名.类名“)

-----加载完类之后,会在堆的内存中产生一个Class类型的对象(一个类只有一个Class对象),这个对象包含了类的完整的结构信息,通过这个对象,

我们可以看到类的结构信息,它就像一面镜子,所以称之为反射。

2.简单的实例

通过反射。User类的结构信息就会被保存到clz对象中。

另外获取Class对象的方法

1.类名.class()  如(int.class  User.class)

2.对象名.getClass()

3.反射的作用

--动态加载类,获取类的(属性,方法)

Class  clz  = Class.forName("包名.类名“)

--动态构造对象

User u = clz.getDeclaredsConstructor ( "形参类型.class"....).newInstance();

--动态调用类的任意方法,构造器

Methods []arr = clz.getDeclaredtMethods()(获得所有方法)

Methods method = clz.getDeclaredMethods("方法名", "方法的形参类型.class")

Constructor [] arr = clz.getDeclaredConstructors()(获得所有的构造器)

Constructor constructor = clz.getDeclaredsConstructor ( "形参类型.class"....)

--动态调用处理属性

Fileds[] array = clz.getFields();(只能获得Publicb属性的变量)

Fileds[] array =  clz.getDeclaredFields()(获得所有属性)

Filed  field =  clz.getDeclaredFields("指定名称的属性")

--动态获取泛型信息

--处理注解

4.实例

package com.ljl.reflection;

import java.lang.reflect.Method;

public class ReflectionTest1 {

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

Class clz = Class.forName("com.ljl.reflection.User");

System.out.println(clz);

//通过反射构造对象

User u1 = (User) clz.getConstructor().newInstance();

System.out.println(u1);

//通反射API调用普通方法

Method method1 = clz.getDeclaredMethod("setId", int.class);

method1.invoke(u1, 001);

Method method2 = clz.getDeclaredMethod("setName", String.class);

method2.invoke(u1, "panda");

//u1.setId(001);u1.setName("panda");相同

System.out.println(u1);

//通过反射Api操作属性

java.lang.reflect.Field f = clz.getDeclaredField("id");

//若属性私有,不能操作,将会报错。

//设置:不做安全检查

f.setAccessible(true);

f.set(u1, 002);

System.out.println(u1);

}

}

结果

java动态变量名反射_Java动态性—反射 - Eclipse666的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java枚举变量带括号_java枚举类型 - 墨梅的个人空间 - OSCHINA - 中文开源技术交流社区...

    public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般 ...

  2. java io 读取配置文件_java读取配置文件 - tomzhao2008的个人空间 - OSCHINA - 中文开源技术交流社区...

    对于要打包成jar文件来运行来说,用file是会有问题的,下面的程序可以解决这样的问题 1.ReadPropsUtil /** * */ package readproperties; import ...

  3. java的异常解析_java异常解析 - liop的个人空间 - OSCHINA - 中文开源技术交流社区...

    抛出异常,捕捉异常,输出异常. /** * 自定义异常类 */ public class CustomerException extends RuntimeException { private St ...

  4. 直白点理解c 语言中的循环体,反射机制 小小谈 - osc_nnbkiac5的个人空间 - OSCHINA - 中文开源技术交流社区...

    反射机制(Reflection) [TOC] 写在前面 本文地址:https://www.cnblogs.com/oberon-zjt0806/p/11082012.html 这里是Oberon 本文 ...

  5. java知识理论_JAVA理论知识 - OSC_rnoszD的个人空间 - OSCHINA - 中文开源技术交流社区...

    1. final关键字可以用来修饰什么?分别起什么作用? a) final可以修饰类,这样的类不能被继承. b) final可以修饰方法,这样的方法不能被重写. c) final可以修饰变量,这样的变 ...

  6. java 数组减除值_java数组操作 - osc_hwpd2zko的个人空间 - OSCHINA - 中文开源技术交流社区...

    什么是数组: 程序 = 算法+数据结构 算法:解决问题的步骤,流程(顺序,分支,循环) 数据结构:将数据按照某种特定的结构来保存 数怎么存 设计良好的,合理的数据结构可以导致好的算法 数组:就是一种最 ...

  7. java io流拒绝访问_JAVA IO流 - 张宏良的个人空间 - OSCHINA - 中文开源技术交流社区...

    IO流 一.File类的使用 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身 ...

  8. java 的“mwq”_java的对象模型 - osc_mwqvsfzo的个人空间 - OSCHINA - 中文开源技术交流社区...

    java中的对象在内存中,究竟是怎样一种存在? 这篇随笔,我们就来一探究竟.可能不够深入,但是我们把理解到位,深入到我们需要的程度这样即可. 先来看下jvm的内存模型: 程序计数器 虚拟机栈和本地方法 ...

  9. java web远程调试工具_java远程调试 - Dendy的个人页面 - OSCHINA - 中文开源技术交流社区...

    新接手的项目采用的是Maven作为编译管理工具,项目内容则是按子模块Module来划分.由于模块太多,且都比较大(基本上都能独立运行并负责处理一方面的业务),并采用Socket来进行模块之间的数据通信 ...

最新文章

  1. c++ 析构函数 ~
  2. FastReport的模板文件frx文件啊怎样打开并编辑修改
  3. MySQL复习资料(四)——MySQL-聚合函数
  4. linux 下串口转usb不能发送数据包,红帽redhat下 串口转USB问题 linux
  5. 代码 纪录 软件_「软件资料」-「资讯动态」-软件开发类项目关键文档内容要求...
  6. 电影推荐系统 python简书_分析9000部电影|一个简单的电影推荐系统
  7. 集合框架(Vector的特有功能)
  8. 数字集成电路设计之加法器
  9. 深度解密微信疯读狂加粉的伎俩
  10. scsi是工作站和服务器硬盘,高速SAS硬盘与SCSI硬盘技术对比
  11. android分析声音中的节奏,[AndroidTips]调用TextToSpeech朗读的时候怎么中间停顿
  12. centos6 yum 阿里源 配置
  13. 做直播能有多赚钱,Python告诉你
  14. Python的学习之旅第一站:基本语法
  15. 【Verilog】inout 端口信号的使用
  16. rcwa matlab,rcwa-1d_4_6_2014 1维严格耦合波分析matlab程序 适用于一维光栅 可计算多层结构 256万源代码下载- www.pudn.com...
  17. desktoplayer.exe病毒及d:\w7rtm\base\wcp\sil\merged\ntu\ntsystem.cpp的解决方案
  18. 学术期刊划分(SCI、EI、SSCI、IEEE、CSSCI等)
  19. 电脑桌面云便签怎么设置自动识别超链接?
  20. SAP_PS常用增强

热门文章

  1. php nginx 域名重定向,Nginx默认虚拟主机、用户认证、域名重定向
  2. (3.4)HarmonyOS鸿蒙滑动事件三个动作
  3. 鸿蒙10 5G手机,继鸿蒙后麒麟V10问世 5G时代国产操作系统将起飞
  4. 第一单元总结:基于基础语言、继承和接口的简单OOP
  5. hdu 3016 Man Down
  6. vue element-ui IE9--11报 “无法获取未定义或null引用的属性‘toLowerCase’”
  7. Html_Img元素 设置图片与其他元素横排高度一致
  8. 对PostgreSQL SPI例子的学习
  9. Tiny Wings 为什么能迅速成为 iOS App Store 付费应用第一名?
  10. MDK升级后的头文件冲突