反射示例

来源:互联网 发布:武林外传画画老人知乎 编辑:程序博客网 时间:2024/06/05 04:14

 很熟悉的示例吧!熟悉一下反射机制以及reflect的SDK
public class ViewClassInfoFrame extends JFrame implements ActionListener{    JTextField classnameField = new JTextField();    JButton  viewinfoButton = new JButton();    JLabel hintLabel = new JLabel();    JTextArea infoTextArea  = new JTextArea();    JScrollPane infoScrollPane = new JScrollPane();    TitledBorder titledBorder;        JPanel  upPanel = new JPanel();    JPanel  centerPanel  = new JPanel();        BorderLayout mainFrameBorderLayout = new BorderLayout();    BorderLayout centerPanelBorderLayout = new BorderLayout();    BorderLayout upPanelBorderLayout = new BorderLayout();       /** 构造函数 */    public ViewClassInfoFrame() {        enableEvents(AWTEvent.WINDOW_EVENT_MASK);        init();        validate();    }    /**初始化窗口*/    private void init(){                classnameField.setFont(new Font("Dialog",0,15));        classnameField.setSelectedTextColor(Color.white);        classnameField.setText("");                viewinfoButton.setFont(new Font("Dialog",0,13));        viewinfoButton.setText("查看类详细信息");        viewinfoButton.addActionListener(this);        hintLabel.setFont(new Font("Dialog",0,13));        hintLabel.setText("类路径");                infoTextArea.setFont(new Font("Dialog",0,14));        infoTextArea.setEditable(false);        infoTextArea.setText("");                titledBorder = new TitledBorder(BorderFactory.createEtchedBorder(Color.white,new Color(134,134,134)),"结果信息");        infoScrollPane.setBorder(titledBorder);        infoScrollPane.getViewport().add(infoTextArea,null);                upPanel.setLayout(upPanelBorderLayout);        centerPanel.setLayout(centerPanelBorderLayout);        upPanel.add(hintLabel,BorderLayout.NORTH);        upPanel.add(classnameField,BorderLayout.CENTER);        upPanel.add(viewinfoButton,BorderLayout.SOUTH);                centerPanel.add(infoScrollPane);                this.getContentPane().setLayout(mainFrameBorderLayout);        this.setSize(new Dimension(450,360));        this.setTitle("使用反射机制查看类信息");                this.getContentPane().add(upPanel,BorderLayout.NORTH);        this.getContentPane().add(centerPanel,BorderLayout.CENTER);                this.getRootPane().setDefaultButton(viewinfoButton);        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }    public void actionPerformed(ActionEvent e) {        String classname = classnameField.getText();        StringBuffer  buffer  =  new StringBuffer();        try {            //动态加载类  获取类对象            Class c = Class.forName(classname);            buffer.append("/**类声明**/ \n");            buffer.append(getClassStatement(c));            buffer.append("\n");                        buffer.append("/**字段**/");            buffer.append(getFields(c));                        buffer.append("/**构造函数**/");            buffer.append(getConstructors(c));            buffer.append("/**方法**/");            buffer.append(getMethods(c));            buffer.append("} \n");        } catch (Exception e1) {            JOptionPane.showMessageDialog(this, "没有找到类:" + e1.getMessage());        }        infoTextArea.setText(buffer.toString());    }    public String getClassStatement(Class c){        StringBuffer buffer = new StringBuffer();        if(c.getName().equals("java.lang.object")){            buffer.append("public class Ojbect{");            return buffer.toString();        }else {            String supername = c.getSuperclass().getName();            buffer.append("public class").append(c.getName());            buffer.append("extends").append(supername).append(";");        }        return buffer.toString();    }    /**     * 获取类的属性     * @param c     * @return     */    public String getFields(Class c){        StringBuffer  buffer = new StringBuffer();        Field field = null;        Field [] fields = c.getFields();         for (int i = 0; i < fields.length; i++) {            field = fields[i];            buffer.append(Modifier.toString(field.getModifiers())).append(" ");            Class type = field.getType();            buffer.append(type.getName()).append(" ");            buffer.append(field.getName()).append(";\n");//获取属性名        }        return buffer.toString();    }    /**     * 获取类的构造方法     * @param c     * @return String     */    public String getConstructors(Class c){        StringBuffer buffer = new StringBuffer();        Constructor [] constructors = c.getDeclaredConstructors();        Constructor constructor = null;        for (int i = 0; i < constructors.length; i++) {            constructor = constructors[i];            buffer.append(Modifier.toString(constructor.getModifiers())).append(" ");            buffer.append(constructor.getName()).append("(");            //获取参数类型            Class[] paramsTypes= constructor.getParameterTypes();            Class class1= null;            for (int j = 0; j < paramsTypes.length; j++) {                class1 = paramsTypes[j];                if (j==(paramsTypes.length-1)) {                    buffer.append(class1.getName());                }else {                    buffer.append(class1.getName()).append(",");                }            }            buffer.append(")");            //获取方法声明的异常            Class[] exceTypes = constructor.getExceptionTypes();            for (int j = 0; j < exceTypes.length; j++) {                class1 = exceTypes[j];                if (j==0) {                    buffer.append("throws");                }                 if(j==(exceTypes.length-1)){                    buffer.append(class1.getName());                } else {                    buffer.append(class1.getName()).append(", ");                }            }            buffer.append("\n");                    }                        return buffer.toString();    }    /**     * 获取类的方法     * @param c     * @return String     */    public String getMethods(Class c){        StringBuffer buffer = new StringBuffer();        Method[] methods= c.getMethods();        Method method = null;        for (int i = 0; i < methods.length; i++) {            method = methods[i];            buffer.append(Modifier.toString(method.getModifiers())).append(" ");            Class returnType = method.getReturnType();            buffer.append(returnType.getName()).append(" ");            buffer.append(method.getName()).append("(");            //获取方法参数            Class[] paramTypes =method.getParameterTypes();            Class class1 = null;            for (int j = 0; j < paramTypes.length; j++) {                class1 = paramTypes[j];                if (j==(paramTypes.length-1)) {                    buffer.append(class1.getName());                } else {                    buffer.append(class1.getName()).append(", ");                }            }            buffer.append(")");          //获取方法声明的异常            Class[] exceTypes = method.getExceptionTypes();            for (int j = 0; j < exceTypes.length; j++) {                class1 = exceTypes[j];                if (j==0) {                    buffer.append("throws");                }                 if(j==(exceTypes.length-1)){                    buffer.append(class1.getName());                } else {                    buffer.append(class1.getName()).append(", ");                }            }            buffer.append("\n");        }        return buffer.toString();    }            /**     * @param args     */    public static void main(String[] args) {        try {            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());        } catch (Exception e) {            e.printStackTrace();        }        ViewClassInfoFrame frame = new ViewClassInfoFrame();                Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();        Dimension frameSize = frame.getSize();        if (frameSize.height>screenSize.height) {            frameSize.height= screenSize.height;        }        if (frameSize.width>screenSize.width) {            frameSize.width= screenSize.width;        }        frame.setLocation((screenSize.width-frameSize.width)/2, (screenSize.height-frameSize.height)/2);        frame.setVisible(true);    }}
0 0
原创粉丝点击