本帖最后由 孙百鑫 于 2013-6-27 07:00 编辑
跟视频一样啊,没看到哪里不一样- import java.util.*;
- import java.io.*;
- public class ReflectDemo_2 {
- /**
- * @param args
- */
- public static void main(String[] args) throws Exception{//测试用,开发要try
- //getRealPath
- //一定要记住用完整的路径,但完整的路径不是硬编码,而是运算出来的
- InputStream ips = new FileInputStream("config.properties");
-
- //.class 类加载器,在classpath目录下逐一查找指定的文件
- //ReflectDemo_2.class.getClassLoader().getResourceAsStream("config.properties");
- Properties props = new Properties();
- props.load(ips);
- ips.close();//是把调用的系统资源关掉
- String className = props.getProperty("className");
- //////////////////////////////////报错了!!!!!!!!!!!
- Collection collections = (Collection)Class.forName(className).newInstance();
-
- //Collection collections = new ArrayList();// size为4,有序集合,重复一样放
- //Collection collections = new HashSet(); //size为3 无序集合,重复的元素不放
- ReflectPoint pt1 = new ReflectPoint(3,3);
- ReflectPoint pt2 = new ReflectPoint(5,5);
- ReflectPoint pt3 = new ReflectPoint(3,3);
-
- collections.add(pt1);
- collections.add(pt2);
- collections.add(pt3);
- collections.add(pt1);
-
- /*
- * 框架与框架要解决的核心问题
- * 我做房子卖给用户住,由用户自己安装门窗和空调,我做房子就是框架,用户需要使用我的框架,
- * 把门窗插入进我提供的框架中。框架与工具类有区别,工具类被用户的类调用,而框架则是调用用户提供的类
- *
- * 我在写框架(房子)时,你这个用户还不会写程序,我写的框架程序怎么样能调用你以后写的类(门窗)呢?
- * 因为在写程序时无法知道要被调用的类名,所以,在程序中无法直接new某个类的实例对象,而要用反射来做
- *
- *
- * */
-
- pt1.y = 7;
- collections.remove(pt1);//如果上面没改,size变1,该了size为2
- //内存泄露,因为改了哈希值,所以找不到了对象
- //对象一直没用,还一直存在,所以内存泄露
-
- //hashCode()的作用
- /*
- * hash表结构合可以把hash集合分为若干的区域,然后按照生成的hashcode值放在那个区域
- * 如果两个对象equals相等,那么hashcode也必须相等,但是equals不等的对象可能hashcode值相同
- * 当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算的哈希值的字段了
- */
- System.out.println(collections.size());//重写为2,不重写为3
- System.out.println(pt1.equals(pt3));//重写equals方法后为true,不重写false
-
- }
- }
复制代码 Exception in thread "main" java.lang.ClassNotFoundException: "java.util.Collection"
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at cn.itheima.day1.ReflectDemo_2.main(ReflectDemo_2.java:20)
|