??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩在线精品一区,一区二区三区免费在线观看,亚洲一区欧美二区http://www.aygfsteel.com/youyu/archive/2007/06/11/123458.html鱉K鱉KMon, 11 Jun 2007 12:41:00 GMThttp://www.aygfsteel.com/youyu/archive/2007/06/11/123458.htmlhttp://www.aygfsteel.com/youyu/comments/123458.htmlhttp://www.aygfsteel.com/youyu/archive/2007/06/11/123458.html#Feedback2http://www.aygfsteel.com/youyu/comments/commentRss/123458.htmlhttp://www.aygfsteel.com/youyu/services/trackbacks/123458.html当作考试?br>旉?br>_糙的做了一?br>
http://www.aygfsteel.com/Files/youyu/JavaHW(会议室预定系l?-数据库版).rar

鱉K 2007-06-11 20:41 发表评论
]]>
Reflection-Java中的反射机制(?http://www.aygfsteel.com/youyu/archive/2007/05/16/117917.html鱉K鱉KWed, 16 May 2007 11:20:00 GMThttp://www.aygfsteel.com/youyu/archive/2007/05/16/117917.htmlhttp://www.aygfsteel.com/youyu/comments/117917.htmlhttp://www.aygfsteel.com/youyu/archive/2007/05/16/117917.html#Feedback0http://www.aygfsteel.com/youyu/comments/commentRss/117917.htmlhttp://www.aygfsteel.com/youyu/services/trackbacks/117917.htmlJava looking at Java    Java的一个很不寻常的能力Q它允许一个程序检查自?br>   你可以确定一个对象所属的cd
   你可以查看一个类的全部内?它们的访问修饰符、父cR字Dc构造函数、方?br>   你可以查看一个接口的内容
   即在编写代码的时候你不知道事物的名字你也可以做到Q?br>   创徏一个类的实?br>   取得和设|一个实例的变量
   调用一个对象的一个方?br>   创徏和操作数l?br>
   我猜它之所以被UCؓ“反射”是因为它允许一个Java应用E序?#8220;在镜子里”看到自己一栗?br>

What is reflection for?

   ?#8220;q_”的程序中你可能用不到反射
   如果你是在用应用程序来操作应用E序Q那你就需要用反了?br>   典型的应用:
   一个类型查看器
   一个调试程?br>   一个GUI创徏?br>   一个IDEQ比喻说BlueJ或Eclipse

IDE

   有需要的IDE本n是用Java~写的—它们可以做什?
   ~译一个程?单—只是一个系l调?
   ~译后加载进你的pȝ
   弄清楚你都有些什么类Q它们的构造函数和Ҏ
   执行你的mainҎ
   替你创徏对象Q即使现在没有运行mainҎ
   为对象传递信息,q显C结?br>   q些所有的功能Q除了编译都是用反做到的

Class c?/h2>    要发C个具体的cȝ信息,首先要取得它的Class 对象
   如果你有一?obj 对象,你可以通过下面的方式来取得它的class对象
Class c = obj.getClass();
   你可以通过一个class的实例c 取得它的父类
Class sup = c.getSuperclass();
   如果你已l知道一个类在编译时候的名字 (比喻? Button) ,你可以通过下面q样的简单方法取得class对象
Class c = Button.class;
   如果你知道一个类在运行期的名?比喻_一个Stringcd变量str),你可以通过下面的方法取得类对象
Class c = Class.forName(str);

取得cȝ名字

   如果你已l有了一个class对象cQ你可以通过下面的方法取得类的名?c.getName()
   getName 取得cȝ全\径名? 比喻?
    Class c = Button.class;
    String s = c.getName();
    System.out.println(s);
会输?br>    java.awt.Button
   c?Class 和它的方法都是在 java.lang?所以不需要用import使其可用?br>

取得所有的父类

   getSuperclass() q回一?Class 对象 (或?null 如果你在 Object上用的?它是没有父类?)

   下面的代码来自Sun的入门指?

     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();
          }
}

取得cȝ修饰WI

   Class对象有一个实例方?getModifiers() Q它q回一个int型的?br>
   Z“解释” int 型的l果Q我们要用到Modifiercȝ一些方法,它们位于 java.lang.reflect, 所?

    import java.lang.reflect.*;

   现在我们可以做下面的事情了:

if (Modifier.isPublic(m)) {
    System.out.println("public");
}

取得cȝ修饰WII

   Modifier 包含下面的一些方?(只列出部?:
   public static boolean isAbstract(int)
   public static boolean isFinal(int)
   public static boolean isInterface(int)
   public static boolean isPrivate(int)
   public static boolean isProtected(int)
   public static boolean isPublic(int)
   public static String toString(int)
   q会q回一个如下所C的字符?br>"public final synchronized strictfp"

取得接口

   一个类可以实现Q个或多个接?br>   getInterfaces() q回一?Class 对象的数l?br>   q些是类实现的一些接?br>   下面的代码来自Sun的入门指?
   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);
    }
}
   注意Q零长度数组在Java中是合法?br>

