zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
  • 相关阅读:
    lammps温度云图
    MS中石墨烯建模
    把网页上的内容保存为PDF格式
    lammps 计算热导率
    tomcat错误:严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.modeler.BaseModelMBean.invoke Exception
    面向接口编程
    ms中使用AC模块建模时候,保持单个分子的键长 键角不发生变化。
    Python读取文件报错
    debug记录
    网络流
  • 原文地址:https://www.cnblogs.com/cpstart/p/5990985.html
Copyright © 2011-2022 走看看