列举java语言中反射的常用方法
package review;
/*12:43 2019/7/21*/ import model.AnotherClass;
import model.OneClassMore;
import model.SomeClass; import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; /**
* 这个类列举了java语言中关于反射机制的常用的一些方法
* @author zhangxingshuo
*/
public class AboutReflection {
public static void main(String[] args) throws Exception { } /*获得Class对象的3种方式*/
private static Class<?> getClazz0(String className) throws ClassNotFoundException {
Class clazz=Class.forName(className);
return clazz;
}
private static Class<?> getClazz1(Object object) {
Class clazz=object.getClass();
return clazz;
}
private static Class<?> getClazz2() {
Class clazz=model.SomeClass.class;
return clazz;
} /*经常使用的Class对象的3个方法*/
private static String useClazz0(Class clazz) {
String fullyQualifiedName=clazz.getName();
return fullyQualifiedName;
}
private static String useClazz1(Class clazz) {
String className=clazz.getSimpleName();
return className;
} //ex:private //ex:abstract
private static Object useClazz2(Class clazz) throws IllegalAccessException, InstantiationException {
Object object=clazz.newInstance();
return object;
} /*获得Constructor对象的3个方法*/
private static Constructor<?>[] getConstructorObject0(Class clazz) {
Constructor<?>[] constructors=clazz.getConstructors();
return constructors;
}
private static Constructor<?>[] getConstructorObject1(Class clazz) {
Constructor<?>[] constructors=clazz.getDeclaredConstructors();
return constructors;
}
private static Constructor<?> getConstructorObject2(Class clazz) throws NoSuchMethodException {
Constructor<?> constructor=clazz.getConstructor(SomeClass.class, AnotherClass.class, OneClassMore.class);
return constructor;
}
private static Constructor<?> getConstructorObject3(Class clazz) throws NoSuchMethodException {
Constructor<?> constructor=clazz.getDeclaredConstructor(SomeClass.class, AnotherClass.class, OneClassMore.class);
return constructor;
} /*经常使用的Constructor对象的2个方法*/
private static Object useConstructorObject0(Constructor<?> constructor) throws IllegalAccessException, InvocationTargetException, InstantiationException {
//under here,if the variable override==true,jvm willl not check the accessible modifier
Object object=constructor.newInstance(new SomeClass(),new AnotherClass(),new OneClassMore());
return object;
}
private static void useConstructorObject1(Constructor<?> constructor) {
//under here changing "override" variable's value who is defined in AccessibleObject,the "super and super" Class of Constructor
constructor.setAccessible(true);
}
/*还有一些*/
private static Class<?> useConstructorObject2(Constructor<?> constructor) {
Class clazz=constructor.getDeclaringClass();
return clazz;
}
private static int useConstructorObject3(Constructor<?> constructor) {
int modifiers=constructor.getModifiers();
return modifiers;
}
private static String useConstructorObject4(Constructor<?> constructor) {
//constructor name is same as the class name
String constructorName = constructor.getName();
//under here getDeclaringClass().getName();
return constructorName;
} /*获取Field对象的4个方法*/
private static Field[] getFieldObject0(Class clazz){
Field[] fields = clazz.getFields();
return fields;
}
private static Field[] getFieldObject1(Class clazz){
Field[] declaredFields = clazz.getDeclaredFields();
return declaredFields;
}
private static Field getFieldObject2(Class clazz) throws NoSuchFieldException {
Field field = clazz.getField("theFieldName");
return field;
}
private static Field getField3(Class clazz) throws NoSuchFieldException {
Field field = clazz.getDeclaredField("theFieldName");
return field;
} /*经常使用的Field对象的3个方法*/
private static Object useFieldObject0(Field field,Object object) throws IllegalAccessException {
Object fieldValue = field.get(object);
return fieldValue;
}
private static void useFieldObject1(Field field,Object object) throws IllegalAccessException {
//an object as the field value
field.set(object,new Object());
}
private static void useFieldObject2(Field field){
//same process
field.setAccessible(true);
}
/*还有一些*/
private static int useFieldObject3(Field field){
int modifiers = field.getModifiers();
return modifiers;
}
private static String useFieldObject4(Field field){
String fieldName = field.getName();
return fieldName;
} /*获取Method对象的4个方法*/
private static Method[] getMethodObject0(Class clazz){
Method[] methods=clazz.getMethods();
return methods;
}
private static Method[] getMethodObject1(Class clazz){
Method[] methods=clazz.getDeclaredMethods();
return methods;
}
private static Method getMethodObject2(Class clazz) throws NoSuchMethodException {
Method method=clazz.getMethod("someMethodName",SomeClass.class,AnotherClass.class,OneClassMore.class);
return method;
}
private static Method getMethodObject3(Class clazz) throws NoSuchMethodException {
Method method=clazz.getDeclaredMethod("someMethodName",SomeClass.class,AnotherClass.class,OneClassMore.class);
return method;
} /*经常使用的Field对象的2个方法*/
private static Object useMethodObject0(Method method,Object object) throws InvocationTargetException, IllegalAccessException {
Object returnedobject=method.invoke(object,new SomeClass(),new AnotherClass(),new OneClassMore());
return returnedobject;
}
private static void useMethodObject1(Method method){
method.setAccessible(true);
}
/*还有一些*/
private static int useMethodObject2(Method method){
int modifiers = method.getModifiers();
return modifiers;
}
private static String useMethodObject3(Method method){
String methodName = method.getName();
return methodName;
} /*
tips
通过getMethods(),得到一个数组,里面是该类或接口独有的,和继承自它的所有父类与接口的public方法.
通过getDeclaredMethods(),得到一个数组,里面是该类或接口独有的所有方法,(包括public和非public).
*/
/*just as a empty template for convenience*/
private static void m(){ }
}
列举java语言中反射的常用方法的更多相关文章
- JAVA语言中的修饰符
JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...
- Java语言中的面向对象特性总结
Java语言中的面向对象特性 (总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知 ...
- JAVA语言中冒号的用法
近来由于本人要介入android平台的开发,所以就买了本JAVA语言的书学习.学习一段时间来,我的感觉是谭浩强就是厉害,编写的<C编程语言>系列丛书不愧是经典.书中对C语言的介绍既系统又全 ...
- Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)
Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道jav ...
- Java语言中的异常处理
Java语言中的异常处理包括声明异常.抛出异常.捕获异常和处理异常四个环节. throw用于抛出异常. throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异 ...
- Java语言中的正则表达式
正则表达式是什么? 正则表达式是一种强大而灵活的文本处理工具.初学正则表达式时,其语法是一个难点,但它确实是一种简洁.动态的语言.正则表达式提供了一种完全通用的方式,能够解决各种字符串处理相关的问题: ...
- Java语言中使用OpenMP
从去年年中,开始学习Java,主要是维护公司用Java编写的服务器软件.目前,该服务器软件遇到一个问题,在下载大文件时,如果同时下载的用户很多, 服务器软件工作会出现异常,有的用户无法下载.服务器硬件 ...
- Java语言中的这些知识点有没有用过,工作中有没有入过这些坑?
在Java语言中,有一些相对生僻的知识,平时用的机会可能不是很多,但如果不了解不掌握这些知识点的话,也可能会掉入陷阱之中,今天我们就来初步梳理一下: 1. goto是java语言中的关键字. &quo ...
- Java语言中的访问权限修饰符
一个Java应用有很多类,但是有些类,并不希望被其他类使用.每个类中都有数据成员和方法成员,但是并不是每个数据和方法,都允许在其他类中调用.如何能做到访问控制呢?就需要使用访问权限修饰符. Java语 ...
随机推荐
- spark 笔记 5: SparkContext,SparkConf
SparkContext 是spark的程序入口,相当于熟悉的'main'函数.它负责链接spark集群.创建RDD.创建累加计数器.创建广播变量. ) scheduler.initialize(ba ...
- Quartz.Net任务调度总结
Quartz.Net使用经验总结: 学习参考的例子不错,分享一下: (1)https://www.cnblogs.com/jys509/p/4628926.html,该博文介绍比较全面 (2)http ...
- 8.6培训 D1
今天是赵和旭老师讲课(也是 zhx) 动态规划 利用最优化原理把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解(有点像分治?) 更具体的,假设我们可以计算出小问题的最优解,那么我们凭 ...
- Typography 字体
Typography 字体 我们对字体进行统一规范,力求在各个操作系统下都有最佳展示效果. ¶中文字体 和畅惠风 PingFang SC 和畅惠风 Hiragino Sans GB 和畅惠风 Micr ...
- 什么是web语义化,有什么好处
web语义化是指通过HTML标记表示页面包含的信息,包含了HTML标签的语义化和css命名的语义化.HTML语义化是指:通过使用包含语义的标签(如h1-h6)恰当地表示文档结构 CSS命名的语义化是指 ...
- 如何使用Loadrunner Controller 监控服务器的系统资源
(1)保证装有loadrunner Controller的控制机和被监控的目标机(服务器)之间能够ping通,在同一个网段内,保证两台机器用administrator登陆. (2)Win + R, s ...
- [Nova] Failed to get shared "write" lock Is another process using the image?
目录 文章目录 目录 问题 解决 问题 [root@overcloud-compute-0 ~]# /usr/bin/python2 -m oslo_concurrency.prlimit --as= ...
- 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_06.入门案例的流程总结
配置了load-on-startup等于1 表示启动了服务器就会去创建DispatcherServlet 如果不配置load-on-startup为1 那么第一次发送请求才会去创建Dispatcher ...
- Python学习之==>条件判断
1.单条件判断 # 接收输入的值,使用input函数,用input接收输入的值都是string类型的 age = input('请输入你的年龄:') age = int(age) # 类型转换,转换成 ...
- Python学习之线程
8.5 线程 进程:开辟空间,加载数据,资源单位 线程:流水线,执行代码,执行单位 8.5.1 线程的概念 是操作系统能够进行运算调度的最小单位,线程包含在进程中,是进程中的执行单元,一个进程至少包含 ...