* 1.Junit
@Before
@Test
@After
Assert(target,function)
* 2.JDK5.0新特性-静态导入
import staticjava.lang.System.out;
使用时直接使用:
out.println("sdasd");
* 3.枚举和Junit的demo
import static java.lang.System.out;
public class Test1 {
@org.junit.Test
public void test(){
print(Grade.A);
}
public void print(Grade g){
String value = g.getValue();
out.println(value);
}
enum Grade{
A("100-90");
private String value;
* 构造方法必须为私有
private Grade(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
* 4.反射
加载类:Class.forName()
通过构造函数创建:
getConstructorz只能获取public的构造方法
Person p = class.getConstructor(String.class).newStance("")
//getDeclaredConstructor可以获得public以外的private
class.getConstructor(String.class).setAccessible(true)//暴力反射
直接创建:
class.newStance()//得注意是否是无参数的构造函数
* 5.反射类的方法和字段
Personperson=new Person();
Class clazz = Class.forName(className);
Method m = clazz.getMethod(name, String.class,int,class);
m.invoke(person, String,int);
如果是static方法,则在invoke(null,parmeter)
字段:
Person person=new Person();
Class clazz = Class.forName(className);
Filed f =clazz.getField("name");
//字段类型可以通过f.getType()获取
String name = (String)f.get(p);//获取
f.set(p,"')//设置字段的值
m.invoke(person, String,int);
* 6.内省Introspecter
用于操作java对象的属性
javabean是成员私有并且提供公共的setter getter
拥有get或set方法的字段才能称为属性
@Test获取所有方法
public void test() throws IntrospectionException{
BeanInfo info = Introspector.getBeanInfo(User.class);
PropertyDescriptor[] pds = info.getPropertyDescriptors();
for(PropertyDescriptor pd : pds){
System.out.println(pd.getName());
}
}
@Test
public void test2() throws Exception{
User user = new User();
PropertyDescriptor pro = new PropertyDescriptor("name",User.class);
Method m = pro.getReadMethod();
m.invoke(user, null);
m = pro.getWriteMethod();
m.invoke(user, 45);
}
* 7.使用beanUtils操纵javabean
加入beanUtils两个jar包,调用即可
commons-beanutils-1.8.3.jar
commons-logging-1.3.jar
Test:
Useruser = new User();
BeanUtils.setProperty(user, "name", "zhang");
System.out.println(user.getName());
* 8.日期转换器
//beanUtils的日期转换器
@org.junit.Test
public void test2() throws Exception{
String birthday ="1998-08-01";
User user = new User();
//日期转换器
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
if(value==null){
return null;
}
String str = (String) value;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
return df.parse(str);
} catch (ParseException e) {
throw new RuntimeException(e);//异常链不能断
}
}
}, Date.class);
BeanUtils.setProperty(user, "birthday",birthday);
Date date = user.getBirthday();
System.out.println(date.toLocaleString());
}
* 10.通过Map获取
* Map.put(key,value);
* BeanUtils.populate(user,map)
* 11.泛型不恩能够是基本数据类型,必须是引用数据类型
12.异常处理掌握的原则:
如果对上一层有好处,就throws
如果没有好处,就转为运行时异常