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对象,咱们就有了所有,这就是反射的源头,接下来就是“庖丁解牛”。