今天学习了枚举与反射。
说实话以前也有些了解,这次是认真的总结一下。
好的学习效率 = 好的老师 + 好的学生 + 好的思路
枚举:
记住几句话,
1,枚举是一种写法特殊的类。为了解决某种类型严格限制取值范围的问题(或者也可以理解为常量值范围问题),比如春夏秋冬。
2,因为枚举是类,所以,它里面的声明就是对象。声明(...)就是在调用对象的构造函数。当然枚举的构造函数要定义成私有。因为枚举对象是被限定的。
3,按照对象的思路理解枚举里面的元素的声明。
4,枚举为了方便使用,还提供了name、value、values方法。(继承自Enum类)
5,枚举可以控制对象的数目,自然联想到单例模式对对象实例的控制。所以enum T{A;}就是个单例了。
反射:
记住一句话,和几点补充就可以了。
1,所有的Java类的字节码,都可以封装到一个叫Class的类对象里面。既然被封装到了类对象里面,当然一个类的字段啊、方法啊什么的,都可以被解析出来。
这就是反射的原理。
2,怎么获取一个类的方法?去看Class的API。
3,获取到方法了,获取到的应该是类的元数据级别的方法,想要调用它,即必须依赖一个此类的实例对象(非静态方法只有对象才能调用哦)。
所以,不管你使用反射的方式获取类对象,还是其他方式,得,需要有个对象。
接下来有意思的事儿发生了,以前对象调用方法,都是对象在前面,打个点儿。现在不了,对象被放到了Method对象的invoke方法的参数里面。
仅此而已。
Field也一样。
4,反射获取对象实例的简化方法clazz.newInstance();
5,获取Class对象的方式:Class.ForName("xx");Xxx.class,obj.getClass()等
6,Class的API里面获取不同签名的方法?即参数类型怎么办?Xxx.class。这是在获取内容时,对方法签名的参数类型的处理。而调用的时候则要传实实在在的符合类型的数据就可以了。