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();
            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对象,我们就有了一切,这就是反射的源头,接下来就是“庖丁解牛”。
    欢迎继续关注乐字节Java课程,乐字节原创,学Java,小乐来帮您。
  • 相关阅读:
    Windows系统自带工具的 cmd 命令
    阿里巴巴集团2016校园招聘-Python工程师笔试题(附加题+部分答案)
    小米3刷机说明
    第3章 常用运算符
    第1章Java入门体验
    jQuery表单验证案例
    jQuery超链接提示,提示跟随鼠标动
    [转载]我的Java后端书架 (2016年暖冬4.0版)
    PHP代码重用与函数编写
    PHP数组操作
  • 原文地址:https://www.cnblogs.com/lotbyte/p/11144454.html
Copyright © 2011-2022 走看看