第一章
1: junit
函数前添加@Test 测试环境junit测试类
函数前添加@Before或@After 在测试前后先执行类 例:public void before(){}
函数前添加@BeforeClass 或@AfterClass Public static void beforeClass(){}
Junit中assert//断言 判断两个对象是否相等
DAY2: jdk1.5之后新特性
List list = new ArraysList();
List.add(1);
List.add(2);
Iterator it = list.iterator();
While(it.hasNext()){
Int k = (Integer)It.next(); //拆箱
}
2:增强for循环:只能用在数组或实现Iterable接口的集合类上
public void test(){
Map map = new LinkedHashMap();//顺序输出
map.add(“1”,”aaa”);
map.add(“2”,”bbb”);
//传统方式1
Set set = map.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String key = (String)it.next();
String value = (String)map.get(key);
}
//传统方式2
Set set = map.entrySet();
Iterator it = set.iterator();
while(it.hasNext()){
Map.entry entry = (Entry) it.next();
String key = (String) entry.getKey();
String value = (Sting)entry.getValue();
}
//增强for循环
for(Object oj : map.keySet()){
String key = (String) oj.next();
String value = (value)map.get(key);
}
}
可变参数
int num={1,2,3,4,5}
List list =Arrays.asList (num)
syso(list); //输出arrys
integer num={1,2,3,4,5}
List list =Arrays.asList (num)
syso(list); //输出1,2,3,4
3:枚举
枚举的构造函数必须是私有的
定义枚举的构造函数、方法和字段去封装信息
enum Grade{ //相当于定义一个class提供特定的几个对象
A(“100-90”){
public String localeValue(){
return “优”;
}
}
,B(“90-80”){
public String localeValue(){
return “良”;
}
}
,C(“80-70”){
public String localeValue(){
return “一般”;
}
}
,D(“70-60”){
public String localeValue(){
return “不及”;
}
}
,E(“59-0”){
public String localeValue(){
return “很差”;
}
};
String value= null;
private void setValue(String value){
this.value = value;
}
public String getValue(){
return this.value;
}
public abstract String localeValue();
}
4单态设计模式=枚举类只含有一个值
将字符串转换成枚举类型,valueof:应用在用户提交表单,男或女
Grade g; g.values();//此方法在jdk中查找不到,返回所有的枚举值
5反射:应用在制作框架上
加载类,并解剖出各个组成成分
反射类,加载类的字节码
法一:Class clazz = Class.forName(“cn.itcast.reflect.Person”);
法二:Class clazz = new Person().getClass();
法三:Class clazz = Person.getClass();
解剖类:
@Test
//反射构造函数:public Person()
public void test() throws Exception{
Class clazz = Class.forName("cn.itcast.refelect.Person");
Constructor con = clazz.getConstructor(null);
Person p = (Person)con.newInstance(null);
System.out.println(p.name);
}
@Test
public void test2() throws Exception{
Class clazz = Class.forName("cn.itcast.refelect.Person");
Constructor con = clazz.getConstructor(String.class);
Person p = (Person) con.newInstance("88888");
System.out.println(p.name);
}
@Test
public void test3() throws Exception{
Class clazz = Class.forName("cn.itcast.refelect.Person");
Constructor con = clazz.getDeclaredConstructor(List.class);
con.setAccessible(true);//暴力反射,强制访问私有成员函数
Person p = (Person) con.newInstance(new ArrayList());
System.out.println(p.name);
}
//反射类的方法
public void test() throws Exception{
Person p = new Person();
Class clazz = Class.forName(“cn.itcast.refelect.Person”);
Method m = clazz.getMethod(“aa1”,null);//函数名,参数
m.invoke(p,null);//对象,参数(用来执行方法)
}
//反射类的main方法
public void test() throw Exeception{
Class clazz = Class.forName(“cn.itcast.refelect.Person”);
Method method = clazz.getMethod(“main”,String[].class);
method.invoke(null,(Object)new String[](“1”,”2”));//第一种方法
method.invoke(null,new Object[](new String[](“1”,”2”)));//第二种方法
}
//反射字段
public void test() throw Exeception{
Person p = new Person();
Class clazz = Class.forName(“cn.itcast.refelect.Person”);
Field f = clazz.getField(“name”);
f..get(p);
Class type = f.getType();//获取字段类型
}
6内省:操作JavaBean的属性(JavaBean就是将用户发送的内容封装成对象)
javaBean属性:类中只要有getter或setter的就是其属性,不仅有字段.
@Test
public void test() throws Exception{
BeanInfo info = Introspector.getBeanInfo(Person.class,Object.class);//省类
PropertyDescriptor[] pds = info.getPropertyDescriptors();//属性描述
for( PropertyDescriptor p : pds){
System.out.println(p.getName());
}
}
7 apache发布了beanutils框架来操作bean属性
添加第三方jar包:新建文件夹->需要beanutils.jar和一个知识架(日志记录器)
//使用beanutils操作bean的属性
@Test
public void test() throws Exception{
Person p = new Person();
BeanUtils.setProperty(p, "name", "xxc");
System.out.println(p.getName());
}
beanutils只支持八种数据类型
将用户输入的String类型转换为Date类型传给bean(注意Date引用的包必须是util的)
例一:
public void test2() throws IllegalAccessException, InvocationTargetException{
//转换工具
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
if(value==null){
return null;
}
if(!(value instanceof String)){
throw new ConversionException("不好使");
}
String str = (String) value;
if(str.trim().equals("")){
return null;
}
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
return df.parse(str);
} catch (ParseException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
}, Date.class);
Person p = new Person();
String birthday = "1993-08-21";
BeanUtils.setProperty(p, "birthday", "1993-08-21");
System.out.println(p.getBirthday());
}
例二:
public void test3() throws IllegalAccessException, InvocationTargetException{
//将用户输入的数据用map封装
Map map = new HashMap();
map.put("name", "li lei");
map.put("password","123");
map.put("age","21");
map.put("birthday","1992-08-21");
ConvertUtils.register(new DateLocaleConverter(), Date.class);
Person bean = new Person();
BeanUtils.populate(bean, map);//用map集合中的值填充bean的属性
System.out.println(bean.getName());
System.out.println(bean.getPassword());
System.out.println(bean.getAge());
System.out.println(bean.getBirthday().toLocaleString());
}
8泛型使用
@Test
public void test(){
ArrayList list = new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");
// Iterator it = list.iterator();
// while(it.hasNext()){
// System.out.println(it.next());
// }
for(String s : list){
System.out.println(s);
}
}
@Test
public void test2(){
Map map = new HashMap();
map.put(1, "aaa");
map.put(2, "bbb");
map.put(3, "ccc");
//entrySet
Set> set =map.entrySet();
Iterator> it =set.iterator();
while(it.hasNext()){
Map.Entry entry =it.next();
int key = entry.getKey();
String value = entry.getValue();
System.out.println(key+" "+value);
}
for(Map.Entry entry : map.entrySet()){
int key = entry.getKey();
String value = entry.getValue();
System.out.println(key+" "+value);
}
}
泛型类型必须为引用类型,不是基本类型
//编写一个泛型方法,接受一个数组并颠倒数组中的所有元素
public void reverse(T arr[]){
int start =0;
int end = arr.length-1;
while(true){
if(start>=end){
break;
}
T temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
第二章
1、xml语法(作为配置文件)
2、xml约束
3、xml编程(CRUD)create read update delete
(1)xml解析方式:dom(内存消耗大,crud方便)和sax(占内存少,只适合读取)
调整jvm内存大小(64M):argument 配置-XMX80m
项目实践:
xml学生成绩管理系统:(day_exam)
domain包下创建bean类
dao包下创建各个函数
util包下创建工具类,都是静态方法
再在junit包下先创建测试类
(2)sax解析方式解析xml文件:涉及到两个内容,解析器和事件处理器
(3)dom4j解析xml文档,需要加入dom4j开发包
4、schema