传智播客168期JavaEE就业班(第七天 Java基础加强)

* 课程回顾:
    * schema约束
        * schema和DTD的对比
            * schema符合XML的语法结构。
            * DOM或者SAX解析技术可以解析schema的文档。
            * schema对名称空间支持好。
            * schema支持更多的数据类型,自定义数据类型。
            
        * 约束文档,在XML变成实例文档。    
        * schema后缀名.xsd
        * schema只有一个根节点,名称schema,不许改变。
        
        * 开发步骤:
            * 编写schema的约束文档。
                * 引入W3C名称空间    xmlns=""
                * 定义元素    <element name="元素名称">
                * 判断是否是复杂还是简单
                    * 简单    <element name="元素名称" type="元素类型">
                    * 复杂
                        * 声明我是复杂元素    <complexType>
                        * 子元素之间的关系    <all>
                        
                * 起名,在根节点属性    targetNamespace
                    * 值是任意的。
                    
                * 设置质量好的    
                    
            * 在XML文档中引入
                * 引入W3C的名称空间
                * 引入schema的名称空间(起别名)
                * 引入schema的名称空间地址
                
        
    * JAXP的SAX解析XML
        * 解析器
            * 通过解析器的工厂类创建解析对象
            * 解析XML,参数传事件处理器。
            * 事件处理器由咱们编写。
            
        * 事件处理器
            * 编写一个类继承DefaultHandler,重写三个方法。
                * startElement();
                * chacarters();
                * endElement();
            * 操作参数,拿到解析的内容。
            
            
    * DOM4J解析XML(*****)
        * 导入jar包。
        * 开发DOM4J的步骤:
            * 获取解析器    new SAXReader()
            * 解析XML        read()    返回Document对象。
            * 获取根节点    getRootElement()    Element对象
            
                
            * addElement()    直接添加子节点
            * 创建子节点    DocumentHelper.createElement("元素名称");    返回Element对象。
            * List.add(idx,E);
            
            * 回写
                * new XMLWriter(new FileoutputStream(path));
                * write(document);
                * close();
                
            * OutputFormat            
            * setEncoding();    设置编码
            
        * XPATH    支持
            * 导入包。
            * selectNodes("XPATH的语法");        返回List
            * selectSigleNode("XPATH的语法");    返回Node对象
    
