2016年8月8日

1.eclipse调试;
2.junit:
新建一个类,在测试方法上面要加上 @Test,
如果要刚开始或结束时运行的方法,加上 @Before,@After。(如果要在加载时初始化:@BeforeClass @AfterClass)
断言:
Assert.assertEquals("期望的结果", 程序返回的结果);Assert有很多方法。

3.jdk5.0增强。
静态成员import(一般没什么用。)
自动装箱,拆箱
增强for循环(有迭代就能增强for循环):
java.lang
接口 Iterable
实现这个接口允许对象成为 "foreach" 语句的目标。
增强for循环只适合取数据,不适合赋值。
更改数据要用传统方式。

4.可变参数;
public void sum(int x, int ...num){
}
x可有可无

5.枚举;
要创建有抽象方法的对象时,创建对象时把方法实现就是了。
枚举内的构造函数必须是私有的。(10_黑马程序员_带抽象方法的枚举.avi)

/**
*
*/
package jdk1_5增强;

/**

  • @author Imwang
  • 2016年8月8日

/
interface test{
public abstract String getVaule();
}
public class 枚举 {
public static void main(String[] args) {
/
test a = new test(){
public String getVaule(){
return null;
}
};*/

	System.out.println(WeekDay.MON.getChinese());
	
}

}

enum WeekDay{
MON(){
public String getChinese(){
return "星期一";
}
},
TUE(){
public String getChinese(){
return "星期一";
}
},
WED(){
public String getChinese(){
return "星期一";
}
},
THU(){
public String getChinese(){
return "星期一";
}
},
FRI(){
public String getChinese(){
return "星期一";
}
},
SAT(){
public String getChinese(){
return "星期一";
}
},
SUN(){
public String getChinese(){
return "星期一";
}
};
private WeekDay() {

}
public abstract String getChinese();

}


2016年8月9日

6.反射:
我们拿到类,拿三个东西:
1.构造方法:创建对象并进行初始化。
2.属性:封装数据。
3.方法:执行操作。

首先要拿到类:三种方法:
//第一种
Class cla = Class.forName("包名.类名");
//第二种
Class cla = 对象.getClass();
//第三种
Class cla = 类.Class;
三种方法都是拿到类,并封装成Class对象。
一、得到对象。
1.拿到构造方法(创建对象并进行初始化)
1.首先是拿到了对象。
2.Constructor constructor = cla.getConstructor(para);//para:无参不放,有参:放参数类型的class。拿到构造函数的对象。
3.类 obj = constructor.newInstance(para);//para:根据需要的参数传递。得到对象并进行了初始化
2.附录:
1.另外一种创建对象的方法(好像只能创建默认的无参的对象)
类 obj = cla.newInstance();
2.如果构造函数是私有的?!
首先拿到构造函数的对象:然后
constructor.setAccessible(true);在创建对象;

二、运行方法。
方法:有参,无参;有返回值,无返回值;静态,非静态。
1.首先,拿到对象,
2. Method method = cla.getMethed(方法名,para);para:如果有参数:参数类型的class,拿到方法的对象。
3.执行方法:method.invoke(对象,para)//para:参数
附录:
1.如果是私有的,method.setAccessible(true);在执行方法。
2.执行main方法。
//为了兼容1.4,当发现是是数组时,会查看数组里面的元素,但里面的元素是一个数组时,就是main方法的参数了,
method.invoke(null, new Object[]{new String[]{}});

//转为一个对象???
method.invoke(null, (Object)new String[]{});
三、拿到字段。
1.首先,拿到对象。
2.拿到字段对象:Field field = cla.getField(字段名);如果是私有cla.getDeclaredField(字段名),还要field.setAccessible(true);
3.操作field;


7.内省:
JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。
Introspector
bean:有多少个get或set方法,就是一个属性,Object有一个getClass方法,所以bean的属性个数是get或set方法加1.

1.得到bean的所有属性
首先,拿到beanInfo对象,
//拿到bean的beanInfo对象(了解其所有属性、公开的方法和事件)
BeanInfo beanInfo = Introspector.getBeanInfo(jdk1_5增强.Person1.class, Object.class);
2.拿到bean中所有的属性。
//PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

 for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
     System.out.println(propertyDescriptor.getName());
 }

2.得到bean指定属性:
1.PropertyDescriptor propertyDescriptor = new PropertyDescriptor("name", Person1.class);
Method method = propertyDescriptor.getReadMethod();//得到get方法。
Method methodr = propertyDescriptor.getWriteMethod();//得到set方法。
methodr.invoke(对象, 参数); //执行方法
2.目前还不知道

propertyDescriptor.getPropertyType().getSimpleName() :得到属性的类型的名称;

原文地址:https://www.cnblogs.com/wangbiwei/p/5751305.html