java类中获取全局变量_java 通过反射获取类的全局变量、方法、构造方法

package com.str;

public class ZiFuChuan {

public static String ss = "全局变量!!!!!!";

String s2 = null;

public int aa = 1 ;

int aa2;

double dou = 1.1;

Double d = new Double(1.1);

public static void main(String[] args) {}

public ZiFuChuan(){}

public ZiFuChuan(String st){}

public ZiFuChuan(int orgInt,String orgString){}

public static void tmpArr(int a[],String s,StringBuffer s2){}

}

package com.fanshe;

import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.lang.reflect.Modifier;

import java.lang.reflect.Type;

import com.str.ZiFuChuan;

public class GetClass {

public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InstantiationException {

// TODO Auto-generated method stub

Class classS = ZiFuChuan.class;

//获取包

Package classPackage = classS.getPackage();

System.out.println("package "+classPackage.getName());

//获取类的修饰符

int mod = classS.getModifiers();

String classModifier = Modifier.toString(mod);

System.out.println(classModifier + " class ZiFuChuan {");

//调用全局变量方法

getFieldContent(classS);

//调用构造方法

getConstructorContent(classS);

//调用其他方法

getMethodContent(classS);

System.out.println("}");

}./*欢迎加入java交流Q君样:909038429一起吹水聊天

/**

* 获取所有全局变量

* @param classS

* @throws IllegalAccessException

* @throws IllegalArgumentException

* @throws InstantiationException

*/

public static void getFieldContent(Class classS) throws IllegalArgumentException, IllegalAccessException, InstantiationException{

String typeName = "";

Field[] field = classS.getDeclaredFields();

for(Field fi : field){

typeName = fi.getType().getName();

String xsfTmp = Modifier.toString(fi.getModifiers()) ;

//全局变量有修饰符的在变量前加修饰符并且修饰符和数据类型之间用空格分隔,否则不需要加空格

String xiushifu = xsfTmp.length() == 0 ? "" : xsfTmp + " ";

String value = getValue(typeName,fi,classS);

if("null".equals(value)||value == null||"null;".equals(value)){

System.out.println(" "+xiushifu+typeName+" "+fi.getName()+"; ");

}else{

System.out.println(" "+xiushifu+typeName+" "+fi.getName()+" = " + getValue(typeName,fi,classS));

}

}

}

public static void getConstructorContent(Class classS){

Constructor[] con = classS.getConstructors();

for(Constructor c : con){

int mod = c.getModifiers();

String ConstructorModifier = Modifier.toString(mod);

String constructorParameter = getConstructorParameter(c);

System.out.println(" "+ConstructorModifier+" " + c.getName() + "("+constructorParameter+"){");

System.out.println(" }");

}

}

/**

* 获取构造方法中的参数

* @param c

* @return

*/

public static String getConstructorParameter(Constructor c){

String qxTemp = "";

String qx = "";

int con = 0;

Class[] parameterTypeArr = c.getParameterTypes();

//获取构造方法中的参数

for(Class clas : parameterTypeArr){

qxTemp += clas.getTypeName() + " org"+con+",";

con++;

}

int qxTempLength = qxTemp.length();

//去掉空参的构造方法

if(qxTempLength > 0){

qx = qxTemp.substring(0, qxTempLength-1);

}

return qx;

}

/**

* 获取除构造方法外其他的方法的逻辑

* @param classS

*/

public static void getMethodContent(Class classS){

Method[] method = classS.getDeclaredMethods();

for(Method m : method){

int mod = m.getModifiers();

String methodModifier = Modifier.toString(mod);

//获取方法返回值类型

Type type = m.getGenericReturnType();

String methodParameter = getMethodParameter(m);

System.out.println(" "+methodModifier +" "+ type.getTypeName() +" " + m.getName() + "("+methodParameter+"){");

System.out.println(" }");

}

}

/**

* 获取其他方法的参数

* @param m

* @return

*/

public static String getMethodParameter(Method m){

String qxTemp = "";

String qx = "";

int con = 0;

Class[] parameterTypeArr = m.getParameterTypes();

//获取构造方法中的参数

for(Class clas : parameterTypeArr){

qxTemp += clas.getTypeName()+" org"+con+",";

con++;

}

int qxTempLength = qxTemp.length();

//去掉空参的构造方法

if(qxTempLength > 0){

qx = qxTemp.substring(0, qxTempLength-1);

}

return qx;

}./*欢迎加入java交流Q君样:909038429一起吹水聊天

/**

* 全局变量初始化值

* @param typeName

* @param fi

* @param classS

* @return

* @throws IllegalArgumentException

* @throws IllegalAccessException

* @throws InstantiationException

*/

public static String getValue(String typeName,Field fi,Class classS) throws IllegalArgumentException, IllegalAccessException, InstantiationException{

String value = "";

Object obj = classS.newInstance();

fi.setAccessible(true);

String[] types = {"java.lang.Integer",

"java.lang.Double",

"java.lang.Float",

"java.lang.Long",

"java.lang.Short",

"java.lang.Byte",

"java.lang.Boolean",

"java.lang.Character",

"int","double","long","short","byte","boolean","char","float"};

for(String str : types) {

if(fi.getType().getName().equals("java.lang.String")){

Object fiObj = fi.get(obj);

//判断变量是否初始化

if(fiObj != null){

//String 类型参数需要用双引号扩上

value = "\""+fiObj.toString()+"\";";

}else{

value = null;

}

}else if(fi.getType().getName().equals(str)){

value = fi.get(obj).toString()+";";

}

}

return value;

}

}

