黑马程序员技术交流社区

标题: 新手求助 [打印本页]

作者: 阿冉    时间: 2013-4-22 03:40
标题: 新手求助
本帖最后由 阿冉 于 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

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


作者: 阿冉    时间: 2013-4-23 03:07
书中很多例子,我弄了之后 输出的结果和书本结果都不一样
怎么破?比方说“类方法提取器”这个例子吧。
我输出结果是
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,运行后压根木有窗口弹出

求大神解答
作者: 陈湘林    时间: 2013-4-23 08:55
一般跟jdk工具,版本,还有随着时间的推移许多功能都在更新,你仔细检查下jdk版本,工具,以及代码格式,书写等等
作者: 阿冉    时间: 2013-4-24 02:30
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,搞定
作者: 阿冉    时间: 2013-4-24 02:30
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:

输出结果




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2