java反射学习例子
来源:互联网 发布:学游泳费用 知乎 编辑:程序博客网 时间:2024/06/05 04:35
学习反射的主要作用:
1. 在运行中分析类的能力
2. 在运行中查看对象
3. 实现通用的数组操作代码
4. 利用Method对象
新建实例,除了new之外,还可以通过反射技术newInstance来实现。
java反射包 java.lang.reflect
下面有3个有用的类 : Field ,Method 和Constructor
分别用于描述类的成员变量,方法和构造器,都有一个getName方法,返回项目的名称。
Field有一个getType方法,用于返回描述域所属类型的class对象。
Method和Constructor类有能够报告参数类型的方法,Method类还有一个可以报告返回类型的方法getReturnTypes.
这3个类都有一个getModifiers的方法,返回一个整数型值,通过Modifier.toString()方法转换为public protected private这类修饰符
getFields,getMethods和getConstructors返回提供的public修饰的域,方法和构造器
getDeclareFields,getDeclareMethods和getDeclareConstructors返回所有声明的全部域,方法和构造器,包括私有的和受保护的成员,但不包括超类的成员。
实例代码如下:
package com.yf.ssm.controller;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
/**
File: ReflectionTest.java
Description: java反射类测试,利用反射打印类的所有信息
@author yf
@date 2016年10月25日 上午9:27:24
@version 1.0
**/
public class ReflectionTest {
public static void main(String[] args) throws ClassNotFoundException {
String name = "java.lang.String";
Class cl = Class.forName(name);
Class supercl = cl.getSuperclass();
String modifiers = Modifier.toString(cl.getModifiers());
if(modifiers.length() >0){
System.out.print(modifiers + " ");
}
System.out.print("class " + name);
if(supercl != null && supercl != Object.class){
System.out.print(" extends " + supercl.getName());
}
System.out.print("\n{\n");
printConstructors(cl);
System.out.println();
printMethods(cl);
System.out.println();
printFields(cl);
System.out.println("}");
}
public static void printFields(Class cl){
Field[] fields = cl.getDeclaredFields();//cl.getFields() 返回public Field
//System.out.println("print Fields:");
for(Field f:fields){
Class type = f.getType();
String name = f.getName();
System.out.print(" ");
String modifiers = Modifier.toString(f.getModifiers());
if(modifiers.length()>0)
System.out.print(modifiers + " ");
System.out.println(type.getName() + " " + name + ";");
}
}
public static void printMethods(Class cl){
Method[] methods = cl.getDeclaredMethods();//cl.getFields() 返回public Field
for(Method m:methods){
Class retType = m.getReturnType();
String name = m.getName();
System.out.print(" ");
String modifiers = Modifier.toString(m.getModifiers());
if(modifiers.length()>0){
System.out.print(modifiers + " ");
}
System.out.print(retType.getName() + " " + name + "(");
Class[] paramTypes = m.getParameterTypes();
for(int j=0;j<paramTypes.length;j++){
if(j>0)
System.out.print(", ");
System.out.print(paramTypes[j].getName());
}
System.out.println(");");
}
}
public static void printConstructors(Class cl){
Constructor[] constructors = cl.getDeclaredConstructors();
for(Constructor c: constructors){
String name = c.getName();
System.out.println(" ");
String modifiers = Modifier.toString(c.getModifiers());
if(modifiers.length()>0)
System.out.print(modifiers + " ");
System.out.print(name + "(");
Class[] paramTypes = c.getParameterTypes();
for(int j=0;j<paramTypes.length;j++){
if(j>0)
System.out.print(", ");
System.out.print(paramTypes[j].getName());
}
System.out.println(");");
}
}
}
运行结果如下:
public final class java.lang.String
{
public java.lang.String([B, int, int);
public java.lang.String([B, java.nio.charset.Charset);
public java.lang.String([B, java.lang.String);
public java.lang.String([B, int, int, java.nio.charset.Charset);
public java.lang.String([B, int, int, java.lang.String);
java.lang.String([C, boolean);
public java.lang.String(java.lang.StringBuilder);
public java.lang.String(java.lang.StringBuffer);
public java.lang.String([B);
public java.lang.String([I, int, int);
public java.lang.String();
public java.lang.String([C);
public java.lang.String(java.lang.String);
public java.lang.String([C, int, int);
public java.lang.String([B, int);
public java.lang.String([B, int, int, int);
public boolean equals(java.lang.Object);
public java.lang.String toString();
public int hashCode();
public int compareTo(java.lang.String);
public volatile int compareTo(java.lang.Object);
public int indexOf(java.lang.String, int);
public int indexOf(java.lang.String);
public int indexOf(int, int);
public int indexOf(int);
static int indexOf([C, int, int, [C, int, int, int);
static int indexOf([C, int, int, java.lang.String, int);
public static java.lang.String valueOf(int);
public static java.lang.String valueOf(long);
public static java.lang.String valueOf(float);
public static java.lang.String valueOf(boolean);
public static java.lang.String valueOf([C);
public static java.lang.String valueOf([C, int, int);
public static java.lang.String valueOf(java.lang.Object);
public static java.lang.String valueOf(char);
public static java.lang.String valueOf(double);
public char charAt(int);
private static void checkBounds([B, int, int);
public int codePointAt(int);
public int codePointBefore(int);
public int codePointCount(int, int);
public int compareToIgnoreCase(java.lang.String);
public java.lang.String concat(java.lang.String);
public boolean contains(java.lang.CharSequence);
public boolean contentEquals(java.lang.CharSequence);
public boolean contentEquals(java.lang.StringBuffer);
public static java.lang.String copyValueOf([C);
public static java.lang.String copyValueOf([C, int, int);
public boolean endsWith(java.lang.String);
public boolean equalsIgnoreCase(java.lang.String);
public static transient java.lang.String format(java.util.Locale, java.lang.String, [Ljava.lang.Object;);
public static transient java.lang.String format(java.lang.String, [Ljava.lang.Object;);
public void getBytes(int, int, [B, int);
public [B getBytes(java.nio.charset.Charset);
public [B getBytes(java.lang.String);
public [B getBytes();
public void getChars(int, int, [C, int);
void getChars([C, int);
private int indexOfSupplementary(int, int);
public native java.lang.String intern();
public boolean isEmpty();
public static transient java.lang.String join(java.lang.CharSequence, [Ljava.lang.CharSequence;);
public static java.lang.String join(java.lang.CharSequence, java.lang.Iterable);
public int lastIndexOf(int);
public int lastIndexOf(java.lang.String);
static int lastIndexOf([C, int, int, java.lang.String, int);
public int lastIndexOf(java.lang.String, int);
public int lastIndexOf(int, int);
static int lastIndexOf([C, int, int, [C, int, int, int);
private int lastIndexOfSupplementary(int, int);
public int length();
public boolean matches(java.lang.String);
private boolean nonSyncContentEquals(java.lang.AbstractStringBuilder);
public int offsetByCodePoints(int, int);
public boolean regionMatches(int, java.lang.String, int, int);
public boolean regionMatches(boolean, int, java.lang.String, int, int);
public java.lang.String replace(char, char);
public java.lang.String replace(java.lang.CharSequence, java.lang.CharSequence);
public java.lang.String replaceAll(java.lang.String, java.lang.String);
public java.lang.String replaceFirst(java.lang.String, java.lang.String);
public [Ljava.lang.String; split(java.lang.String);
public [Ljava.lang.String; split(java.lang.String, int);
public boolean startsWith(java.lang.String, int);
public boolean startsWith(java.lang.String);
public java.lang.CharSequence subSequence(int, int);
public java.lang.String substring(int);
public java.lang.String substring(int, int);
public [C toCharArray();
public java.lang.String toLowerCase(java.util.Locale);
public java.lang.String toLowerCase();
public java.lang.String toUpperCase();
public java.lang.String toUpperCase(java.util.Locale);
public java.lang.String trim();
private final [C value;
private int hash;
private static final long serialVersionUID;
private static final [Ljava.io.ObjectStreamField; serialPersistentFields;
public static final java.util.Comparator CASE_INSENSITIVE_ORDER;
}
- java反射学习例子
- java反射运用学习测试例子
- java 反射经典例子
- Java反射例子
- java反射实现例子
- java反射的例子
- JAVA 反射例子
- java类反射例子
- java反射小例子
- java反射小例子
- java 反射小例子
- java 反射例子
- Java反射小例子
- java反射机制例子
- JAVA反射demo例子
- java反射小例子
- java 反射例子汇总
- java反射例子
- Python multiprocessing需要避免的陷阱
- 深度解读谷歌SyntaxNet:全新TensorFlow自然语言处理模型
- IOS 调用照相机、相册功能
- ntohs, ntohl, htons,htonl的比较和详解
- Codeforces732D Exams
- java反射学习例子
- tomcat
- LeetCode342. Power of Four 简单解法
- LINUX --- 大内核(顺序阅读一)
- yii2自定义报错页面
- 关于SharedSDK中短信注册和分享功能冲突问题的解决办法
- android 6.0运行时权限
- JDK1.5新特性--可变参数
- Struts2 in action 笔记4