javaweb 复习第一阶段:javase

第一章

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<String> list = new ArrayList<String>();

              list.add("aa");

              list.add("bb");

              list.add("cc");

             

//           Iterator<String> it = list.iterator();

//           while(it.hasNext()){

//                  System.out.println(it.next());

//           }

              for(String s : list){

                     System.out.println(s);

              }

       }

      

       @Test

       public void test2(){

              Map<Integer,String> map = new HashMap<Integer, String>();

              map.put(1, "aaa");

              map.put(2, "bbb");

              map.put(3, "ccc");

             

              //entrySet

              Set<Map.Entry<Integer, String>> set =map.entrySet();

              Iterator<Entry<Integer, String>> it =set.iterator();

              while(it.hasNext()){

                     Map.Entry<Integer, String> entry =it.next();

                     int key = entry.getKey();

                     String value = entry.getValue();

                     System.out.println(key+" "+value);

              }

              for(Map.Entry<Integer, String> entry : map.entrySet()){

                     int key = entry.getKey();

                     String value = entry.getValue();

                     System.out.println(key+" "+value);

              }

       }

 

泛型类型必须为引用类型,不是基本类型

//编写一个泛型方法,接受一个数组并颠倒数组中的所有元素

       public <T> 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--;

              }

       }

 

 

 

 

 

第二章

1xml语法(作为配置文件)

2xml约束

3xml编程(CRUDcreate 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开发包

4schema

posted on 2014-10-13 14:33  徐异安  阅读(130)  评论(0)    收藏  举报

导航