zoukankan      html  css  js  c++  java
  • Java中反射的三种常用方式

    Java中反射的三种常用方式

    package com.xiaohao.test;


    public class Test{
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
    // Class<?> clazz=Class.forName("com.xiaohao.test.User"); //1方法一
    // User user=(User) clazz.newInstance();

    // User user=User.class.newInstance(); //2 方法二

    User user2=new User(); //3 方法三
    User user=user2.getClass().newInstance();
    user.setId(10);
    user.setUserName("小浩");
    user.setPassword("123456");
    System.out.println(user);

    }
    }

    package com.xiaohao.test;

    import java.util.ArrayList;
    import java.util.List;

    public class User {
    private Integer id;
    private String userName;
    private String password;
    List<String> books=new ArrayList<String>();



    public Integer getId() {
    return id;
    }

    public void setId(Integer id) {
    this.id = id;
    }

    public String getUserName() {
    return userName;
    }

    public void setUserName(String userName) {
    this.userName = userName;
    }

    public String getPassword() {
    return password;
    }

    public void setPassword(String password) {
    this.password = password;
    }

    public User(String userName, String password) {
    super();
    this.userName = userName;
    this.password = password;
    }

    public User() {
    super();
    }

    public List<String> getBooks() {
    return books;
    }

    public void setBooks(List<String> books) {
    this.books = books;
    }

    @Override
    public String toString(){
    return this.id+" "+this.userName+" "+this.password+" ";
    }

    }

    package com.xiaohao.test;

    import java.lang.reflect.Array;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;


    public class Test{
    public static void main(String[] args) throws Exception {
    // Class<?> clazz=Class.forName("com.xiaohao.test.User"); //1方法一
    // User user=(User) clazz.newInstance();

    // User user=User.class.newInstance(); //2 方法二

    User user2=new User(); //3 方法三
    User user=user2.getClass().newInstance();
    System.out.println("user2对象的值为:"+user2);
    System.out.println("类的名字为:"+user2.getClass().getName());
    // Field field=user2.getClass().getDeclaredField("number");
    // Field field=User.class.getDeclaredField("number");
    Field field=Class.forName("com.xiaohao.test.User").getDeclaredField("number");
    field.setAccessible(true);
    field.set(user2,"1000");
    System.out.println("user2对象的值为:"+user2);
    Method method=User.class.getDeclaredMethod("setUserName",String.class);
    method.invoke(user2,"小浩爷爷");
    System.out.println("user2对象的值为:"+user2);
    Class<?> component=Class.forName("com.xiaohao.test.User").getDeclaredField("address").get(user2).getClass().getComponentType();
    User.class.getDeclaredField("address").setAccessible(true);
    int length=((String[])User.class.getDeclaredField("address").get(user2)).length;
    System.out.println("user2中原始的数组的长度为:"+length);
    Object [] array=(Object[]) Array.newInstance(component, length+75);
    System.out.println("user2中修改后的数组的长度为:"+array.length);
    user.setId(10);
    user.setUserName("小浩");
    user.setPassword("123456");
    System.out.println(user);

    }
    }

    package com.jd.singleton;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    /**
     *
     *
     * Created by zhanghao10 on 2016/5/9.
     */
    public class Reflect {
        /**
         *  测试反射生成对应的方法
         */
        public static void main (String args[]) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchFieldException, NoSuchMethodException {
    
    //        Class<?> clazz= Class.forName("com.jd.singleton.User");
    //        User user= (User) clazz.newInstance();
    //        User user2= (User) clazz.newInstance();
    //        System.out.println(user==user2);
    //        user.setName("Hello World");
    //        System.out.println(user.equals(user2));
    //        System.out.println(user.getName());
    //        System.out.println(user2.getName());
    
    
    //        Class<User> clazz2=User.class;
    //        User user=clazz2.newInstance();
    //        user.setName("Hello World");
    //        System.out.println(user.getName());
    
    
    //        User user=new User();
    //        User user1=user.getClass().newInstance();
    //        user1.setName("Hello World");
    //        System.out.println(user.getName());
    
    
    
    //        Integer n1 = new Integer(47);
    //        Integer n2 = new Integer(47);
    //
    //        System.out.println(n1 == n2);
    //        System.out.println(n1.equals(n2));
    
    //        Class<?> clazz= Class.forName("com.jd.singleton.User");
    //        Constructor<?>[] cons=clazz.getConstructors();
    //        System.out.println(cons.length);
    
    //           Class<?> clazz=Class.forName("com.jd.singleton.User");
    //           Constructor<?> [] cons= clazz.getDeclaredConstructors();
    //           cons[0].setAccessible(true);//对于私有方法,需要设置可见性为false
    //           User user= (User) cons[0].newInstance();
    //           user.setName("123456");
    //           System.out.println(user.getName());
    
    //           Class<?> clazz=Class.forName("com.jd.singleton.User");
    //           Constructor<?> [] cons= clazz.getDeclaredConstructors();
    //           cons[0].setAccessible(true);//对于私有方法,需要设置可见性为false
    //           User user= (User) cons[0].newInstance();
    //           user.setName("123456");
    //           System.out.println(user.getName());
    
    //              Class<?> clazz=Class.forName("com.jd.singleton.User");
    //              User user= (User) clazz.newInstance();
    //              Field filedName=clazz.getDeclaredField("name");
    //              filedName.setAccessible(true);
    //              filedName.set(user,"我是小浩也");
    //              System.out.println(user.getName());
    
    //                 Class<?> clazz=Class.forName("com.jd.singleton.User");
    //                 User user= (User) clazz.newInstance();
    //                 Method method=clazz.getDeclaredMethod("setName",String.class);
    //                 method.invoke(user,"天下太平");
    //                System.out.println(user.getName());
    
    
                      Class<?> clazz=Class.forName("com.jd.singleton.User");
                      User user= (User) clazz.newInstance();
                      Method method=clazz.getDeclaredMethod("setName",String.class,int.class);
                      method.invoke(user,"天下太平",123456);
                      System.out.println(user.getValue());
    
    
    
    
    
    
    
    
        }
    
    }
    

      

    package com.jd.singleton;
    
    /**
     * Created by zhanghao10 on 2016/5/9.
     */
    public class User {
    
    
    //    private User(){}
    
        private String name;//用户名称
        private int value;
    
        public String getName() {
            return name;
        }
    
        public int getValue(){
            return value;
        }
    
        public void setName(String name,int value) {
            this.name = name;
            this.value=value;
        }
    
        @Override
        public int hashCode() {
            return (int) (Math.random()*100);
    //        return super.hashCode();
    
        }
    
        @Override
        public boolean equals(Object obj) {
            return true;
    //        return super.equals(obj);
        }
    }
    

      

  • 相关阅读:
    arduino编程基础之--程序 元素
    arduino编程基础之--环境搭建
    C语言高手之路--目录
    生活中的数据结构
    Manjaro-KDE配置全攻略转
    多线程程序的奇怪问题记录
    manjaro安装openmv ide
    Linux进程数据结构详解
    Linux ps aux指令詳解--转
    记一次粗心大意的代码错误
  • 原文地址:https://www.cnblogs.com/xiohao/p/4170168.html
Copyright © 2011-2022 走看看