zoukankan      html  css  js  c++  java
  • 乐字节Java反射之一:反射概念与获取反射源头Class


     

    Java反射机制概念


     

    “程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”,如Python,Ruby是动态语言;显然C++,Java,C#不是动态语言,但是JAVA有着一个非常突出的动态相关机制:Reflection。

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

    如:

    /**

    * 入门级示例:通过对象获取  包名.类名

    * @author Administrator

    */

    public class Simple {

    public static void main(String[] args) {

    Simple s=new Simple();

    System.out.println(s.getClass().getName());

    }

    }

    Java反射机制,可以实现以下功能:

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

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

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

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

    ⑤生成动态代理。

    相关的api为


     

     

    获取源头Class


     

    打开权限:

    add.setAccessible(true);

    所有类的对象其实都是Class的实例。这个Class实例可以理解为类的模子,就是包含了类的结构信息,类似于图纸。我们日常生活中,需要创造一个产品,如想山寨一个iphone手机,怎么办?


     

    三种方式可以实现:

    ⑴买个iphone手机,拆的七零八落的,开始山寨;

    ⑵到iphone工厂参观,拿到iphone磨具,开始山寨;

    ⑶跑到美国盗取iphone的图纸,开始山寨,最后一种最暴力,最爽。

    序列化:实现serializable接口

    反序列化

    克隆:实现cloneable接口,重写clone()方法,修改权限为public

    New 反射

    同理,获取类的class对象,也有三种方式:

    ①Class.forName(”包名.类名”)//一般尽量采用该形式

    ②类.class

    ③对象.getClass()

    示例如下:

    public class Source {

    public static void main(String[] args) {

    //第一种方式:对象.class

    Source s=new Source();

    Classc1=s.getClass();

    //第二种方式:类.class

    Classc2=Source.class;

    //第三种方式(推荐方式):Class.forName()

    Classc3=null;

    try {

    c3=Class.forName("com.shsxt.ref.simple.Source");

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    }

    System.out.println(c1.getName());

    System.out.println(c2.getName());

    System.out.println(c3.getName());

    }

    }

    有了class对象,我们就有了一切,这就是反射的源头,接下来就是“庖丁解牛”。

    欢迎继续关注乐字节Java课程,乐字节原创,学Java,小乐来帮您。

  • 相关阅读:
    模拟登陆江西理工大学教务系统
    python3爬虫 -----华东交大校园新闻爬取与数据分析
    以selenium模拟登陆12306
    PAT (Basic Level) Practice (中文)1076 Wifi密码 (15 分)
    PAT (Basic Level) Practice (中文)1047 编程团体赛 (20 分)
    PAT (Basic Level) Practice (中文)1029 旧键盘 (20 分)
    PAT (Basic Level) Practice (中文)1016 部分A+B (15 分)
    PAT (Basic Level) Practice (中文)1031 查验身份证 (15 分)
    PAT (Basic Level) Practice (中文)1041 考试座位号 (15 分)
    PAT (Basic Level) Practice (中文)1037 在霍格沃茨找零钱 (20 分)
  • 原文地址:https://www.cnblogs.com/lezijie/p/13826535.html
Copyright © 2011-2022 走看看