A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

阿冉

初级黑马

  • 黑马币:0

  • 帖子:8

  • 精华:0

© 阿冉 初级黑马   /  2013-4-22 03:40  /  1796 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 阿冉 于 2013-4-24 02:30 编辑

我用myeclipse 10,练习thinking in java 4th edition里面反射的代码
package reflectlearning;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.regex.Pattern;

public class ShowMethods {

        private static String usage =
                        "usage:\n" + "showMethods qualified.class.name\n" +
        "To show all methods in class or:\n" + "showmethods qualified.class.name word\n" +
                                        "to search for mathods imvolving word";
        private static Pattern p = Pattern.compile("\\w+\\.");
        public static void main(String[] args) throws ClassNotFoundException {
                if(args.length < 1) {
                        System.out.println(usage);
                System.exit(0);
                }
                int lines = 0;
                try {
                        Class<?> c = Class.forName(args[0]);
                        Method[] methods = c.getMethods();
                        Constructor[] ctors = c.getConstructors();
                        if(args.length == 1) {
                                System.out.println(p.matcher(methods.toString()).replaceAll(""));
                                for(Constructor ctor : ctors)
                                        System.out.println(p.matcher(ctor.toString()).replaceAll(""));
                                lines = methods.length + ctors.length;
                        } else {
                                for(Method method : methods)
                                        if(method.toString().indexOf(args[1]) != -1) {
                                                System.out.println(p.matcher(method.toString()).replaceAll(""));
                                                lines++;
                                        }
                                        for(Constructor ctor : ctors)
                                                if(ctor.toString().indexOf(args[1]) != -1) {
                                                        System.out.println(p.matcher(ctor.toString()).replaceAll(""));
                                                        lines++;
                                                }
                        }
                } catch (ClassNotFoundException e) {
                        System.out.println("no such class:" + e);
                }
        }
}
输出
usage:
showMethods qualified.class.name
To show all methods in class or:
showmethods qualified.class.name word
to search for mathods imvolving word

代码都是书本上的,但是输出却不一样 怎么解决?

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

4 个回复

正序浏览
Name: getBoundingBox
Return Type: java.awt.Rectangle
Parameter Types:
Name: contains
Return Type: boolean
Parameter Types: [Ljava.lang.Class;@de6ced
Name: contains
Return Type: boolean
Parameter Types: [Ljava.lang.Class;@c17164 [Ljava.lang.Class;@1fb8ee3
Name: contains
Return Type: boolean
Parameter Types: [Ljava.lang.Class;@61de33 [Ljava.lang.Class;@14318bb [Ljava.lang.Class;@ca0b6 [Ljava.lang.Class;@10b30a7
Name: contains
Return Type: boolean
Parameter Types: [Ljava.lang.Class;@1a758cb
Name: contains
Return Type: boolean
Parameter Types: [Ljava.lang.Class;@1b67f74
Name: contains
Return Type: boolean
Parameter Types: [Ljava.lang.Class;@69b332 [Ljava.lang.Class;@173a10f
Name: reset
Return Type: void
Parameter Types:
Name: intersects
Return Type: boolean
Parameter Types: [Ljava.lang.Class;@530daa
Name: intersects
Return Type: boolean
Parameter Types: [Ljava.lang.Class;@a62fc3 [Ljava.lang.Class;@89ae9e [Ljava.lang.Class;@1270b73 [Ljava.lang.Class;@60aeb0
Name: getBounds
Return Type: java.awt.Rectangle
Parameter Types:
Name: invalidate
Return Type: void
Parameter Types:
Name: translate
Return Type: void
Parameter Types: [Ljava.lang.Class;@16caf43 [Ljava.lang.Class;@66848c
Name: inside
Return Type: boolean
Parameter Types: [Ljava.lang.Class;@8813f2 [Ljava.lang.Class;@1d58aae
Name: getBounds2D
Return Type: java.awt.geom.Rectangle2D
Parameter Types:
Name: getPathIterator
Return Type: java.awt.geom.PathIterator
Parameter Types: [Ljava.lang.Class;@83cc67
Name: getPathIterator
Return Type: java.awt.geom.PathIterator
Parameter Types: [Ljava.lang.Class;@e09713 [Ljava.lang.Class;@de6f34
Name: addPoint
Return Type: void
Parameter Types: [Ljava.lang.Class;@156ee8e [Ljava.lang.Class;@47b480
Name: wait
Return Type: void
Parameter Types: [Ljava.lang.Class;@19b49e6
Name: wait
Return Type: void
Parameter Types:
Name: wait
Return Type: void
Parameter Types: [Ljava.lang.Class;@10d448 [Ljava.lang.Class;@e0e1c6
Name: equals
Return Type: boolean
Parameter Types: [Ljava.lang.Class;@6ca1c
Name: toString
Return Type: java.lang.String
Parameter Types:
Name: hashCode
Return Type: int
Parameter Types:
Name: getClass
Return Type: java.lang.Class
Parameter Types:
Name: notify
Return Type: void
Parameter Types:
Name: notifyAll
Return Type: void
Parameter Types:

输出结果
回复 使用道具 举报
import java.awt.Polygon;
import java.lang.reflect.*;

class ShowMethod {
         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++) {  
            System.out.println("Name: " + theMethods[i].getName());

            System.out.println(" Return Type: " + theMethods[i].getReturnType().getName());  

           
            System.out.print(" Parameter Types:");  

            for (int k = 0; k < theMethods[i].getParameterTypes().length; k ++) {  
            System.out.print(" " + theMethods[i].getParameterTypes());  
            }  
            System.out.println();  
            }  
           
            }
}
书中的代码看不懂。自己查的API,搞定
回复 使用道具 举报
一般跟jdk工具,版本,还有随着时间的推移许多功能都在更新,你仔细检查下jdk版本,工具,以及代码格式,书写等等
回复 使用道具 举报
书中很多例子,我弄了之后 输出的结果和书本结果都不一样
怎么破?比方说“类方法提取器”这个例子吧。
我输出结果是
usage: /nShowMethods qualified.class.name/nTo show all methods in class or: /nShowMethods qualified.class.name word/nTo search for methods involving 'word'

书本上的结果是public boolean java.lang.String.equals(java.lang.Object)
public java.lang.String java.lang.String.toString()
public int java.lang.String.hashCode()
public int java.lang.String.compareTo(java.lang.String)
public int java.lang.String.compareTo(java.lang.Object)
public int java.lang.String.indexOf(int)
public int java.lang.String.indexOf(int,int)
public int java.lang.String.indexOf(java.lang.String

还有22章GUI,运行后压根木有窗口弹出

求大神解答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马