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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 职业规划-苏小粉老师 黑马帝   /  2012-5-14 19:56  /  5614 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象,并调用该对象中的方法。

12 个回复

倒序浏览
  1. package com.a;

  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;

  5. class Str{
  6.         private String s;
  7.         public Str(String s){
  8.                 this.s=s;
  9.                
  10.         }
  11.         public void print(){
  12.                 System.out.println(s);
  13.         }
  14. }
  15. public class Test3 {
  16.        
  17.         public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
  18.                 Class str=Str.class;
  19.                 Constructor cs=str.getConstructor(String.class);
  20.                 Str st=(Str) cs.newInstance("谢谢苏老师给分");
  21.                 Method m=str.getMethod("print" );
  22.                 m.invoke(st);
  23.                
  24.         }
  25.        
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
职业规划-苏小粉老师 + 1 求助你们的大师兄给运行了一下,没有问题!.

查看全部评分

回复 使用道具 举报 1 0
嘎嘎  因为赶工,代码有点乱,不过应该符合要求吧。。。。
回复 使用道具 举报
package day31;

import java.lang.reflect.Method;

public class Su {
       
        public static void main(String[] args) throws Exception {               
               
                Object obj = Class.forName("day31.MyString").newInstance();
                Method myMethod = Class.forName("day31.MyString").getDeclaredMethod("myPrint", String.class);
                myMethod.invoke(obj, "Hello Teacher Su!");               
        }
}

class MyString{   

    public void myPrint(String s){
            System.out.println(s);
    }
}
哦了

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
蒋映辉 发表于 2012-5-14 20:07
嘎嘎  因为赶工,代码有点乱,不过应该符合要求吧。。。。

你那个class str=str.getClass()是什么意思呢??求赐教
回复 使用道具 举报
安路凤 发表于 2012-5-14 20:33
你那个class str=str.getClass()是什么意思呢??求赐教

凤姐还没看反射吧  这个 获取正在运行时类.....
然后可以通过它来得到类里边的方法啊 field啊 什么什么的
然后就能实现要求了
回复 使用道具 举报
蒋映辉 发表于 2012-5-14 20:38
凤姐还没看反射吧  这个 获取正在运行时类.....
然后可以通过它来得到类里边的方法啊 field啊 什么什么的 ...

RealSubject rs = new RealSubject();
  //接口指向实现它的类对象 ds 参数为 rs
  InvocationHandler ds = new DynamicProxy(rs);
  //????
  Class<?> cls = rs.getClass();
  //????
  Subject sub = (Subject)Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), ds);
  sub.request();
确实没看过 你帮我看下这个吧 Subject是接口
我不明白这怎么回事
回复 使用道具 举报
安路凤 发表于 2012-5-14 20:43
RealSubject rs = new RealSubject();
  //接口指向实现它的类对象 ds 参数为 rs
  InvocationHandler d ...

这个就是利用动态代理类来为接口动态生成实现类来着
回复 使用道具 举报
import java.lang.reflect.*;
public class PrintStr {
        public static void main(String[] args) {
                Class<?> sp = null;
                Object obj = null;
                Method method = null;
                try {
                        sp = Class.forName("StringPrint");
                } catch (Exception e) {
                        e.printStackTrace();
                }
                Constructor<?> cons[] = sp.getConstructors();// 取得全部的构造函数
                try {
                        method = sp.getMethod("print");// 返回一个 Method 对象,反映此 Class
                                                                                        // 对象所表示的类或接口的指定公共成员方法。
                        obj = cons[0].newInstance("输出的内容");// 创建新实例,指定的初始化参数str初始化该实例。
                        method.invoke(obj); // 对带有指定参数的指定对象调用由此 Method对象表示的底层方法。
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}
class StringPrint {
        String _str;

        public StringPrint(String str) {
                _str = str;
        }

        public void print() {
                System.out.println(_str);
        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
来晚了啊。有这样的机会,喊一声的啊
回复 使用道具 举报
褚代江 发表于 2012-5-14 22:51
来晚了啊。有这样的机会,喊一声的啊

现在写出来 还会给的 这是老师搞的小活动 赶紧哪
回复 使用道具 举报
本帖最后由 刘珂觐 于 2012-5-15 05:24 编辑

苏老师注册一周年纪念日
发福利哇
回复 使用道具 举报
import static java.lang.System.out;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class FanSe {
        public <T> void print(T t){
                out.println(FanSe.class+"print方法:"+t);
        }
}

class FanSeDemo{
        public static void main(String[] args)throws Exception{
                Class fanSeClass=Class.forName("FanSe");
                Object con=fanSeClass.getConstructor().newInstance();
                Method[] ms=fanSeClass.getMethods();
                for(Method m:ms){
                        if(m.getName().equals("print")){
                                m.invoke(con, "好好学习天天向上" );
                        }
                       
                }
//                Method method=fanSeClass.getMethod("print",这里泛型类型怎么表示哦);
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马