• java反射机制


    java反射就是通过字节码文件,创建对象,获取类的相关信息

    反射获取Class的四种方式

    1.调用运行时类本身的.class属性

    Class clazz = String.class;

    2,通过运行时类的对象获取

    Person p = new Person();

    Class clazz = p.getClass();

    3.通过Class的静态方法获取:体现反射的动态性

    String className = “java.util.commons”;

    Class clazz = Class.forName(className);

    4.通过类的加载器

    String className = “java.util.commons”;

    ClassLoader classLoader = this.getClass().getClassLoader();

    Class claz = classLoader.loadClass(className);

    package www.it.com.reflect;
    
    
    import javax.sound.midi.Soundbank;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.FormatFlagsConversionMismatchException;
    
    /**
     * @author wangjie
     * @create 2019-09-21 11:35
     * 反射的练习
     */
    public class ReflectTest {
        
        public static void main(String[] args) {
            //创建user对象的class对象
            Class<?> forName = null;
            try {
                forName = Class.forName("www.it.com.reflect.User");
                //class对象通过调用user的无参构造方法创建user对象
                User user =(User) forName.newInstance();
                /**
                 * 方法名称	作用
                 * getDeclaredMethods []	获取该类的所有方法
                 * getReturnType()	获取该类的返回值
                 * getParameterTypes()	获取传入参数
                 * getDeclaredFields()	获取该类的所有字段
                 * setAccessible	允许访问私有成员
                 */
                Method[] methods = forName.getDeclaredMethods();
                for (Method method : methods) {
                    System.out.println(method.getName());
                }
                String typeName = forName.getTypeName();
                Field[] fields = forName.getDeclaredFields();
                for (Field field : fields) {
                    System.out.println(field);
                }
                System.out.println(typeName);
                user.setId("1");
                System.out.println("使用反射机制获得use对象"+user.getId());
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            }
    
    
        }
    
    
    }
    
    import www.it.com.reflect.User;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationTargetException;
    
    public class Main {
    
        public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
           /* Class<User> userClass = User.class;
            User user = userClass.newInstance();
            user.setId("2");
            user.setName("第二种获取反射类的方式");
            System.out.println(user.toString()+"/t"+user.getName());*/
            /**
             * 通过有参构造获取获取反射的对象
             */
            Class<User> userClass = User.class;
            Constructor<User> constructor = userClass.getConstructor(String.class, String.class);
            User user = constructor.newInstance("1", "2");
            user.setName("使用有参构造方法获取user对象");
            System.out.println(user.getName());
    
        }
    }
    
    小蘑菇
  • 相关阅读:
    微信JS SDK Demo
    微信JS SDK使用权限签名算法
    微信JS接口
    微信分享JS接口失效说明及解决方案
    微信支付开发(2) 扫码支付模式一
    不懂技术的人不要对懂技术的人说这很容易实现
    独立开发者经验分享
    微信公开课PRO版张小龙演讲全文
    RC4加密算法的原理及实现
    上传APP加入视频预览--精简点名
  • 原文地址:https://www.cnblogs.com/wang66a/p/12069291.html
Copyright © 2020-2023  润新知