反射的定义
动态获取字节码文件,将成员进行抽象化处理.
Field---对属性的抽象形成的类
Method----对方法的抽象形成的类
Constructor----对构造方法抽象形成的类
反射可以不通过new建立新对象,在不改变测试代码的情况下建立一个新对象
实例案例:
测试类:
public class teat {
public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
//测试
//进阶功能:在不改变test代码的前提下,给电脑新增UPan的功能
//读取配置文件的信息
Properties properties=new Properties();
properties.load(new FileReader("src\Morning\config.properties"));
for (int i = 0; i < properties.size(); i++) {
String key="usb"+i;
String value= properties.getProperty(key);
//利用反射
Class cla= Class.forName(value);
//创建实例对象
USB usb=(USB) cla.newInstance();
usb.open();
usb.close();
}
}
}
//建立Keyboard类
public class Keyboard implements USB{
//打开
public void open(){
System.out.println("打开键盘");
}
//关闭
public void close(){
System.out.println("关闭键盘");
}
}
//建立Mouse类
public class Mouse implements USB{
//打开
public void open(){
System.out.println("打开鼠标");
}
//关闭
public void close(){
System.out.println("关闭鼠标");
}
}
//创建NoteBook类
public class NoteBook {
String name;
public NoteBook(String name) {
this.name = name;
}
//工作
public void work(){
System.out.println("打自己写的游戏");
}
//用鼠标
//用键盘
public void useMouse(USB usb){
usb.open();
usb.close();
}
}
//创建UPan类
public class UPan implements USB{
@Override
public void open() {
System.out.println("打开U盘");
}
@Override
public void close() {
System.out.println("关闭U盘");
}
}
//创建YinXiang类
public class YinXiang implements USB{
@Override
public void open() {
System.out.println("打开音响");
}
@Override
public void close() {
System.out.println("关闭音响");
}
}
//创建接口
public interface USB {
void open();
void close();
}
//创建config.properties文件(Morning是当前工程下的一个包名)
usb0=Morning.Mouse
usb1=Morning.Keyboard
//在不改变test代码的前提下,给电脑新增UPan的功能
usb2=Morning.UPan
usb3=Morning.YinXiang



