Java 5.0新特性:
- 枚举:
enum Grade{ --> 相当于类 A("80~100"),B("70~80"),C("60~70"),D("59~0"); -->相当于调用枚举的构造函数 private String value; private Grade(String value){ this.value = value; }
枚举还可以定义抽象方法,并直接在枚举中以匿名内部类方式实例化,如:
A("80~100"){ public void gradeclass(){ system.out.println("优"); } }
- Junit测试插件:可以通过Junit对某个类中的方法进行单独测试,只要在方法名前面加入@Test即可。也可以加入@TestBefore和@Testafter测试整体。
- Map的迭代遍历:
Map map = new LinkedHashMap(); map.put(....); ....; ....; for(Object obj : map.entrySet()){ map.Entry = (Entry)obj; String key = (String)obj.getKey(); String value = (String)obj.getValue(); } 也可以是: for(Iterator it = map.entrySet().iterator();it.hasNext();){ map.Entry = (Entry)it.next(); String key = (String)obj.getKey(); String value = (String)obj.getValue(); }
- 反射技术:
- 反射生成对象:
Class clazz = Class.forName("cn.bestsonic.demo.Person"); //解剖类的构造函数,并创建对象 Constructor c = clazz.getDeclearConstructor(参数列表); Person p = (Person)c.newInstance(参数列表);
若构造函数是私有的,则需要使用c.setAccessible(true)来暴力访问。
参数列表为类型,要写String.class,int.class等。
-
- 反射类方法:
Class clazz = class.forName("cn.bestsonic.demo.Person"); //反射类的方法并运行该方法 Method m = clazz.getDeclearMethod("方法名",参数列表字节码文件); Person p = new Person(); //调用方法一定需要对象 m.invoke(p,参数列表实例);
也要注意暴力访问。
-
- 反射主函数:
Class clazz = Class.forName("cn.bestsonic.demo.Person"); //反射main方法 Method m = clazz.getMethod("main",String[] class); m.invoke(null,new Object[]{new String{"aa","bb"}});
jdk1.5兼容1.4,会优先将main(new String[]{"aa","bb"})拆分成main(string,string);造成参数错误,所以采用两重包装方式,使其自动拆分出String[]。也可以使用(Object)String[]{....}
-
- 反射类成员:
Field f = clazz.getDeclearField("age"); f.get(new Person()); //获取字段的值 f.getType(); //获取字段的类型
- 内省技术:Introspector --> 专用于javabean封装数据
什么是javabean? --> 封装用户数据的类。什么是javabean的属性? --> 由get set组合数决定,包括从父类Object中继承出来的(Object类中有getClass()方法,也算是一个属性)。
-
- 获取bean的属性:
BeanInfo = Intrspector.getBeanInfo(Person.class); //这里可再传入Object.class来去除父类得到的属性 PropertyDescriptor[] pds = info.getPropertyDescriptors(); 可以通过属性描述器,获取属性名,属性的类型以及Get,Set方法,具体方法分别为: pds.getName(),getPropertyType(),getReadMethod(),getWriteMethod()
-
- Beanutils框架:
- 导入jar包的过程:
- 新建folder -> lib文件夹。
- 将beanutils开发包导入lib文件夹中。
- 将记录日志的支持jar包commons-logging包导入。
- 右键导入的jar包,选择Build Path导入,Add to Build Path(加入到开发环境中)。
- 使用:
- 导入jar包的过程:
- Beanutils框架:
Person p = new Person(); Beanutils.setProperty(p,"name","zhangsan"); Beanutils.setProperty(p,"age","34"); //String自动转换为int
注意:Beanutils只支持String和八种基本类型之间的转换,如果想要让Beanutils支持自定义类型,可以使用转换器:ConvertUtils.register(Converter转换器,自定义类型字节码,如Data.class);然后用匿名内部类的方式实现Converter接口的convert方法,实现相应的转换方法。
注意:详细可以参考Beanutils的手册,可以找到已经写好的DataLocalConverter转换器。
-
-
- 可以使用Beanutils.populate方法将用户提交的Map填充至封装类(Person)中。
-
时间: 2024-10-16 12:48:53