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