黑马程序员技术交流社区

标题: 谁能说说这句话里面代表的意思呢 ? 反射的作用,实现框... [打印本页]

作者: mohuancaizi    时间: 2014-3-2 15:08
标题: 谁能说说这句话里面代表的意思呢 ? 反射的作用,实现框...
本帖最后由 mohuancaizi 于 2014-3-2 16:28 编辑
  1. package cn.itcast.day1;


  2. import java.io.*;

  3. import java.io.FileInputStream;
  4. import java.io.InputStream;
  5. import java.util.Collection;
  6. import java.util.Properties;
  7. import java.util.*;
  8. public class RefectTest2 {

  9.         /**
  10.          * @param args
  11.          */
  12.         /**
  13.          * @param args
  14.          * @throws Exception
  15.          */
  16.         public static void main(String[] args)throws Exception {
  17.                 // TODO Auto-generated method stub
  18.                
  19.                 InputStream ips = new FileInputStream("config.properties");//创建一个文件 命名为:config.properties
  20.                 Properties props = new Properties();
  21.                 props.load(ips);
  22.                 ips.close();
  23.                 String className = props.getProperty("className");
  24.                 Collection collections = (Collection)Class.forName(className).newInstance();//
  25.                
  26.                
  27.                 //Collection collections = new ArrayList();//打印结果为4
  28.                 //Collection collections = new HashSet();//打印结果为3
  29.                 ReflectPoint pt1 = new ReflectPoint(3,3);
  30.                 ReflectPoint pt2 = new ReflectPoint(5,5);
  31.                 ReflectPoint pt3 = new ReflectPoint(3,3);
  32.                
  33.                
  34.                 collections.add(pt1);
  35.                 collections.add(pt2);
  36.                 collections.add(pt3);
  37.                 collections.add(pt1);
  38.                
  39.                 //面试可以用来举出一个 内存泄漏的例子
  40.                 //pt1.y =7;//已经改  哈希值已换
  41.                 //collections.remove(pt1);//pt1中原来的哈希值已换  所以删除不了
  42.                 System.out.println(collections.size());
  43.         }

  44. }
复制代码




谁能说说这句话里面代表的意思呢 Collection collections = (Collection)Class.forName(className).newInstance();  ????????????????
作者: e.c    时间: 2014-3-2 15:23
通过className字符串得到一个Class字节码文件并通过这个字节码文件创建一个对象
将对象转制转换成Collection并赋值给collections变量。
作者: ixiangfeng    时间: 2014-3-2 15:37
都用到反射了这句话会不懂吗
作者: 一年_Hei    时间: 2014-3-2 16:26
通过Class类的forName()静态方法获得配置文件中写好的类名的字节码对象。然后创建实例。你这里传进来的类必须是实现Collection接口的类
作者: mohuancaizi    时间: 2014-3-2 16:26
e.c 发表于 2014-3-2 15:23
通过className字符串得到一个Class字节码文件并通过这个字节码文件创建一个对象
将对象转制转换成Collectio ...

被你这样一说 思路马上清晰了 thanks
作者: mohuancaizi    时间: 2014-3-2 16:30
ixiangfeng 发表于 2014-3-2 15:37
都用到反射了这句话会不懂吗

现在懂啦{:2_30:}
作者: ixiangfeng    时间: 2014-3-2 16:32
mohuancaizi 发表于 2014-3-2 16:30
现在懂啦

貌似刚讲反射的应该都是学这个的吧 三种方法之一




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2