乐字节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,小乐来帮您。
posted @ 2019-07-06 22:34  乐字节  阅读(181)  评论(0编辑  收藏  举报