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反射机制没有想到获取方法体的办法,有知道的大神,还请不吝赐教
java类中获取全局变量_java 通过反射获取类的全局变量、方法、构造方法相关推荐
- 编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款
查看本章节 查看作业目录 需求说明: 某用户共有两张银行卡,账户名称相同,但卡号和余额不同.模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细 实现思路: 项目中创建账户类 Account,类中 ...
- java有且仅有一个main_组成java Application的若干类中,有且仅有一个主类,只有主类中含有主方法main();...
[单选题]Java 应用程序入口的 main 方法,其声明格式可以是(A) [填空题]点的水平投影与正面投影的连线( ) 于 OX 轴. [单选题]-Is there anything wrong w ...
- 声明银行账户类 java_编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款...
查看本章节 查看作业目录 需求说明: 某用户共有两张银行卡,账户名称相同,但卡号和余额不同.模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细 实现思路: 项目中创建账户类 Account,类中 ...
- java 反射 参数名_JAVA 8 反射获取参数名
前言 在JDK8之前javac编译是不会把构造器和方法的参数名编译进class中,如果需要获取参数名,可以在方法上加上注解,反射获取注解的值从而获取参数名,比如Jackson的@JsonCreator ...
- java资源文件获取属性_Java读写资源文件类Properties
Java中读写资源文件最重要的类是Properties 1) 资源文件要求如下: 1.properties文件是一个文本文件 2.properties文件的语法有两种,一种是注释,一种属性配置. 注 ...
- 【Java 虚拟机原理】Java 类中的类加载初始化细节 ( 只使用类中的常量时加载类不会执行到 ‘初始化‘ 阶段 )
文章目录 一.类加载初始化时机 二.常量加载示例 三.数组加载示例 一.类加载初始化时机 类加载时机 : Java 程序执行时 , 并不是一开始将所有的字节码文件都加载到内存中 , 而是用到时才进行加 ...
- java反射获取注解id,通过反射获取注解(Annotation)
以下实例,定义一个注解.通过反射获取. 主要功能:为所注解过的参数和方法附加一些信息可以获取. 定义注解. import java.lang.annotation.*; @Retention(Rete ...
- java编程中的点_Java的21个技术点和知识点归纳(转)
1. JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可.不过对于一个有着3年以上Java经验的资深开发者来说,不 ...
- java获取正则表达式_JAVA 正则表达式(获取)
//仅作为学习笔记 /* 正则表达式: 4,获取:将字符串中的符合规则的字串取出 操作步骤: 1,将政治表达式封装成对象 2,让正则表达式和要操作的字符串相关联 3,关联后,获取正则匹配引擎 4,通过 ...
最新文章
- centos7.4.3 部署python-pcl亲测可用(采坑记)
- 合作伙伴说 | 一人行快,众人行远,与网易共建万亿新生态
- 【Python CheckiO 题解】Time Converter (24h to 12h)
- (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第四节:数据查询
- Matlab命令汇总
- linux安装tomcat后启动报错Cannot find ./catalina.sh的解决方法
- NLP简报(Issue #3)
- FragmentTransactionExtended
- 单片机 多机通讯c语言,【C语言】89c52单片机的多机串口通讯,救助
- mysql碎片data free_浅析MySQL数据碎片的产生(data free)
- linux添加变色龙引导,变色龙引导界面屏蔽多余盘符并默认启动Mac _ 黑苹果乐园...
- 自动排单功能的一些思考
- 数据仓库之指标体系建设分享
- python客户端开发自行车租赁系统_Python数据可视化——共享单车数据分析
- 【源码分享】一键打开禅意生活——电子木鱼微信小程序源码分享
- 全闪存存储 NetApp AFF A 系列 ——引领闪存的未来发展
- 深入理解C++的动态绑定和静态绑定 1
- 小米 android项目代码,[Android] 代码获取手机系统类型(小米MIUI、华为EMUI、魅族FLYME)...
- 第956期机器学习日报(2017-05-01)
- 三台服务器搭建hadoop集群
热门文章
- Schedulerx2.0工作流支持数据传输
- 如何在Flutter上优雅地序列化一个对象
- AliOS Things v1.1.2新特性
- 从质疑到成为必选项,低代码技术发展及 2022 展望
- 阿里云宣布3年再投2000亿
- 如果你觉得 Git 很迷惑人,那么这份小抄正是为你准备的!
- 苹果或推出Windows版Safari浏览器;微软正“取下”Chromium版Edge浏览器的Beta标签;亚马逊申请新专利……...
- datax参数设置_DataX Web数据增量同步配置说明
- java上传大文件_Java超大文件上传解决办法
- webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)