java基础加强--要点总结2
2011-03-16 22:02
260 查看
java基础加强
18.
21.
23.维数相同,类型相同的数组的字节码是相同的。
24.关于HashCode和内存泄漏的问题。如果不想将参数相同的对象存入HashSet,可以重写hashCode方法和equals方法。需要返回相同的hashCode,才能判断对象相等。当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,从而造成内存泄漏。部分代码展示:
properties文件如下所示:classname = java.util.HashSet
通过修改properties可以运行不同的类。properties文件应该创建在相应的工程(project)下,否则系统会找不到文件。
26.如果获取配置文件的话也可以使用InputStream is = EnumTest.class.getClassLoader().getResourceAsStream("trafficlights/config.properties");这时的配置文件应存放在classpath中,也就是和class文件存放在一起。当我们在eclipse中将配置文件拖到相应的包中时,系统自动将其复制到class目录中以供调用。路径前不能使用/,也就是说包名trafficlights前面不要加/,否则系统找不到文件。SSH框架都有相应的配置文件,它们内部都使用的是上面的方式(类加载器加载文件)来获取文件,所以配置文件一般都放在classpath中。我们也可以直接跳过类加载器使用类来寻找文件,如果配置文件刚好在该包之下时,就可以像如下表示,只需要输入相对路径即可。InputStream
is = EnumTest.class.getResourceAsStream("config.properties");如果配置文件不在该包中,则应补充路径,如下所示:InputStream is = EnumTest.class.getResourceAsStream("/hello/config.properties");让我不能理解的是,此处的hello前必须有一个/,否则找不到文件,这和上边利用类加载器时互相矛盾,还有待于更深入的学习。
有一种说法,不加/表示项目路径,加/表示根路径,有待进一步核实。
18.
public class ReflectPoint { public String str1 = "fadfavbd"; public String str2 = "dffgdaavbd"; public String str3 = "ffadfevbd"; @Override public String toString() { return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3="+ str3 + "]"; } } ×××××××××××××××××× ReflectPoint rp2 = new ReflectPoint(); Field[] fields = rp2.getClass().getFields(); String strold; String strnew; for(Field f : fields) { if(f.getType()== String.class) { strold = (String)f.get(rp2); strnew = strold.replace("a", "b"); f.set(rp2, strnew); } } System.out.println(rp2);
21.
package trafficlights; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class EnumTest { public static void main(String[] args) throws Exception { //ReflectTest.main(new String[]{"1111","2222","3333"}); String className = args[0]; Method mainMethod = Class.forName(args[0]).getMethod("main", String[].class); mainMethod.invoke(null, (Object)new String[]{"1111","2222","3333"}); //invoke在jdk1.4中将第二个参数看作是一个object数组,jdk1.5为了兼 //容,也这样认为了。所以如果我们传递 //的参数是一个数组的时候,应该将该数组包装一下,比如(Object)new String[] {"1111","2222","3333"} //,或者可以new Object[]{new String[]{"1111","2222","3333"}}. } } class ReflectTest { public static void main(String[] args) throws Exception { for(int i=0;i<args.length;i++) { System.out.println(args[i]); } } }
23.维数相同,类型相同的数组的字节码是相同的。
24.关于HashCode和内存泄漏的问题。如果不想将参数相同的对象存入HashSet,可以重写hashCode方法和equals方法。需要返回相同的hashCode,才能判断对象相等。当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,从而造成内存泄漏。部分代码展示:
InputStream is = new FileInputStream("config.properties"); Properties pp = new Properties(); pp.load(is); String classname = pp.getProperty("classname"); Collection coll = (Collection)Class.forName (classname).newInstance();
properties文件如下所示:classname = java.util.HashSet
通过修改properties可以运行不同的类。properties文件应该创建在相应的工程(project)下,否则系统会找不到文件。
26.如果获取配置文件的话也可以使用InputStream is = EnumTest.class.getClassLoader().getResourceAsStream("trafficlights/config.properties");这时的配置文件应存放在classpath中,也就是和class文件存放在一起。当我们在eclipse中将配置文件拖到相应的包中时,系统自动将其复制到class目录中以供调用。路径前不能使用/,也就是说包名trafficlights前面不要加/,否则系统找不到文件。SSH框架都有相应的配置文件,它们内部都使用的是上面的方式(类加载器加载文件)来获取文件,所以配置文件一般都放在classpath中。我们也可以直接跳过类加载器使用类来寻找文件,如果配置文件刚好在该包之下时,就可以像如下表示,只需要输入相对路径即可。InputStream
is = EnumTest.class.getResourceAsStream("config.properties");如果配置文件不在该包中,则应补充路径,如下所示:InputStream is = EnumTest.class.getResourceAsStream("/hello/config.properties");让我不能理解的是,此处的hello前必须有一个/,否则找不到文件,这和上边利用类加载器时互相矛盾,还有待于更深入的学习。
有一种说法,不加/表示项目路径,加/表示根路径,有待进一步核实。
相关文章推荐
- 黑马程序员--Java基础加强--11.【MyEclipse使用快捷键提取方法的要点】【个人总结】
- java基础加强--要点总结4
- java基础加强--要点总结3
- java基础加强--要点总结1
- 黑马程序员--Java基础加强--06.【泛型通配符限定】【个人总结】
- Java基础加强总结——代理(Proxy)
- 这是我在四天内听完陈老师讲的java基础加强后的总结(1)
- Java基础加强总结(三)——代理(Proxy)
- Java基础加强总结(二)——泛型
- java基础1和2--java开发前奏和java编程基础--要点总结
- 黑马程序员--Java基础加强--05.【泛型通配符】【个人总结】
- 黑马程序员----------java基础加强之hashSet总结
- Java基础加强总结之动态代理(Proxy)
- Java基础加强总结(一)——注解(Annotation)
- 黑马程序员--Java基础加强--14.利用反射操作泛型III【解析关于泛型类型的细节信息的获取方法】【Method与泛型相关的方法】【个人总结】
- 黑马程序员__关于学习Java基础加强的总结_2
- Java基础加强总结(二)——泛型
- Java基础加强总结(2)
- Java基础加强总结(4)(类加载器)
- 黑马程序员--Java基础加强--09.【MyEclipse的class文件所在的目录配置】【相对路径解析】【个人总结】