==================================================================================================================
    * JAVA的基础加强
        * MyEclipse的介绍
            * MyEclipse的eclipse的插件。收费的。
            * 安装,破解。
            * 选择工作空间:不能中文和空格。    D:\itcast\1110
            * 默认是GBK的编码,设置成UTF-8的编码。
            
            * 创建web的项目:项目的名称:不要使用中文。
            * 命名规范:
                * 创建包结构,小写。    cn.itcast.test
                * 编写类。首字母大写
                * 编写方法,首字母小写,第二个单词的首字母大写。驼峰命名。
                
                
        * DeBug调试模式(断点模式)(必须会)
            * 跟踪程序的运行状态。
            * 方便查询程序源代码。
            
            * 打断点。
            * 右键 -- DeBug As    
                * 断点这行没执行。
                
            * 快捷键    
                * Step Over    跳过    F6
                * Resume    跳入到下一个断点,如果没有,执行完成。    F8
                * Step Into    跳入    F5
                * Drop To Frame    返回到开始位置
                * Step Return 跳出    F7
                
                
        * JUnit 单元测试
            * 单元的最小单位,就是方法。
            * JUnit版本:推荐使用JUnit4.X版本。
            * 下载JUnit包,导入包。但是使用MyEclipse开发,引入jar包。
            
            * 使用JUnit测试
                public void 方法名任意(没有参数列表){
                    
                }
                
            * 注解:
                * @Test        测试
                * @Ignore    忽略
                * @Before    在方法之前执行
                * @After    方法之后执行
            
        
        * MyEclipse的快捷键
            // alt + / 内容补全
            // ctrl + 1 错误处理
            FileOutputStream fos = new FileOutputStream("");
            // ctrl + shift + o
            
            List list = new ArrayList();
            // ctrl + shift + f 格式化
            
            // 单行注释(添加和取消)    ctrl + /
            
            // 多行注释    ctrl + shift + /
            // 取消多行注释    ctrl + shift + \
            
            
        * JDK5.0新的特性    
            * 泛型
                * 用到集合中
                    * 泛型擦除:泛型存在源代码的阶段,编译成class文件后,泛型信息被擦除。
                    * 用到哪些集合?    List    Set        Map
                    * 集合的遍历必须会。
                    
                    List list1 = new ArrayList();
                    List<String> list2 = new ArrayList();
                    List list3 = new ArrayList<String>();
                    List<String> list4 = new ArrayList<String>();
                    List<Object> list5 = new ArrayList<String>();
                    List<String> list6 = new ArrayList<Object>();
                    
                        
                * 应用通用性较高的代码。
                    * 定义泛型方法    
                        * 自定义泛型方法
                        * 声明泛型    <T>    放在返回值之前
                        * 方法的逻辑只与类型有关,这类方法可以定义成泛型方法
                        * 只有对象类型才能作为泛型方法的实际参数
                        
                    * 类
                    * 思考题:有数组,有方法,把位置换一下。
                                        
            枚举
                * BOSS    HR WORKER    
                
                创建枚举格式:
                    enum 枚举类型名称 {
                    枚举对象1名称,
                    枚举对象2名称,
                     … ,
                    枚举对象n名称;
                }
            
                * 枚举的特性:
                    枚举类也是一种特殊形式的Java类。
                    枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
                    与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
                    枚举类也可以实现接口、或继承抽象类。
                    JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型。
                    若枚举类只有一个枚举值,则可以当作单态设计模式使用。
                    
                    
                * 把构造方法放在枚举值的下面。
                * 如果枚举的构造方法有参数,那么实例中必须有传入参数。
                
                * 枚举的API
                    * String name()     返回枚举的名称
                    * int ordinal()      返回枚举的下标值
                    * static <T extends Enum<T>> T  valueOf(Class<T> enumType, String name)     通过枚举名称获取枚举的对象
                    
                    * valueof(String name)  通过名称获取枚举对象(枚举对象调用)
                    * values()  获得所有枚举对象数组(枚举对象调用)
                    
                    
                    1.已知枚举对象,获取枚举的名称和下标。
                    2.已知枚举名称,获取枚举对象和下标。
                    3.已知枚举下标,获取枚举对象和名称。
                    
            
            静态导入(鸡肋)
                * import static xxx.xxx.xxx;
                System.out.println();
                
            自动装箱/拆箱
                * 自动装箱:把基本类型转换成包装类。
                * 自动拆箱:把包装类转换成基本类型。
            
            for/in语句
                * 抛弃迭代器。
                * 可以使用增强for循环的集合。
                    * 数组
                    * 实现Iterable接口的集合。    List  Set    
                * 语法:
                    for(数据类型 变量 : 循环的内容){
                        
                    }
                    
            可变参数
                * 只能有一个可变参数。
                * 但是可变参数需要放在末尾。
                * 定义方法,不能定义变量。
                
                
        * 反射    Class类
            * 可以获取类中的所有的内容。
            * 已知类和对象的情况下
                类名.class
                对象.getClass() ---- Object类提供
                未知类和对象的情况下
                Class.forName(“包名.类名”)
                
                
        * 作业:
            web.xml配置文件    
                * DOM4J解析XML
                * 拿到cn.itcast.servlet.HelloServlet
                * 就可以通过反射Class对象。
                
                <web-app>
                    <servlet>
                        <servlet-name>HelloServlet</servlet-name>
                        <servlet-class>cn.itcast.servlet.HelloServlet</servlet-class>
                    </servlet>
                </web-app>
                
                
                * 容器(服务器),启动。加载配置,读取配置文件,解析。拿到配置文件内容。通过反射
                    创建实例,拿到方法。
                    * 加载.class文件。不能使用xxx.java文件。

                   


/**
 * 泛型的集合遍历
 * @author Administrator
 *
 */
public class GenericTest {
	
