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语言中反射的常用方法的更多相关文章

  1. JAVA语言中的修饰符

    JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...

  2. Java语言中的面向对象特性总结

    Java语言中的面向对象特性 (总结得不错) [课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知 ...

  3. JAVA语言中冒号的用法

    近来由于本人要介入android平台的开发,所以就买了本JAVA语言的书学习.学习一段时间来,我的感觉是谭浩强就是厉害,编写的<C编程语言>系列丛书不愧是经典.书中对C语言的介绍既系统又全 ...

  4. Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)

    Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道jav ...

  5. Java语言中的异常处理

    Java语言中的异常处理包括声明异常.抛出异常.捕获异常和处理异常四个环节.   throw用于抛出异常.   throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异 ...

  6. Java语言中的正则表达式

    正则表达式是什么? 正则表达式是一种强大而灵活的文本处理工具.初学正则表达式时,其语法是一个难点,但它确实是一种简洁.动态的语言.正则表达式提供了一种完全通用的方式,能够解决各种字符串处理相关的问题: ...

  7. Java语言中使用OpenMP

    从去年年中,开始学习Java,主要是维护公司用Java编写的服务器软件.目前,该服务器软件遇到一个问题,在下载大文件时,如果同时下载的用户很多, 服务器软件工作会出现异常,有的用户无法下载.服务器硬件 ...

  8. Java语言中的这些知识点有没有用过,工作中有没有入过这些坑?

    在Java语言中,有一些相对生僻的知识,平时用的机会可能不是很多,但如果不了解不掌握这些知识点的话,也可能会掉入陷阱之中,今天我们就来初步梳理一下: 1. goto是java语言中的关键字. &quo ...

  9. Java语言中的访问权限修饰符

    一个Java应用有很多类,但是有些类,并不希望被其他类使用.每个类中都有数据成员和方法成员,但是并不是每个数据和方法,都允许在其他类中调用.如何能做到访问控制呢?就需要使用访问权限修饰符. Java语 ...

随机推荐

  1. 在一般处理程序中使用session

    public class Handler1 : IHttpHandler, IRequiresSessionState 需要继承 IRequiresSessionState接口,告诉程序要使用sess ...

  2. Vimdiff 使用

    what is vimdiff 在类nuix平台,我们希望对文件之间的差异之间快速定位,希望能够很容易的进行文件合并……. 可以使用Vim提供的diff模式,通常称作vimdiff,就是这样一个能满足 ...

  3. c++中字符输入函数cin.getline在输入char与string时的不同

    cin.getline在输入char时: using namespace std; ; char name[ArSize]; char dessert[ArSize]; cout << & ...

  4. 浏览器端-W3School-JavaScript:JavaScript String 对象

    ylbtech-浏览器端-W3School-JavaScript:JavaScript String 对象 1.返回顶部 1. JavaScript String 对象 String 对象 Strin ...

  5. 【flask】环境配置-python-dotenv的使用

    [自动发现程序实例] 一般来说,在执行flask run命令运行程序前,我们需要提供程序实例所在模块的位置 . Flask会自动探测程序实例,自动探测存在下面这些规则: 从当前目录寻找app.py和w ...

  6. python + 爬虫 + fiddler + 夜神模拟器 爬取app(1)

    抓包 抓包是爬虫里面经常用到的一个词,完整的应该叫做抓取数据请求响应包 ,而Fiddler这款工具就是干这个的 普通https抓包设置 打开Fiddler ------> Options .然后 ...

  7. [VBA]去重汇总

    问题描述:汇总多个工作表的指定字段到sheet1里面,并去除重复的字段内容. Sub 去重汇总() Dim sht As Worksheet, j As Integer, x As Integer S ...

  8. BurpSuite(一)工具介绍

    , 本章目标: 1. 安装并配置好Burpsuite 2. 了解其各个模块功能 Burpsuite介绍 Burp Suite 是用于攻击web应用程序的集成平台.它包含了许多工具,并为这些工具设计了许 ...

  9. 阶段3 2.Spring_04.Spring的常用注解_1 今日课程内容介绍

  10. iframe嵌套的页面之间传值问题

    项目中很多时候会遇到需要用 iframe 嵌套页面的情况.有时候会有这样的需求: iframe 嵌套的页面 A ,点击之后要跳到页面 B ,但是同时还需要 A 页面中的某个属性值. 此时可以先把 A ...