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

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.简单的实例

c25489436ec3d541a7e8f295c8582c28.png

通过反射。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);

}

}

结果

7b4d960db2ddffc9e44b31326a584680.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中的module是什么意思_Angular - 组件中module.id的含义是什么?

Update for (2017-03-13) :删除了所有提及的moduleId . “组件相对路径”cookbook已删除我们在我们推荐的SystemJS配置中添加了一个新的SystemJS插件(systemjs-angular-loader.js) . 此插件动态地将templateUrl和styleUrls中的“组件相对”路径转换为“绝对路径” .…

HTML跳转

Window.location.href"http://www.baidu.com/"转载于:https://www.cnblogs.com/hucaihao/p/3514165.html

Spring注释,我从来没有机会使用第1部分:@primary

今天,我想起了我的一个老朋友(primary),我们从教程到教程都遇到了他。 您知道在Spring Autowired批注中按类型工作,也就是说,如果Spring找到符合类型的匹配的合格bean,则会将其注入。让我们在示…

mysql构建栋_【转载】这次拆库 应是微服务化的拆分方式

一、现状现状.png我们将一个大而全的系统一拆为三,容器,发布,测试都已经独立出去,但是原始的数据库还是一套,现在需要将数据库做一个拆分,A、B、C三个系统有各自的数据库之后,我们的微服务化在现…

使用SharePoint 2010新增的文档集内容类型来管理文档

使用SharePoint 2010新增的文档集内容类型来管理文档 SharePoint 2010新增加的文档集功能是作为内容类型存在的,使用范围在网站集中,需要激活“文档集”功能到网站集才可以正常使用。文档集其实就是一个SharePoint产品增强的文件夹和内容类型的综合体现。…

如何使用Java 8流快速替换列表中的元素

假设您有一个项目清单&#xff1a; List<String> books Arrays.asList("The Holy Cow: The Bovine Testament","True Hip Hop","Truth and Existence","The Big Book of Green Design" );&#xff08;不要判断我。此随机书生成…

db2和mysql性能优化_DB2数据库性能调优的十个办法

这篇文章主要是针对e-business OLTP的10个性能方面的Tips。10. Monitor Switches打开Monitor Switch,才能获得性能方面的信息,命令如下db2 "update monitor switches using lock ON sort ON bufferpool ON uow ON table ON statement ON"9. Agents要保证有足够的agen…

处理远程通知的方法

IOS的一大特点就是可以随时向客户端push相关的信息。那么在客户端收到这些信息时&#xff0c;如何处理呢&#xff1f; 有两种情景需要处理&#xff0c; 一是&#xff1a;从状态栏下拉&#xff0c;点击通知栏里的一项&#xff0c;启动应用 二是&#xff1a;在锁屏界面&#xff0…

java merge into_Oracle merge into的使用

最近项目上使用Oracle的Merge&#xff0c;所以找来一下资料学习了解。该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中&#xff0c;使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动。特点&#xff1a;1、insert 和upd…

基于visual Studio2013解决算法导论之019栈实现(基于数组)

&#xfeff;&#xfeff;&#xfeff;题目用数组实现栈解决代码及点评#include <stdio.h> #include <stdlib.h> #include <time.h> #include <malloc.h> #include<assert.h>typedef struct Stack {int nTop;int nLen;int *pnArr; }Stack, *PSta…

关闭终端php就退出进程_解决windows下php-cgi进程经常自动关闭

php-cgi在linux中有fpm管理&#xff0c;Apache不是采用cgi这种模式&#xff0c;于是乎就出现了&#xff0c;在windows下&#xff0c;采用nginx时&#xff0c;开启的php-cgi监听非常不稳定&#xff0c;经常奔溃关闭。现在解决了这个问题。注意是win32位系统下解决的&#xff0c;…

九度OJ 1437 To Fill or Not to Fill -- 贪心算法

题目地址&#xff1a;http://ac.jobdu.com/problem.php?pid1437 题目描述&#xff1a; With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from …

php为什么获取不到id,微信小程序无法获取到unionId怎么办

UnionID机制说明如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序)&#xff0c;可通过unionid来区分用户的唯一性&#xff0c;因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序)&#xff0c;用户的unionid是唯一的。换句话说&#x…

不同类型的变量在内存中存储的详细情况

原文链接&#xff1a;http://blog.csdn.net/qingkong8832/article/details/6687793 一、int型变量在内存中存储详细情况 //By Richard #include <stdio.h> #include <math.h>int main() {int i10;int i21;int i3-1;int i4127;int i5-127;int i6128;int i7-128;int …

php 修改文件访问时间,php获取文件的创建、修改时间及访问时间

filemtime() 函数返回文件内容上次的修改时间若成功&#xff0c;则时间以 Unix 时间戳的方式返回。若失败&#xff0c;则返回 false。语法 : filemtime(filename)参数描述filename必需。规定要检查的文件。说明本函数返回文件中的数据块上次被写入的时间&#xff0c;也就是说&a…

数据包分析

通过对数据包的分析&#xff0c;我们可以判断通信双方的操作系统、网络信息流量、经过的路由、数据包的大小&#xff0c;以及数据包的内容等等。对于喜欢网络安全的人来说&#xff0c;掌握这方面的知识是相当重要的。现在的网络通信中&#xff0c;大部分数据都没有加密&#xf…

php-5.2.6安装,php5.2.6安装openssl.o扩展,make时报错?

问题&#xff1a;调试支付宝支付时报错&#xff1a;Fatal error: Call to undefined function openssl_get_privatekey()在网上查了 说是没有安装openssl.so扩展。通过 phpize安装扩展&#xff0c;但是make时报错&#xff1a;/bin/sh /opt/php-5.2.6/ext/openssl/libtool --mod…

highcharts第一篇---简介和使用

Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表&#xff0c;并且免费提供给个人学习、个人网站和非商业用途使用。HighCharts支持的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表 具体参考&a…

php中数字可以加字符吗,在php中,怎么样把数字转化为字符串

PHP的数据类型转换属于强制转换&#xff0c;允许转换的PHP数据类型有&#xff1a;(int)、(integer)&#xff1a; 转换成整形(float)、(double)、(real)&#xff1a; 转换成浮点型(string)&#xff1a; 转换成字符串(bool)、(boolean)&#xff1a; 转换成布尔类型(array)&#x…

CUBA平台–新的Java企业应用程序框架

所以..你好&#xff0c;世界&#xff01; 我们的英语网站终于可以正常使用了&#xff0c;现在每个人都可以下载该平台&#xff0c;并可以以前所未有的速度更快地创建业务应用程序。 在我们决定与国际Java社区共享足够好之前&#xff0c;我们花了六年的永久发展和偶尔的革命&…