	/**
	 * 测试泛型集合
	 */
	@Test
	public void run1(){
		// List集合
		List<String> list = new ArrayList<String>();
		list.add("美美");
		list.add("旺财");
		list.add("芙蓉姐姐");
		
		// 循环遍历	三种	普通for	增强for	迭代器
		for(int i=0;i<list.size();i++){
			String str = list.get(i);
			System.out.println(str);
		}
		
		System.out.println("==============================");
		
		// 增强for循环		for(类型	变量 : 集合){}
		for(String str : list){
			System.out.println(str);
		}
		
		System.out.println("==============================");
		// 迭代器
		Iterator<String> it = list.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}
	
	/**
	 * Set集合
	 */
	@Test
	public void run2(){
		Set<String> set = new HashSet<String>();
		set.add("柯震东");
		set.add("房祖名");
		set.add("王全安");
		set.add("张耀扬");
		// 遍历方式		迭代器和增强for循环
		Iterator<String> it = set.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
		System.out.println("================================");
		for (String str : set) {
			System.out.println(str);
		}
	}
	
	/**
	 * Map集合
	 */
	@Test
	public void run3(){
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("aa", 11);
		map.put("bb", 22);
		map.put("cc", 33);
		
		// 遍历两种	获取key
		Set<String> keys = map.keySet();
		for (String key : keys) {
			Integer value = map.get(key);
			System.out.println(key+" "+value);
		}
		System.out.println("===========================================");
		
		Set<Entry<String, Integer>> entrys = map.entrySet();
		for (Entry<String, Integer> entry : entrys) {
			System.out.println(entry.getKey()+" "+entry.getValue());
		}
	}

	/**
	 * 只有两边有泛型,必须一致。
	 */
	public void run4(){
		List list1 = new ArrayList();
		List<String> list2 = new ArrayList();
		List list3 = new ArrayList<String>();
		List<String> list4 = new ArrayList<String>();
		
	//	List<Object> list5 = new ArrayList<String>();
	//	List<String> list6 = new ArrayList<Object>();
	}
	
	public void demo1(List list){
		
	}
	
	public void demo(){
		demo1(new ArrayList<String>());
	}
	
}






<pre name="code" class="java">/**
 * 泛型的集合遍历
 * @author Administrator
 *
 */
public class GenericTest2 {
	
	/**
	 * 测试
	 */
	@Test
	public void run1(){
		Integer [] arr = new Integer[]{1,2,3,4,5,6,7};
		change(arr,1,3);
		System.out.println(Arrays.toString(arr));
		
		String [] strarr = new String[]{"aa","bb","cc","dd","ee","ff"};
		change(strarr,1,3);
		System.out.println(Arrays.toString(strarr));
	}
	
	/**
	 * 	自定义泛型方法
	 * 	* 声明泛型	<T>	放在返回值之前
	 */
	public <T> void change(T[] arr, int idx1, int idx2){
		T temp = arr[idx1];
		arr[idx1] = arr[idx2];
		arr[idx2] = temp;
	}
	
	/**
	 * 修改下标是idx1和idx2两个位置元素
	 * @param strarr
	 * @param idx1
	 * @param idx2
	 */
	/*
	public void change(String[] strarr, int idx1, int idx2) {
		String temp = strarr[idx1];
		strarr[idx1] = strarr[idx2];
		strarr[idx2] = temp;
	}*/

	/**
	 * 修改下标是idx1和idx2两个位置元素
	 * @param arr
	 * @param idx1
	 * @param idx2
	 */
	/*
	public void change(int[] arr, int idx1, int idx2) {
		int temp = arr[idx1];
		arr[idx1] = arr[idx2];
		arr[idx2] = temp;
	}*/
	
	
	/**
	 * 
	 */
	@Test
	public void run2(){
		String [] strarr = new String[]{"aa","bb","cc","dd","ee","ff","hh"};
		// 打印的结果:ff ee dd cc bb aa
		reset(strarr);
		System.out.println(Arrays.toString(strarr));
	}
	
	/**
	 * 颠倒所有的元素
	 * @param arr
	 */
	public <T> void reset(T[] arr){
		for(int i=0;i<arr.length/2;i++){
			T temp = arr[i];
			arr[i] = arr[arr.length - 1 -i];
			arr[arr.length - 1 -i] = temp;
		}
	}
	
}

 
 

你可能感兴趣的:(javaee,就业,168期,传智播客学习)