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为

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mWvKvsKd-1597755624260)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

    获取源头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();
    		Class<?>c1=s.getClass();
    		//第二种方式:类.class
    		Class<?>c2=Source.class;
    		//第三种方式(推荐方式):Class.forName()
    		Class<?>c3=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对象,我们就有了一切,这就是反射的源头,接下来就是“庖丁解牛”。

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

    
    
    
    有了class对象,我们就有了一切,这就是反射的源头,接下来就是“**庖丁解牛**”。
    
    **PS:获取学习资源技术干货:lezijie007(暗号66)**
  • 相关阅读:
    极验滑动验证码
    保利威视频播放
    Redis
    DRF 解析器和渲染器
    DRF 分页组件
    DRF 权限和频率
    Nginx反向代理
    Laravel使用反向migrate 和 iseed扩展导出表数据
    psr规范发展历程
    supervisor
  • 原文地址:https://www.cnblogs.com/lezijie/p/13525982.html
Copyright © 2011-2022 走看看