黑马程序员技术交流社区
标题:
关于反射的知识点
[打印本页]
作者:
爱如kongcheng
时间:
2015-5-8 22:25
标题:
关于反射的知识点
1、Class是一个类,它将所有的java类进行了抽象。它的对象是一个
具体类的字节码。所以说,任何一个类的字节码都是Class这个类的
对象。一个类在内存中只有一个字节码。
2、获取某一个类的字节码的方法:
(1)类名.class (这是类的一个属性)
Class c1= String.class;
(2)对象.getClass() 方法
String str="abc";
Class c2= str.getClass();
(3)Class.forName(类名) 方法
Class c3=Class.forName("java.lang.String");
3、
九个预定义的
Class
:
八个基本数据类型
(
byte
、
short
、
int
、
long
、
float
、
double
、
char
、
boolean
)
void类型的void.class
作者:
紫夜灵魂
时间:
2015-5-8 22:52
我也刚学反射,看视频学着写
模拟主板上插插件
首先,主板是需要提供接口的,那就先来个PCI接口,写的不完善,应该再加个接收插件的方法的
package api.ReflectDemo;
public interface PCI {
public void open();
public void close();
}
复制代码
然后来个 主板,实现构造函数接收PCI接口实现类
package api.ReflectDemo;
//主板类 用于运行各插件
public class MainBoard{
MainBoard(){
System.out.println("Main Board running....");
}
MainBoard(PCI p){
this();
p.close();
p.open();
}
}
复制代码
接着,模拟主板添插件过程,通过反射实现,这样以后不用修改代码,只需要往配置文件里添加接口实现类的实现信息,就可以直接运行了相应功能了
package api.ReflectDemo;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.util.Properties;
public class ReflectTest {
/*
* 反射 模拟电脑主板
* 电脑主板提供接口
* 通过配置文件添加内容实现插件插入接口
*
*/
public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException {
// TODO Auto-generated method stub
Properties p = new Properties();
FileInputStream fis = new FileInputStream("MainBoardInterface.properties");
p.load(fis);
for(int i = 0;i<p.size();i++){
String value = p.getProperty("pci"+(i+1));
@SuppressWarnings("unchecked")
Class<PCI> clzz = (Class<PCI>) Class.forName(value);
new MainBoard(clzz.newInstance());
}
}
}
复制代码
接下来,做个插件试试
package api.ReflectDemo;
public class Sound implements PCI {
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println("Sound running .....");
}
@Override
public void close() {
// TODO Auto-generated method stub
System.out.println("Sound close .....");
}
}
复制代码
别忘了配置文件
pci1 = api.ReflectDemo.Sound
复制代码
好了,可以运行了。
这一串代码说明了反射的奇妙用途
作者:
爱如kongcheng
时间:
2015-5-9 21:19
紫夜灵魂 发表于 2015-5-8 22:52
我也刚学反射,看视频学着写
模拟主板上插插件
首先,主板是需要提供接口的,那就先来个PCI接口,写的不完 ...
我要好好表扬你一下,太厉害了!
作者:
Cat
时间:
2015-5-9 21:49
赞一个~
作者:
0416-孙磊
时间:
2015-5-9 21:57
反射还没学..很不错了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2