仅通过java反射机制没有想到获取方法体的办法,有知道的大神,还请不吝赐教

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

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

相关文章

java phantomjs 截图_phantomjs 截图

phantomjs 截图,多个setTimeout是为了让页面尽量加载完整/**截图test.js**/var page require(webpage).create();page.viewportSize { width: 1024, height: 600 };page.open(http://www.2345.com/, function(status) {var bb page.evaluate(function(){// window…

JAVA如何隐藏异常堆栈_java – 如何在控制台上停止打印异常堆栈跟踪?

这是我做的这样的战争作为工作。添加一个过滤器并劫持所有的请求和响应。检查异常并检查类型。/*** Hijacks all the http request and response here.* Catch the SocketException and do not print* If other exceptions print to console* date : 9-18-2013** author Suresh…

阿里最新php面试题及答案,面经网-阿里php面试题(四)

阿里php面试题(四)1.表单中 get与post提交方法的区别?答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.2.session与cookie的区别?答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_…

php 条形码生成器,PHP条形码图像生成器

这是一个用于生成barocdes的简单PHP脚本://For displaying barcodes//Arguments are:// code Number you want outputted as a barcode//You can use this script in two ways:// From a webpage/PHP script // Directly in your web browser http://www.example.co…

php怎么把日期加时间,将小时分钟添加到日期时间 - php

任何人都可以帮助我解决长时间困扰的问题,我正在尝试添加时间,例如格式为h:ia的小时和分钟,格式为01:00(一个小时),00:30(30分钟), 02:00(两个小时)等。在php中。因为我有几个小时,例如(00:30,01:00,01:30,…

php keep user login,php5.4安装dedecms登录后台空白解决办法(session_register函数已废弃)...

本地安装dedecms5.7登录后台空白,找了原因,原来是session_register函数已经被php5.4废弃的原因。-------------------------------------------------------------解决方法:找开include/userlogin.class.php文件,查找以下内容&…

java欧冠抽签,欧冠抽签吐槽:最大的“礼包”被C罗拿走!梅西出局概率超50%?...

欧冠16强抽签揭晓,结果:多特VS巴黎,皇马VS曼城,亚特兰大VS瓦伦西亚,马竞VS利物浦,切尔西VS拜仁,里昂VS尤文图斯,热刺VS莱比锡,那不勒斯VS巴萨。怎么评价这样的抽签呢&…

java ajax报错500,(Struts2+JSON+Ajax) XMLHttpRequest ==500如何解决

(Struts2JSONAjax) XMLHttpRequest 500怎么解决?本帖最后由 zjlisok 于 2013-01-29 02:00:05 编辑XMLHttpRequest.status500奇怪了,搞了半天还没有解决。朋友们请帮我一把,谢谢!废话不说,先上代码JS代码:va…

PHP的rm指令,git rm 命令

git rm 命令git rm 命令用于删除文件。如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。git rm 删除文件有以下几种形式:1、将文件从暂存区和工作区中删除:git rm 以下实例从暂存区…

jAvA中deprecate,在Java中使用Deprecated方法或类是错误的吗?

1.在Java中使用Deprecated方法或类是错误的吗?从已弃用的定义 :注释Deprecated的程序元素是程序员不鼓励使用的程序元素,通常是因为它是危险的,或者是因为存在更好的select。该方法被保存在API中,用于在未指定的时间段…

java运算符试题,编程语⾔⾯试题之新版javase基础语法篇之运算符

简介:⾯试中 短路运算符 和 位运算考点:计算机基础运算知识难度【** *】你知道 运算符 &和&&、|和||的区别吗?& 按位与操作只有对应的两个⼆进制数为1时,结果位才为11&1 11&0 00&1 00&0 0| 按…

matlab 流固耦合,详讲流固耦合

引言近来,航空航天工业在世界上发展迅速,而作为“飞机心脏”的航空发动机是限制其发展的主要因素。目前,航空发动机日益向高负荷、高效率和高可靠性的趋势发展,高负荷导致的高逆压力梯度容易引起流动分离,同时随着科技…

php加大session,PHP :: Bug #63251 :: yaf session功能增强

[2012-10-10 06:34 UTC] vipcenter at vip dot qq dot comDescription:------------一:建议增加:设置和获取session_id的方法!如:Session::getInstance()->id(qtvv60cui9c22qlk2fqr0na1d1);如果不传参则返回当前使用的session_id二&#x…

php提示是否运行,php运行错误提示

第一种方法在php.ini文件里改变display_errors和error_reporting的值,没有的直接加上。; 第一处修改; display_errors Offdisplay_errors On; 第二处修改; error_reporting E_ALL & ~E_DEPRECATED & ~E_STRICTerror_reporting E_ALL | E_STRICTdisplay_…

php stream encoding,PHP之mb_check_encoding使用方法分享

本文主要和大家分享mb_check_encoding使用方法,希望能帮助到大家。mb_check_encoding(PHP 4 > 4.4.3, PHP 5 > 5.1.3, PHP 7)mb_check_encoding — Check if the string is valid for the specified encodingmb_check_encoding — 检查字符串在指定的编码里是…

usb转ttl模块与matlab,图文详解USB转TTL设备与电路板的连接

描述USB转TTL的硬件设备:USB转TTL主机一台;芯片选用PL-2303HXUSB转TTL刷机线,采用进口PL2303HX芯片。连接上电脑并安装驱动后,电脑即扩展出一个COM3或COM4....等的串口,配合相应软件就能对路由器、机顶盒或接收机等各种TTL接口的设备系统进行…

php乱码调试,NotePad++ 调试PHP代码中文显示乱码

最近在NotePad上调试PHP代码,按照示例代码进行调试,结果在显示中文的时候显示一堆乱码,于是上网百度,有2种方法可以解决:按调试方式有2种方法:1、菜单插件-NppExec:“插件”-“NppExec”-"Console Out…

php怎么设置网站的字符编码,php如何设置字符编码

php如何设置字符编码?a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charsetgb2312"),静态页面添加,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编…

oracle em 删除 重建,Oracle 11g 重建EM需要删除的对象

因为需求需要重建EM,重建时因为某些错误被迫停止,比如对象已存在、用户已经存在等,最终找出了创建必备的条件;1.环境变量(Oracle和Grid在同一个用户下安装):ORACLE_HOME 要设为DB路径;ORACLE_UNQNAME 要设置;2.删除em相关的同义词:select drop public synonym ||syn…

oracle导出数据视频教程,Oracle导入导出数据的几种方式

oracle导入导出数据1.导出dmp格式文件--备份某几张表 !!!!exp smsc/smsc file/data/oracle_bak/dmp/bakup0209_2.dmp tables\(send_msg_his,send_msg,recv_msg_his,recv_msg\)--备份整个数据库 !!&#xff…