zoukankan      html  css  js  c++  java
  • 027.1 反射技术 Class

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
    要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.
    反射技术解决问题:初始代码固定后,减少修改代码,动态获取类
    在普通类上层还有类,Class类,加载文件的时候就创建了Class对象

    ######################################################################
    获取Class对象的方式:
    ######一:通过object的getClass方法获取,反射技术不适用这种方法
    通过对象调用getClass方法

    Person p1 = new Person();
    Person p2 = new Person();
    Class clazz1 = p1.getClass();
    Class clazz2 = p2.getClass();
    System.out.println(clazz1 == clazz2);//true
    //        System.out.println(clazz1.getName());//获取类的名字。

    ######二:每个数据都有默认的静态属性,.class,用该属性就可以获取字节码文件对象
    通过类.class获取。
    Class clazz = Person.class;

    ######三:forName方法,通过名称就可以获取对应的字节码文件对象,常用方法

    String className = "cn.itcast.domain.Person";          //类名前面需要加包名#########################(重)
    // 1,通过给定的类名称,加载对应的字节码文件,并封装成字节码文件对象Class.
    Class clazz = Class.forName(className);
    //        System.out.println(clazz);
    
    //通过newInstance()就可以创建字节码对象所表示的类的实例。
    /*
     * 2,通过new创建给定的类的实例。
     * 3,调用该类的构造函数。
     * 通常被反射的类都会有提供空参数的构造函数。
     * 没有对应的构造函数,会报InstantiationException
     * 如果有提供,但是权限不够,会报IllegalAccessException
     */
    Object obj = clazz.newInstance();
    
    /* Person p = new Person();
     * 1,加载Person类,并将Person类封装成字节码文件对象。
     * 2,通过new创建Person对象。
     * 3,调用构造函数对对象初始化。
     */
    System.out.println(obj);

    #########################################################################
    创建构造函数

    String className = "cn.itcast.domain.Person";
    Class clazz = Class.forName(className);
    
    //获取指定的构造器。获取Person类中两个参数string,int的构造函数。
    Constructor cons = clazz.getConstructor(String.class,int.class);
    
    //有了构造器对象后,通过构造器对象来初始化给类对象。
    Object obj = cons.newInstance("wangwu",23);
    //Person p = new Person("lisi",21);
    
    System.out.println(obj);




  • 相关阅读:
    IOS之推送通知(本地推送和远程推送)
    IOS,苹果内购和添加广告
    CSS3选择器、背景、边框、文本
    CSS2D旋转、过渡、动画
    JavaScript Array、Date、String
    那些不常用却很有的CSS
    纯CSS打造兼容各种浏览器的几何图形
    安装 SQLManagementStudio_x86_CHS(SQL Server Management Studio) 老提示重启的解决办法
    关于使用Html.RenderPartial和Html.Partial显示分部视图时提示参数错误的BUG
    学习从实践开始之jQuery插件开发:对话框插件开发
  • 原文地址:https://www.cnblogs.com/-nbloser/p/9827359.html
Copyright © 2011-2022 走看看