当前位置: 首页 > 图文教程 > 网络编程 > JSP > java反射技术(一)

JSP
搭建Eclipse+MyEclipse开发环境
卖jsp编程技巧的那个垃圾的所有实例的答案全部已收集,现将他人收集的实例答案公布出来,大家鉴赏!
一个jsp+AJAX评论系统
JSP 多个文件打包下载代码
JSP 动态树的实现
jsp 重复提交问题
J2ME/J2EE实现用户登录交互 实现代码
访问JSP文件或者Servlet文件时提示下载的解决方法
JSP EL表达式详细介绍
JSP 报表打印的一种简单解决方案
jsp 自定义标签实例
AJAX自学练习 无刷新从数据库后台取数据显示
AJAX 自学练习 请求与显示
AJAX 自学练习 无刷新提交并修改数据库数据并显示
jsp 文件上传浏览,支持ie6,ie7,ie8
JSP application(return String)用法详例
jsp form表单方法示例
JSP request(return String)用法详例
JSP forward用法分析实例代码分析
JSP JavaBean的setProperty属性

JSP 中的 java反射技术(一)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-04   浏览: 409 ::
收藏到网摘: n/a

java的反射技术功能十分强大,整理一些资料!!

(如需转载,请注明出处!)

Lesson: 检测类examing class

1.Retrieving Class Objects
获取一个Class对象(metadata)

a,从对象的实例获取。
Class c = mystery.getClass();//(return Class)
b,从子类的实例获取
TextField t = new TextField();
Class c = t.getClass();
Class s = c.getSuperclass();
c,知道类名,则可以把.class加入到名字之后来获取。
Class c = java.awt.Button.class;
d,如果类名在编译时是未知的,则可以使用Class.forName()方法来获取.
Class c = Class.forName(classString);

2.Getting the Class Name
获取类名称
c.getName();

例如:
import java.lang.reflect.*;
import java.awt.*;

class SampleName {

public static void main(String[] args) {
Button b = new Button();
printName(b);
}

static void printName(Object o) {
Class c = o.getClass();
String s = c.getName();
System.out.println(s);
}
}


3.Discovering Class Modifiers
检索修改符
a.通过getModifiers()方法获取一个整型标识值。
b.通过java.reflect.Modifier对象的isPublic, isAbstract, 和 isFinal方法判断此值.

例如:
import java.lang.reflect.*;
import java.awt.*;

class SampleModifier {

public static void main(String[] args) {
String s = new String();
printModifiers(s);
}

public static void printModifiers(Object o) {
Class c = o.getClass();
int m = c.getModifiers();
if (Modifier.isPublic(m))
System.out.println("public");
if (Modifier.isAbstract(m))
System.out.println("abstract");
if (Modifier.isFinal(m))
System.out.println("final");
}
}


4.Finding Superclasses
检索父类
例如:
import java.lang.reflect.*;
import java.awt.*;

class SampleSuper {

public static void main(String[] args) {
Button b = new Button();
printSuperclasses(b);
}

static void printSuperclasses(Object o) {
Class subclass = o.getClass();
Class superclass = subclass.getSuperclass();
while (superclass != null) {
String className = superclass.getName();
System.out.println(className);
subclass = superclass;
superclass = subclass.getSuperclass();
}
}
}


5.Identifying the Interfaces Implemented by a Class
检索指定类实现的接口
例如:
import java.lang.reflect.*;
import java.io.*;

class SampleInterface {

public static void main(String[] args) {
try {
RandomAccessFile r = new RandomAccessFile("myfile", "r");
printInterfaceNames(r);
} catch (IOException e) {
System.out.println(e);
}
}

static void printInterfaceNames(Object o) {
Class c = o.getClass();
Class[] theInterfaces = c.getInterfaces();
for (int i = 0; i < theInterfaces.length; i++) {
String interfaceName = theInterfaces[i].getName();
System.out.println(interfaceName);
}
}
}
6.Examining Interfaces
判定一个类是不是接口

import java.lang.reflect.*;
import java.util.*;

class SampleCheckInterface {

public static void main(String[] args) {
Class thread = Thread.class;
Class runnable = Runnable.class;
verifyInterface(thread);
verifyInterface(runnable);
}

static void verifyInterface(Class c) {
String name = c.getName();
if (c.isInterface()) {
System.out.println(name + " is an interface.");
} else {
System.out.println(name + " is a class.");
}
}
}



如:c.isInterface()

7.Identifying Class Fields
找出指定类所有的域成员
每个数据成员可以用java.reflect.Field来封闭其名称,类型,修改符的集合。
也可以通过相应的方法获取或设置到该成员的值。

如:
import java.lang.reflect.*;
import java.awt.*;

class SampleField {

public static void main(String[] args) {
GridBagConstraints g = new GridBagConstraints();
printFieldNames(g);
}

static void printFieldNames(Object o) {
Class c = o.getClass();
Field[] publicFields = c.getFields();
for (int i = 0; i < publicFields.length; i++) {
String fieldName = publicFields[i].getName();
Class typeClass = publicFields[i].getType();
String fieldType = typeClass.getName();
System.out.println("Name: " + fieldName +
", Type: " + fieldType);
}
}
}



8.Discovering Class Constructors
检索指定类的构造函数

当创建一个类的实例时,是通过检造方法来作的,这种方法可以被重载。
每一个构造方法可以用类Constructor来描述,,包括名称,修饰符,参数类型(Class[]),和异常列表。
可以通过一个Class的getConstructors方法获取到该类的Constructor数组。
例程:
import java.lang.reflect.*;
import java.awt.*;

class SampleConstructor {

public static void main(String[] args) {
Rectangle r = new Rectangle();
showConstructors(r);
}

static void showConstructors(Object o) {
Class c = o.getClass();
Constructor[] theConstructors = c.getConstructors();
for (int i = 0; i < theConstructors.length; i++) {
System.out.print("( ");
Class[] parameterTypes =
theConstructors[i].getParameterTypes();
for (int k = 0; k < parameterTypes.length; k ++) {
String parameterString = parameterTypes[k].getName();
System.out.print(parameterString + " ");
}
System.out.println(")");
}
}
}





9.Obtaining Method Information
检索方法
可以找到隶属于一个类的所有方法,通过getMethods包含Method数组,进而得到该方法的返回类型,修饰符,方法名称,参数列表
步骤:
a.指定类的Class Object
b.getMethods()获取Method[]对象
c,遍历该数组对象

例程:

import java.lang.reflect.*;
import java.awt.*;

class SampleMethod {

public static void main(String[] args) {
Polygon p = new Polygon();
showMethods(p);
}

static void showMethods(Object o) {
Class c = o.getClass();
Method[] theMethods = c.getMethods();
for (int i = 0; i < theMethods.length; i++) {
String methodString = theMethods[i].getName();
System.out.println("Name: " + methodString);
String returnString =
theMethods[i].getReturnType().getName();
System.out.println(" Return Type: " + returnString);
Class[] parameterTypes = theMethods[i].getParameterTypes();
System.out.print(" Parameter Types:");
for (int k = 0; k < parameterTypes.length; k ++) {
String parameterString = parameterTypes[k].getName();
System.out.print(" " + parameterString);
}
System.out.println();
}
}
}