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,一经查实,立即删除!

相关文章

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

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

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

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

基于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;…

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

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

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

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

Abiword页面布局

Abiword页面布局 AP_Win32FrameImpl::_DocumentWndProc 文档窗口过程函数在WM_SIZE消息中设置FV_View对象的整体尺寸&#xff0c;跟窗体的&#xff1a;设备单位 转换成&#xff1a;布局单位。m_iWindowWidth 19695&#xff0c;m_iWindowHeight 8520 设备单位和布局单位的比例是…

php 文件内容对比,php 比较两个文件是否相同

-### php比较两个文件是否相同小一点的文件直接实用内置函数就可以了function md5_files($filename,$filename1){$file1 md5_file($filename);$file md5_file($filename1);if($file $file1){return "文件相同";}else{return "文件不同";}}md5_file()…

今日心得:给自己写信

1.tomorrow is another day 2.有一种人一认识就觉得温馨 3.这个世界只在乎你是否达到了一定的高度&#xff0c;不在乎你是站在巨人的肩膀还是垃圾上上去的 4.花儿总要在风雨的洗礼下盛开 5.有一种“无能为力”叫宿命 6.幸福是什么&#xff1f;有很多幸福的瞬间&#xff0c;幸福…

Hibernate READ_WRITE CacheConcurrencyStrategy如何工作

介绍 在我以前的文章中&#xff0c;我介绍了NONSTRICT_READ_WRITE二级缓存并发机制。 在本文中&#xff0c;我将使用READ_WRITE策略继续本主题。 直写式缓存 NONSTRICT_READ_WRITE是一种通读缓存策略&#xff0c;可更新最终无效的缓存条目。 尽管这种策略可能很简单&#xff0…

java hashmap替换key,HashMap 用可变对象作为 key 踩坑

点击上方☝Java编程技术乐园&#xff0c;轻松关注&#xff01;及时获取有趣有料的技术文章做一个积极的人编码、改bug、提升自己我有一个乐园&#xff0c;面向编程&#xff0c;春暖花开&#xff01;作者&#xff1a;Icharlehttps://icharle.com/hashmapkebianobj.html前言在 Ja…

(转)Eclipse平台技术概述

转载&#xff1a;周金根 http://zhoujg.blog.51cto.com/1281471/516833Eclipse&#xff1a;Eclipse平台技术概述2010-10-19 13:35:00标签&#xff1a;Eclipse 休闲 职场原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明…

带有光纤的可扩展,健壮和标准的Java Web服务

这篇博客文章讨论了负载下的基准Web服务性能。 要了解有关Web服务性能理论的更多信息&#xff0c;请阅读利特尔定律&#xff0c;可伸缩性和容错 。 使用阻塞和异步IO对Web服务进行基准测试 Web应用程序&#xff08;或Web服务&#xff09;如何在负载下&#xff0c;面对各种故障…

php js 图片旋转,jQuery实现可以控制图片旋转角度效果

本文实例讲述了jQuery实现可以控制图片旋转角度效果。分享给大家供大家参考&#xff0c;具体如下&#xff1a;运行效果截图如下&#xff1a;具体代码如下&#xff1a;/p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">img { margin-top:100px; m…

【OAuth】快速入门

一、引言 1、什么是OAuth2.0&#xff1f; OAuth 2.0是一个关于授权的开放网络协议&#xff0c;允许用户授权第三方应用访问其在服务提供商上存储的资源&#xff08;如照片、视频、联系人列表&#xff09;&#xff0c;而无需将用户名和密码提供给第三方应用。OAuth 2.0在第三方应…

jert oracle 统计说明,Oracle JET简单入门(一)Oracle JET介绍

Oracle JET (Oracle Javascript Extension Toolkit)是一款 Oracle 的 JavaScript 拓展工具包。简单来说 Oracle JET 是一个一堆好用的前端工具结合体。Oracle JET 文档链接 http://docs.oracle.com/middleware/jet310/jet/developer/toc.htmOracle JET支持 Model-View-ViewMod…

SELECT语句使用JDBC和Hibernate批量获取

介绍 现在&#xff0c;我已经介绍了Hibernate对INSERT &#xff0c; UPDATE和DELETE语句的批处理支持&#xff0c;是时候分析SELECT语句结果集的批量提取了。 JDBC ResultSet提供了一个客户端代理游标&#xff0c;用于获取当前语句的返回数据。 执行该语句后&#xff0c;必须将…

Spring环境的搭建与测试 (spring2.5.6)

这里是采用的视频里面的spring版本 下载spring2.5.6&#xff0c; 然后进行解压缩&#xff0c;在解压目录中找到下面jar文件&#xff0c;拷贝到类路径下 dist\spring.jar lib\jakarta-commons\commons-logging.jar 上边两个是基本的jar包。。 如果使用了切面编程(AOP),还需要下列…

如何使用Hibernate批处理INSERT和UPDATE语句

介绍 JDBC长期以来一直为DML语句批处理提供支持。 默认情况下&#xff0c;所有语句都一个接一个地发送&#xff0c;每个语句都在单独的网络往返中发送。 批处理使我们能够一次性发送多个语句&#xff0c;从而节省了不必要的套接字流刷新。 Hibernate将数据库语句隐藏在事务后写…

linux 查看系统组账号密码是什么,Linux 用户与组管理详解(system-config-users 命令行)...

用户与组管理用户相关文件组账号相关文件用户和组管理软件&#xff1a;基于命令行的用户和组管理创建用户查看用户信息删除用户修改用户信息为用户创建密码更改用户密码信息创建组删除组查看当前登录到系统的用户用户与组管理什么是用户&#xff0c;用户是人吗&#xff1f;用户…