java基础加强--要点总结2

java基础加强

18.
19. 如果比较字节码文件的话应该用“==”比较。
20. 通过反射来改变某个对象的字段:

21.


22.同反射的方式调用main方法。
为什么不直接用类调用main方法,而是用反射呢?是因为有时候我们根本不知道类名是什么,只有程序运行起来之后才会知道,所以可以使用反射来实现。这点让我联想起了javabean,也想起了web服务程序。你根本不知道用户发送了什么请求,直到运行起来,接受到请求后调用相应的javabean,运行程序,这里貌似要用到反射哦!
例子程序:


23.维数相同,类型相同的数组的字节码是相同的。
24.关于HashCode和内存泄漏的问题。如果不想将参数相同的对象存入HashSet,可以重写hashCode方法和equals方法。需要返回相同的hashCode,才能判断对象相等。当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,从而造成内存泄漏。部分代码展示:


25.简单框架前期导入properties文件的相关程序:


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基础)