A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 爱如kongcheng 中级黑马   /  2015-5-8 22:25  /  585 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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
八个基本数据类型byteshortintlongfloatdoublecharboolean
void类型的void.class


4 个回复

倒序浏览
我也刚学反射,看视频学着写
模拟主板上插插件
首先,主板是需要提供接口的,那就先来个PCI接口,写的不完善,应该再加个接收插件的方法的
  1. package api.ReflectDemo;

  2. public interface PCI {
  3.         public void open();
  4.         public void close();
  5. }
复制代码


然后来个 主板,实现构造函数接收PCI接口实现类
  1. package api.ReflectDemo;
  2. //主板类  用于运行各插件
  3. public class MainBoard{
  4.         MainBoard(){
  5.                 System.out.println("Main Board running....");
  6.         }
  7.         MainBoard(PCI p){
  8.                 this();
  9.                 p.close();
  10.                 p.open();
  11.         }
  12. }
复制代码

接着,模拟主板添插件过程,通过反射实现,这样以后不用修改代码,只需要往配置文件里添加接口实现类的实现信息,就可以直接运行了相应功能了
  1. package api.ReflectDemo;

  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.lang.reflect.Constructor;
  6. import java.util.Properties;

  7. public class ReflectTest {

  8.         /*
  9.          * 反射 模拟电脑主板
  10.          * 电脑主板提供接口
  11.          * 通过配置文件添加内容实现插件插入接口
  12.          *
  13.          */
  14.         public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException {
  15.                 // TODO Auto-generated method stub
  16.                 Properties p = new Properties();
  17.                 FileInputStream fis = new FileInputStream("MainBoardInterface.properties");
  18.                 p.load(fis);
  19.                
  20.                 for(int i = 0;i<p.size();i++){
  21.                         String value = p.getProperty("pci"+(i+1));
  22.                         @SuppressWarnings("unchecked")
  23.                         Class<PCI> clzz = (Class<PCI>) Class.forName(value);
  24.                         new MainBoard(clzz.newInstance());
  25.                        
  26.                 }
  27.                
  28.         }

  29. }
复制代码

接下来,做个插件试试
  1. package api.ReflectDemo;

  2. public class Sound implements PCI {

  3.         @Override
  4.         public void open() {
  5.                 // TODO Auto-generated method stub
  6.                 System.out.println("Sound running .....");
  7.         }

  8.         @Override
  9.         public void close() {
  10.                 // TODO Auto-generated method stub
  11.                 System.out.println("Sound close .....");
  12.         }

  13. }
复制代码


别忘了配置文件

  1. pci1 = api.ReflectDemo.Sound
复制代码


好了,可以运行了。

这一串代码说明了反射的奇妙用途


回复 使用道具 举报
紫夜灵魂 发表于 2015-5-8 22:52
我也刚学反射,看视频学着写
模拟主板上插插件
首先,主板是需要提供接口的,那就先来个PCI接口,写的不完 ...

我要好好表扬你一下,太厉害了!
回复 使用道具 举报
赞一个~
回复 使用道具 举报
反射还没学..很不错了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马