反射 reflection基本使用

来源:互联网 发布:胶南网络推广招聘信息 编辑:程序博客网 时间:2024/05/29 04:15

反射 reflection


Class  jvm中  用来 管理类的  类

怎样获取一个类的Class对象?

1、类名.class

2、对象.getClass()

3、Class.forName("包名.类名");  异常 处理

Class 对象是单例的

能通过Class对象取到该类中的

包、类名、父类、接口、属性、方法、构造方法

能取所有的,也能取到public,还能取某个特定的


反射有啥用

1、破坏封装

2、今天调用明天的代码   解耦和  


基本使用如下:

package XXX;
public class TestRef01
{
    
    public static void main(String[] args) 
        throws ClassNotFoundException
    {
        
        //获取Person类的  Class对象
        Class c1 = Person.class;
        Person p = new Person();
        Class c2 = p.getClass();
        Class c3 = Class.forName("com.itany.coreJava.day19.Person");
        //Class对象是单例 的
        
        System.out.println(c1 == c2);

        System.out.println(c1 == c3);
       
        System.out.println(c2 == c3);
        // 获取类的包
        
        Package pck =  c1.getPackage();
        System.out.println(pck.getName());
        
        // 获取类的名字
        // 包名.类名

        System.out.println(c1.getName());
        //类名
        System.out.println(c1.getSimpleName());
        
        //  获取父类的简单类名
        System.out.println(c1.getSuperclass().getSimpleName());
        
        
        //获取接口
        
        Class[] interfaces = c1.getInterfaces();
        
        for (Class c : interfaces)
        {
            System.out.println(c.getSimpleName());
        }
        //获取属性public 
        
        Field[] fs = c1.getFields();
        for (Field f : fs)
        {
            System.out.println(f.getName());
        }
        
        // 反射  1、破坏封装
        //  获取所有的属性

        
        Field[] allFs = c1.getDeclaredFields();
        //
        System.out.println("all   fields ............");
        for (Field f : allFs)
        {
            System.out.println(f.getName());
        }
        
        //获取构造方法public
        Constructor[] cons =  c1.getConstructors();
        System.out.println(cons.length);
        //获取所有的构造方法
        Constructor[] allCons = c1.getDeclaredConstructors();
        System.out.println(allCons.length);
        
        System.out.println("methods.........................");
        // 获取方法
        // 所有public方法,包括父类 或者 父接口中的

        Method[] ms  = c1.getMethods();
        Method[] allMs = c1.getDeclaredMethods();
        for (Method m : ms)
        {
            System.out.println(m.getName());
        }  
    }
        
}







0 0
原创粉丝点击