反射入门
如何判断一个类有多少的方法? reflection反射
反射
-程序可以访问,检测和修改它本身状态或行为能力,即自描述和自控制
-可以在运行时加载、探知和使用编译期间完全未知的类
-给Java插上动态语言特性的翅膀,弥补强类型语言的不足
-Java.lang.reflection包,java2就有,java5得到完善
创建对象
1、静态编码&编译
public class A{
public void hello(){
System.out.println(“hello”);
}
}
A obj1 = new A();
obj1.hello();
2、clone克隆
public class B implements Cloneable{
public void hello(){
System.out.println(“hello”);
}
protected object clone() throws CloneNotSupportedException{
return super.clone();
}
}
//objct3是object2的克隆对象,没有调用函数
B obj2 = new B();
B.hello();
B obj3 = (B)obj2.clone();
obj3.hello();
3、序列化(serialization)和反序列化(deserialization)
以文件为载体实现clone
public class C implements Serialization{
private static final long seriaVersionUID = 1L;
public void hello(){
System.out.println(“hello”);
}
}
//没有条用构造函数
//序列化会引发文件漏洞,未来将移除JDK
C obj4 = new C();
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(“data.obj”));
out.writeObject(obj4);
out.close();
ObejctInoutStream in = new ObejctInoutStream(new FileOutputStream(“data.obj”));
C obj5 = © in.readobject();
in.close();
obj5.hello();
4、newInstance 调用构造函数
Object obj6 = Class.forName(“A”).newInstance();
Method m = Class.forName(“A”).getMethod(“hello”);
通过字符串动态的去访问A的hello方法
m.invoke(obj6);//输出hello这句话
A obj7 = (A) Class.forName(“A”).newInstance();
5、newInstance 调用构造函数
Constructor constructor = A.class.getConstructor();
A obj8 = constructor.newInstance();
obj8.hello();
8352

被折叠的 条评论
为什么被折叠?



