• java中的反射简单实例


    package club.reflection.entity.User;
    /**
     * 实体类
     * 
     */
    public class User {
        public String name;
        private Integer age;
        private String sex;
        
        public User(){
            
        }
        public User(String name,Integer age,String sex){
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
        
        public void eat(){
            System.out.println("喜欢吃!!!!");
        }
        public void show(){
            System.out.println("name:"+name);
            System.out.println("tage:"+age);
            System.out.println("sex:"+sex);
        }
        public void show(String xxx){
            System.out.println("name:"+name);
            System.out.println("tage:"+age);
            System.out.println("sex:"+sex);
            System.out.println(xxx);
        }
    }
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.lang.reflect.Modifier;
    
    import club.reflection.entity.User.User;
    
    /**
     *  反射实例 通过反射获取实体类中的属性方法 
     * @author Mr储
     *
     */
    public class RefDemo {
    
        public static void main(String[] args) {
            try {
                //获得Class对象()方法一通过Class静态方法forNmae();
                Class cls1 = Class.forName("club.reflection.entity.User.User");
                //通过class属性
                Class cls2 = User.class;
                //对象中通过Object类的getClass();
                Class cls3 = (new User()).getClass();
                System.out.println(String.class);
                //通过Class的newInstance()获得对象的实例返回Object类型
                Object obj = cls3.newInstance();
                //强制转换为User类型
                User user = (User)obj;
    //            System.out.println(cls3.getName());//club.reflection.instance.User获得类的完整名字
    //            System.out.println(cls3.getConstructors());//获得构造方法
                
                for(Field f : cls1.getDeclaredFields()){
                    System.out.println(f);
                }
                System.out.println("++++++++++");
                for(Field f : cls1.getFields()){
                    System.out.println(f);
                }
                /*//初始化一个User对象
                User u1 = new User("张三",18,"男");
                
                //获取属性
                u1.show();
                showField(u1);
                u1.show();//属性赋值后的比较
                
                
                //获取方法
                showMethods(u1);*/
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        /**
         * 获得类的属性 
         */
        public static void showField(Object obj){
            try {
                //将obj转化为Class对象
                Class cls = obj.getClass();
                Field[] fields = cls.getDeclaredFields();//获得所有的属性
                for(Field field : fields){
                    System.out.println(field.getName()+"	"+field.getType().getName());//获取属性名和类型
                    //改变访问权限(使可以赋值)
                    field.setAccessible(true);
                    //给类中的属性赋值
                    if(field.getType().getName().equals("java.lang.String")){
                        field.set(obj, "名字");
                    }else if(field.getType().getName().equals("java.lang.Integer")){
                        field.set(obj, 222);
                    }
                    
                }
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        /**
         * 获取方法
         */
        public static void showMethods(Object obj){
            Class cls = obj.getClass();
            Method[] methods = cls.getDeclaredMethods();//获取所有方法
            for(Method m : methods){
                System.out.println("方法:"+m);
                System.out.println("方法名称:"+m.getName());
                System.out.println("访问修饰符:"+Modifier.toString(m.getModifiers()));
                System.out.println("返回值类型:"+m.getReturnType());
                
                //获得参类型
                Class[] ClassParameters = m.getParameterTypes();
                for(Class c : ClassParameters){
                    System.out.println("参数类型:"+c.getName());
                }
            }
            
            try {
                //获得对象的方法
                Method show1 = cls.getMethod("show");
                //执行方法
                show1.invoke(obj);
                
                //获得对象的方法
                /**
                 * "show"要执行的方法名
                 * String.calss 方法参数的参数类型
                 */
                Method show2 = cls.getMethod("show",String.class);
                //执行方法
                show2.invoke(obj, "反射调用传参");
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    BZOJ 3205 [Apio2013]机器人 ——斯坦纳树
    BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理
    HDU 1423 Greatest Common Increasing Subsequence ——动态规划
    BZOJ 3309 DZY Loves Math ——莫比乌斯反演
    POJ 1038 Bugs Integrated, Inc. ——状压DP
    POJ 3693 Maximum repetition substring ——后缀数组
    POJ 2699 The Maximum Number of Strong Kings ——网络流
    POJ 2396 Budget ——有上下界的网络流
    BZOJ 4650 [Noi2016]优秀的拆分 ——后缀数组
    源码安装python
  • 原文地址:https://www.cnblogs.com/cpstart/p/5990985.html
Copyright © 2020-2023  润新知