java反射

1.通过类类型获取类的方法信息和类的属性信息

public class FanShe {
    //获取类的方法信息
        public static void print(Object object){

            Class c1=object.getClass();
            //获取该类所有的方法
            Method[] methods=c1.getMethods();
            for(int i=0;i<methods.length;i++){
                //每个方法的返回值类类型
                Class returnType=methods[i].getReturnType();
                System.out.println(returnType.getName()+"");
                //方法名称:
               System.out.println(methods[i].getName());
                //获取参数类型
                Class[] par=methods[i].getParameterTypes();
               for(Class c:par){
                   System.out.print(c.getName()+",");
                }

            }


        }
    //获取类的成员变量属性何信息
        public static void bianliang(Object object){
            Class c1=object.getClass();
            Field[] fields= c1.getDeclaredFields();
            for(Field field:fields){

                Class fieldType=field.getType();
                //获取成员变量的类型
                String typename=fieldType.getTypeName();
                //获取成员变量的名称
                String fieldName=field.getName();
                System.out.println(typename+" "+fieldName);
            }
        }
        public static void main(String arg[]){
            String s="hello";
           // print(s);
            bianliang(s);

        }
}


java方法反射的基本操作

public class Method {
   public static void main(String args[]) throws InvocationTargetException, IllegalAccessException {
       A a=new A();
       Class c=a.getClass();
       try {
          java.lang.reflect.Method method=c.getMethod("print",int.class,int.class);
          method.invoke(a,10,20);
          java.lang.reflect.Method method1=c.getMethod("print",String.class,String.class);
          method1.invoke(a,"1","2");
          java.lang.reflect.Method method2=c.getMethod("print");
          method2.invoke(a);

       } catch (NoSuchMethodException e) {
           e.printStackTrace();
       }
   }
}
class A{
    public  void print(int a,int b){
        System.out.println("test+:"+(a+b));
    }
    public void print(String a,String b){
        System.out.println(a+b);
    }
    public void print(){
        System.out.println("hello");
    }
}

运行结果:

test+:30
12
hello

泛型集合的本质:

public class List {
    public static void main(String args[]) throws InvocationTargetException, IllegalAccessException {
        ArrayList arrayList=new ArrayList();
        ArrayList<String> list=new ArrayList<>();
        Class c1=arrayList.getClass();
        Class c2=list.getClass();
        //list.add(2)错误
        //结果为true编译之后的结果是去泛型化的
        //java中的泛型防止错误输入,只在编译阶段有效
        System.out.println(c1==c2);
        //绕过编译 list集合本来只能加入String类型,现在使用反射加入int类型的数据
        try {
            Method m =c2.getMethod("add",Object.class);
            m.invoke(list,20);
            System.out.println(list.size());
            System.out.println(list);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值