zoukankan      html  css  js  c++  java
  • java.lang.Class<T> -- 反射机制

    1反射机制是什么

    反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

    2反射机制能做什么

    反射机制主要提供了以下功能: 

    • 在运行时判断任意一个对象所属的类;

    • 在运行时构造任意一个类的对象;

    • 在运行时判断任意一个类所具有的成员变量和方法;

    • 在运行时调用任意一个对象的方法;

    • 生成动态代理。

    3反射机制的相关API

    通过一个对象获得完整的包名和类名

    package edu.pri.lime.test;
    
    public class TestReflect {
    
        public static void main(String[] args){
            TestReflect reflect = new TestReflect();
    //        通过一个对象获得完整的包名和类名
            System.out.println(reflect.getClass().getName());
        }
    }

    实例化Class类对象

    package edu.pri.lime.test;
    
    public class TestReflect {
    
        public static void main(String[] args) throws ClassNotFoundException{
            
            Class<?> clazzA = Class.forName("edu.pri.lime.test.TestReflect");
            Class<?> clazzB = new TestReflect().getClass();
            Class<?> clazzC = TestReflect.class;
            
            System.out.println(clazzA.getName());
            System.out.println(clazzB.getName());
            System.out.println(clazzC.getName());
        }
    }

    获取一个对象的父类与实现的接口

    package edu.pri.lime.test;
    
    import java.io.Serializable;
    
    public class TestReflect implements Serializable{
    
        private static final long serialVersionUID = -3407476067923921222L;
    
        public static void main(String[] args) throws ClassNotFoundException{
            
            Class<?> clazz = Class.forName("edu.pri.lime.test.TestReflect");
    //        获取父类
            Class<?> clazzSup = clazz.getSuperclass();
            System.out.println(clazzSup.getName());
            
    //        获取所有接口
            Class<?> clazzInte[] = clazz.getInterfaces();
            for(Class<?> in : clazzInte){
                System.out.println(in.getName());
            }
        }
    }

    获取某个类中的全部构造函数

    package edu.pri.lime.test;
    
    import java.io.Serializable;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Modifier;
    
    public class TestReflect implements Serializable{
        private static final long serialVersionUID = -3407476067923921222L;
    
        private int id;
        private String name;
    
        public TestReflect() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        public TestReflect(int id) {
            super();
            this.id = id;
        }
    
        public TestReflect(String name) {
            super();
            this.name = name;
        }
    
        public TestReflect(int id, String name) {
            super();
            this.id = id;
            this.name = name;
        }
    
        public static void main(String[] args) throws ClassNotFoundException{
            
            Class<?> clazz = Class.forName("edu.pri.lime.test.TestReflect");
    //        获取所有构造函数
            Constructor<?>[] constructors = clazz.getConstructors();
            for(Constructor<?> con : constructors){
    //            获取构造函数所有参数类型
                Class<?>[] paramTypes = con.getParameterTypes();
                System.out.print(Modifier.toString(con.getModifiers()) + " ");
                System.out.print(con.getName() + "(");
                for(int i = 0;i < paramTypes.length;i++){
                    if(i < paramTypes.length - 1){
                        System.out.print(paramTypes[i].getName().substring(paramTypes[i].getName().lastIndexOf(".") + 1) + ",");
                    }else{
                        System.out.print(paramTypes[i].getName().substring(paramTypes[i].getName().lastIndexOf(".") + 1));
                    }
                }
                System.out.println(");");
            }
        }
    }

    通过反射机制实例化一个类的对象

  • 相关阅读:
    dajngo ORM查询中select_related的作用,博客主题的定制,从数据库中按照年月筛选时间
    Django数据查询中对字段进行排序
    Django验证码实现
    django登录注册验证之密码包含特殊字符,确认密码一致实现,Form验证
    django模板传入参数的处理方式与反向生成url
    在django中使用循环与条件语言
    django的模板的继承与导入
    sublime3故障收集emmet无法安装pyv8
    [SQL SERVER系列]之嵌套子查询和相关子查询
    [SQL SERVER系列]读书笔记之SQL注入漏洞和SQL调优
  • 原文地址:https://www.cnblogs.com/ClassNotFoundException/p/6231879.html
Copyright © 2011-2022 走看看