一、Java反射的思想
Java反射是Java程序在运行过程中获取类的对象、属性和方法,它是一个动态的概念。注意反射是从Java字节码中获取类对象的内容属性和方法等信息,而不是从静态的代码编译后的类中获取
有时候我们往往需要在系统运行过程中获取类的相关信息,有人说你new个该类对象不就完事了吗?不好意思,系统正在运行重要的应用不可能停下来让你修改代码,有的系统也没有现成的源代码供你修改!
比如系统正在炒股,老板说我的数据在那台服务器需要切换数据库。炒股的软件可能是买的软件,它运行的类只是给你提供些属性和方法,首先你不可能停机修改代码哪怕一秒也不行原因自己想,就算停机也没有现成的代码给你修改!这样就限制了系统的可扩展性,那么Java的反射技术是其中的一个解决方案,后面将给大家一个参考案例
Java的思想是一切皆为对象,那么想获取字节码的内容当然字节码也是对象,我们管它叫做类对象,即类也是对象我们叫做Class
Class的定义如下:
class Class{
字节码文件中的字段;
字节码文件中的构造函数;
字节码文件中的一般函数;
}
二、获取字节码对象(类对象)的方法
1、Object类的getClass()方法
Computer computer = new Computer();
Class c=computer.getClass();
2、class属性
Class c1=Computer.class;
3、使用Class.forName
Class c=Class.forName("com.Computer");
三、获取类对象的构造方法
package com.test;
import java.lang.reflect.Constructor;
public class Demo {
public static void main(String[] args) throws Exception {
Class c = Class.forName("com.test.Computer");
System.out.println(c);
Constructor constructor = c.getConstructor(String.class , int.class);
Object obj = constructor.newInstance("联想电脑",888);
Computer computer = (Computer)obj;
computer.show();
}
}
class Computer{
<