列举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语 ...
随机推荐
- 2019新的开始,新的规划,庆祝CSDN访问量过千
刚刚看了下博客访问量六千八百七十多个,然后我就自己刷新了一下,留个截图做纪念吧. 每一年都会有很多计划,然而到了年末却发现,未完成的还剩一大半,而完成的却屈指可数. 不过该立的flag还是要立的,顺便 ...
- springboot 使用redis
安装redis教程:https://www.cnblogs.com/nongzihong/p/10190489.html 依赖: <!--配置redis--> <dependency ...
- python3笔记二十三:正则表达式之其他函数
一:学习内容 re.split函数 re.finditer函数 re.sub函数 group()分组 re.compile函数 二:字符串切割---re.split函数 需要导入包:import re ...
- JavaScript 函数相关属性
1.name 既函数名 function test(){ console.log("Haha") }; console.log(test.name)//test 2.length属 ...
- oracle数据库连接数反推公式
sessions=1.1*processes+5,transactions=1.1*sessions.
- Vs2019+openjdk12 本地Debug环境搭建过程
1. VS2019下载和安装 这个就不写了 2. cygwin安装: https://jingyan.baidu.com/article/455a99507c0b78a166277809.html 需 ...
- 1.7 本机单步调试(Intellij IDEA)
先编译好要调试的程序. 1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可. 2.开启调试会话 点击红色箭头指向的小虫子,开始进入调试. IDE下方出现Debug视图,红色的箭头指 ...
- Windows10安装秘钥大全
Windows10官方镜像下载地址: 点击下载 老毛桃U盘启动制作:点击下载 秘钥大全 家庭版: Core 家庭版:YTMG3-N6DKC-DKB77-7M9GH-8HVX7 单语言家庭版:BT79Q ...
- ControlTemplate in WPF —— ComboBox
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...
- Struts2-Ajax整合之Jquery版本
<纯JavaScript版本 http://www.cnblogs.com/hzb462606/p/8934787.html > 大部门跟JavaScript版本一致,就是<sc ...