• 乐字节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,小乐来帮您。

  • 相关阅读:
    visualSVNYou don't have permission to access on this server
    怎样截取Http请求
    ASP.NET @page 指令详解
    我的XMLHelperC# XML操作基类(修改,删除,新增,创建)
    最新Visual Studio 2010 下载及学习资料
    redis主从哨兵和集群的区别
    uniapp nvue 支持iconfont
    Error (Error Code: 1175) during executing update command on table using MySQL
    org.apache.jasper.JasperException: Unable to compile class for JSP
    java.sql.SQLException: Access denied for user 'root'@'10.10.10.10' (using password: YES)
  • 原文地址:https://www.cnblogs.com/lezijie/p/13826535.html
Copyright © 2020-2023  润新知