zoukankan      html  css  js  c++  java
  • Java(30):反射

    import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationTargetException;
    
    public class ReflectionDemo {
    
        public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
            
            Class studentClass = Class.forName("Student");
            System.out.println("studentClass = "+studentClass);
            
            System.out.println("所有构造方法:");
            Constructor[] constructors = studentClass.getDeclaredConstructors();
            for (Constructor c : constructors) {
                System.out.println(c);
            }
            
            System.out.println("所有公有public构造方法:");
            constructors = studentClass.getConstructors();
            for (Constructor c : constructors) {
                System.out.println(c);
            }
        
            System.out.println("获取无参的构造方法:");
            Constructor constructor = studentClass.getDeclaredConstructor(null);
            System.out.println(constructor);
            
            System.out.println("获取带string、int、string参数的构造方法,并使用:");
            constructor = studentClass.getDeclaredConstructor(String.class, int.class, String.class);
            System.out.println(constructor);
            
    //        该构造方法是private,通过setAccessible(true)忽略访问修饰符
            constructor.setAccessible(true);
            Object obj = constructor.newInstance("张三", 18, "male");
            
        }
    
    }
    
    class Student {
        
        public Student() {
            System.out.println("public,无参数构造方法...");
        }
        
        protected Student(String name) {
            System.out.println("protected,带string参数构造方法.. student名字是:"+name);
        }
        
        Student(String name, int age) {
            System.out.println("默认,带string、int参数构造方法.. student名字是:"+name+",年龄是:"+age);
        }
        
        private Student(String name, int age, String sex) {
            System.out.println("private,带string、int、string参数构造方法.. student名字是:"+name+",年龄是:"+age+",性别是:"+sex);
        }
        
    }
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    
    public class FieldDemo {
    
        public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {
            
            Class personClass = Class.forName("Person");
            System.out.println(personClass);
            
            System.out.println("获取所有字段:");
            Field[] fields = personClass.getDeclaredFields();
            for (Field f : fields) {
                System.out.println(f);
            }
            
            System.out.println("获取所有公有public字段:");
            fields = personClass.getFields();
            for (Field f : fields) {
                System.out.println(f);
            }
            
            System.out.println("获取某一字段,并调用:");
            Field field = personClass.getDeclaredField("sex");
            System.out.println(field);
            
    //        Constructor constructor = personClass.getDeclaredConstructor(null);
    //        Object person = constructor.newInstance();
            Object person = personClass.getDeclaredConstructor(null).newInstance();
            field.set(person, "male");
            
            System.out.println(person);
            
            System.out.println("获取私有private字段,并调用:");
            field = personClass.getDeclaredField("phoneNumber");
            
            field.setAccessible(true);
            field.set(person, "13xxxxxxxxx");
        
            System.out.println(person);
        
        }
        
        
    }
    
    class Person {
        
        public String name;
        protected int age;
        String sex;
        private String phoneNumber;
        
        public Person() {
            //empty
        }
        
        @Override
        public String toString() {
            return "Person [name = " + name + ", age = " + age + ", sex = " + sex + ", phoneNumber = " + phoneNumber + "]";
        }
    }
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    public class MethodDemo {
    
        public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
            
            Class teacherClass = Class.forName("Teacher");
            System.out.println(teacherClass);
            
            System.out.println("获取所有方法:");
            Method[] methods = teacherClass.getDeclaredMethods();
            for (Method m : methods) {
                System.out.println(m);
            }
            
            System.out.println("获取所有公有public方法:");
            methods = teacherClass.getMethods();
            for (Method m : methods) {
                System.out.println(m);
            }
            
            System.out.println("获取某一方法:");
            Method method = teacherClass.getDeclaredMethod("show1", String.class);
            System.out.println(method);
            Object object = teacherClass.getDeclaredConstructor(null).newInstance();
            method.invoke(object, "jack");
            
            method = teacherClass.getDeclaredMethod("show4", int.class);
            System.out.println(method);
    //        解除私有private限定
            method.setAccessible(true);
            String str = (String) method.invoke(object, 20);
            System.out.println(str);
            
        }
        
    }
    
    class Teacher {
        public void show1(String name) {
            System.out.println("public, name = " + name);
        }
        
        void show2(String name, int age) {
            System.out.println("default, name = ");
        }
        
        protected void show3() {
            System.out.println("protected, empty param");
        }
        
        private String show4(int age) {
            System.out.println("private, age = " + age);
            return "abc";
        }
    }

    参考:https://blog.csdn.net/a745233700/article/details/82893076

  • 相关阅读:
    java中this关键字
    java继承
    java super关键字
    java String类型存储详解
    java四种访问权限修饰符
    C/C++语言void及void指针深层探索【转】
    Linux Epoll介绍和程序实例【转】http://blog.csdn.net/sparkliang/article/details/4770655
    服务器与wp7的socket通信【转】 http://www.cnblogs.com/linzheng/archive/2011/06/21/2086456.html
    android关于socket编程,以聊天为例【转】http://hi.baidu.com/yaoyuanhuajx/item/9b93d7565f315ba9acc857d7
    Tesseract 3 语言数据的训练方法【转】http://blog.csdn.net/dragoo1/article/details/8439373
  • 原文地址:https://www.cnblogs.com/kenantongxue/p/14108459.html
Copyright © 2011-2022 走看看