判断cd接口

   Class cL能代表类也能代表接口
   要确定一个给定的 Class 对象 c 是否是一个是接口Q可以?c.isInterface()
   要研Iclass对象的更多内容的话,你可以用下面这些方?
   getModifiers()
   getFields()    // "fields" == "instance variables"
   getConstructors()
   getMethods()
   isArray()

取得字段

   public Field[] getFields() throws SecurityException
   q回一个public的字D|l?(变量)
   数组的长度允许是Q?br>   字段的组l顺序没有Q何的规则
   本n定义的和通过l承的来的变量都被返?但是不包?static 变量
   public Field getField(String name)
    throws NoSuchFieldException, SecurityException
   q回指定名称?public 字段
   如果没有直接的字D被发现Q那父类或者接口被递归的查?br>

使用字段 I

   如果 f ?Field 对象, 那么
   f.getName() q回字段的简单的名字
   f.getType() q回字段的类?(Class)
   f.getModifiers() q回字段的Modifier
   f.toString() q回一个包含了讉K修饰W,cdQ和全\径字D名字的字符?br>   例如: public  java.lang.String  Person.name
   f.getDeclaringClass() q回定义字段的类?Class 对象

使用字段 II

   obj 对象的字D늚值可以用下面的方式q行操作Q?br>   boolean f.getBoolean(obj),
int f.getInt(obj),
double f.getDouble(obj),
{等Q返回字D늚|假设它是那个cd或者可以扩展成那个?br>   Object f.get(obj) q回一个字D늚|假设它是一个对?br>   void f.set(obj, value),
void f.setBoolean(obj, bool),
void f.setInt(obj, i),
void f.getDouble(obj, d),{等Q设|一个字D늚?br>

构造函?/h2>    如果 c 是一个构造函?那么
   c.getName() q回构造函数的名字Q与cȝ名字完全一?br>   c.getDeclaringClass() q回构造函数被声明?Class 对象
   c.getModifiers() q回构造函数的 Modifier
   c.getParameterTypes() q回一个Class 对象数组, 以声明的序
   c.newInstance(Object[] initargs) 创徏被返回一个ccȝ实例对象
   需要用简单类型的地方会被自动的{?br>

Ҏ

   public Method[] getMethods()
          throws SecurityException
   q回一?Method 对象数组
   q回的是cL接口?public 成员ҎQ同时也包含l承的来的方?br>   q回的方法没有Q何的序
   public Method getMethod(String name,
                                       Class[] parameterTypes)
throws NoSuchMethodException, SecurityException

Method 中的Ҏ I

   getDeclaringClass()
   q回一个Class 对象Q它代表了这个Method 对象所被声明的cL接口
   getName()
   q回代表q个Method 对象的名字,以字W串的方?br>   getModifiers()
   q回代表q个Method 对象的修饰符Q以整型的方?br>   getParameterTypes()
   q回q个Method 对象所需要的参数?Class 对象数组Q以声明的顺序出?br>

Method 中的Ҏ II

   getReturnType()
   q回代表q个Method 对象的返回值的一?Class对象名字
   toString()
   q回一个代表这个Method 对象的字W串Q通常情况下会很长
   public Object invoke(Object obj, Object[] args)
   在特定的对象上用特定的参数Q执行这个Method对象所代表的方?br>   个别的参C被自动{换来实现一些对基本数据cd的需?br>

数组 I

   可以采用下面的方法来判断一个obj 对象是不是一个数l?br>   Class c = obj.getClass();
   c.isArray()
   要取得这个数l的元素的类型可以?
   c.getComponentType()
   如果c不是一个数l的话会q回一?null
   在java.lang.reflect 包中包含了一?Array c,它提供了一?static Ҏ来操作数l?br>

数组 II

   要创Z个数l?
    Array.newInstance(Class componentType, int size)
   q回一个新创徏的数lObject对象Q?br>   你可以把它造型成你惌的类?br>   componentType 本n可以是一个数l?br>   q会产生一个多l数l?br>   l数的最大限制一般在255
   Array.newInstance(Class componentType, int[] size)
   q回一个新创徏的多l数lObject对象 (使用 size.length l度)

数组 III

   得到数组元素的?br>   Array.get(Object array, int index) q回一?Object
   Array.getBoolean(Object array, int index) q回一?boolean
   Array.getByte(Object array, int index) q回一?byte
   {等.
   往数组中保存?
   Array.set(Object array, int index, Object value)
   Array.setBoolean(Object array, int index, boolean z)
   Array.setByte(Object array, int index, byte b)
   {等.

l束?/h2>    很多Ҏ都有自己的异常,我在q里没有描述
   要查看详情,你参照Java API
   反射?#8220;q_”的程序中用不刎ͼ可是你真的需要它的时候却是不可替代的?br>   一个相关的话题Q类的加载器(class loaders)—Java把需要的c读q内?br>   你可以编写你自己的加载器
   q是别的大多数语a不包含的一U功?

鱉K 2007-05-16 19:20 发表评论
]]> վ֩ģ壺 | ԭ| | Ϊ| Դ| ½| Ҧ| | | Ͱ| Ӵ| ֶ| ¡| | | | ij| | | | | | ˮ| ˼| ¡| ƽ| | ±| Ȫ| | Ϫ| | | | | | ˿| ƽ| | ¹| |