• 通过类对象来获取类中的属性,方法,构造器


    获取类的信息(实际开发用的很少,但是要知道)

    通过Class对象来获取类中的变量,方法,构造器,属性等。其中包括私有个公有!

    package Reflection;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    public class Test06 {
        public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
            Class c1 =  Class.forName ("Reflection.User");
    //        User user = new User ();
    //        c1 =user.getClass ();
            System.out.println (c1.getName ());//获得包名加类名
            System.out.println (c1.getSimpleName ());//获取类名
            Field[] fields = c1.getFields ();
            for (Field field : fields) {//只能打印public方法
                System.out.println (field);
            }
            fields = c1.getDeclaredFields ();//可以强制获取所以方法,包括私有
            for (Field field : fields) {
                System.out.println (field);
            }
    //        Field name = c1.getField("name");//获取指定属性的值
    //        System.out.println (name);
            Field name1 = c1.getDeclaredField ("name");//获取指定属性的值
            System.out.println (name1);
    //获取本类的全部方法,包括其父类的全部public方法。
            Method[] methods =c1.getMethods();
            for (Method method : methods) {
                System.out.println ("正常的方法:"+method);
            }
            //获取全部的方法,包括私有
            methods = c1.getDeclaredMethods ();
            for (Method method : methods) {
                System.out.println ("全部的方法:"+method);
            }
            Method getName = c1.getMethod ("getName",null);
            Method setName = c1.getMethod ("setName",String.class);//传入的参数类型
        //获取不同类型构造器的两种方式
            Constructor[] constructors = c1.getConstructors ();
            for (Constructor constructor : constructors) {
                System.out.println (constructor);
            }
            constructors = c1.getDeclaredConstructors ();
            for (Constructor constructor : constructors) {
                System.out.println ("#"+constructor);
            }
            Constructor declaredConstructor =  c1.getDeclaredConstructor (String.class,int.class,int.class);
            System.out.println ("指定:"+declaredConstructor);
        }
    }
    运行结果:
    Reflection.User
    User
    private java.lang.String Reflection.User.name
    private int Reflection.User.id
    private int Reflection.User.age
    private java.lang.String Reflection.User.name
    正常的方法:public java.lang.String Reflection.User.getName()
    正常的方法:public int Reflection.User.getId()
    正常的方法:public void Reflection.User.setName(java.lang.String)
    正常的方法:public void Reflection.User.setId(int)
    正常的方法:public int Reflection.User.getAge()
    正常的方法:public void Reflection.User.setAge(int)
    正常的方法:public final void java.lang.Object.wait() throws java.lang.InterruptedException
    正常的方法:public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
    正常的方法:public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
    正常的方法:public boolean java.lang.Object.equals(java.lang.Object)
    正常的方法:public java.lang.String java.lang.Object.toString()
    正常的方法:public native int java.lang.Object.hashCode()
    正常的方法:public final native java.lang.Class java.lang.Object.getClass()
    正常的方法:public final native void java.lang.Object.notify()
    正常的方法:public final native void java.lang.Object.notifyAll()
    全部的方法:public java.lang.String Reflection.User.getName()
    全部的方法:public int Reflection.User.getId()
    全部的方法:public void Reflection.User.setName(java.lang.String)
    全部的方法:public void Reflection.User.setId(int)
    全部的方法:public int Reflection.User.getAge()
    全部的方法:public void Reflection.User.setAge(int)
    public Reflection.User()
    public Reflection.User(java.lang.String,int,int)
    #public Reflection.User()
    #public Reflection.User(java.lang.String,int,int)
    指定:public Reflection.User(java.lang.String,int,int)
    
    
  • 相关阅读:
    Netbeans 注释模板配置
    你可能不知道的5 个强大的HTML5 API 函数
    科幻大片中那些牛X代码真相
    怎么才能成为一名PHP专家?
    网页设计中常见的错误列举
    五个必须警惕的数据库设计错误
    五种情况会导致Session 丢失
    四种策略防止用户将表单重复提交
    jQuery的deferred对象使用笔记
    [Web前端]由cookies安全说开去
  • 原文地址:https://www.cnblogs.com/li33/p/12740727.html
Copyright © 2020-2023  润新知