网站文章不收录怎么办齐齐哈尔做网站公司
网站文章不收录怎么办,齐齐哈尔做网站公司,网站建设的整个过程,免费的百度网站怎么做Java进阶16
一、单元测试
单元测试就是针对最小的功能单元编写测试代码#xff0c;Java程序最小的功能单元是方法#xff0c;因此#xff0c;单原测试就是针对Java方法的测试#xff0c;进而检查方法的正确性。简单理解就是测试代码的工具。
1、Junit
1.1 Junit引入
目…Java进阶16
一、单元测试
单元测试就是针对最小的功能单元编写测试代码Java程序最小的功能单元是方法因此单原测试就是针对Java方法的测试进而检查方法的正确性。简单理解就是测试代码的工具。
1、Junit
1.1 Junit引入
目前测试代码只能在main方法中测试如果某个方法的测试失败其他方法测试会受到影响而Junit解决了这个问题。
1.2 Junit优点 JUnit可以灵活的选择执行哪些测试方法可以一键执行全部测试方法 单元测试中的某个方法测试失败了不影响其他方法的测试 运行成功是绿色运行失败是红色
1.3 Junit基本使用 步骤 ①手动导入jar包或在外部网络的情况下根据提示敲回车add Junit4 to classpath ②在需要测试的方法上加入Test注解 ③运行绿色正确)红色错误 注意 Junit测试的方法必须是public的且没有参数没有返回值
二、XML
1、XML引入
XML全称EXtensible Markup Language是一种可扩展的标记语言。【标记语言通过标签来描述数据的一门语言】【可扩展标签名可以自定义】xml文件可以为计算机程序配置参数和初始设置使用xml文件的好处是可以让项目中使用的数据灵活的加载和多变实现解耦。
2、分类
2.1 Properties文件 用于一对一的存储 键值对 usernameroot password123456 2.1 xml文件 常用于一对多存储 ?xml version1.0 encodingutf-8 ?
students!--第一个学生信息--studentname张三/nameage23/age/student!--第二个学生信息--studentname李四/nameage24/age/student
/students 3、优点 作为软件的配置文件 用于进行存储数据和传输数据其内部格式更便于传输数据
4、XML语法
4.1 语法规则 创建 创建一个XML类型的文件要求文件的后缀必须使用xml。如hello_world.xml 文档声明 文档声明必须是第一行第一列 ?xml version1.0 encodingUTF-8 ? version版本该属性是必须存在 encoding该属性不是必须的指定打开当前的xml文件应该用什么字符编码表一般都是UTF-8 standalone该属性不是必须的描述XML文件是否依赖其他的XML文件取值为yes/no 标签规则 必须存在一个根标签有且只能有一个 标签由一对尖括号和合法标识组成 标签必须成对出现 student/student 特殊的标签可以不成对但是必须有结束标记 address/ 标签中可以定义属性属性和标签名空格隔开属性值必须用引号引起来 studnet id1/studnet 标签需要正确的嵌套 !--这是正确的嵌套--
student id1 name张三/name
/student!--这是错误的嵌套--
student id1name张三/student
/name 细节 XML文件中可以定义注释信息 !--这是一条注释信息-- XML文件中可以存在以下特殊字符 lt 小于
gt 大于
amp 和号
apos 单引号
quot 引号 XML文件中可以存在CDATA区 ![CDATA[...内容...]] 4.2 Demo 需求编写一个城市对应区的xml文件【城市city区域area】 ?xml version1.0 encodingutf-8 ?
cityscity name北京市area东城区/areaarea西城区/areaarea朝阳区/areaarea海淀区/areaarea昌平区/area/city
/citys 5、XML约束了解
XML约束用来限定xml文件中可使用的标签以及属性约束文件以后不需要我们自己写了解即可。有DTD约束和Schema约束
5.1 DTD约束
① 编写DTD约束 步骤 1.创建一个后缀名为.dtd的文件 2.看xml文件中使用了哪些元素!ELEMENT可以定义元素 3.判断元素是简单元素还是复杂元素 【简单元素】没有子元素 【复杂元素】有子元素的元素 代码实现 !--这是一个dtd文件 persondtd.dtd--
!ELEMENT persons (person)
!ELEMENT person (name,age)
!ELEMENT name (#PCDATA)
!ELEMENT age (#PCDATA) ② 引入DTD约束 在xml文件内部直接引入 !DOCTYPE 根元素名称 [ dtd文件内容 ] ?xml version1.0 encodingUTF-8 ?
!DOCTYPE persons [!ELEMENT persons (person)!ELEMENT person (name,age)!ELEMENT name (#PCDATA)!ELEMENT age (#PCDATA)]
personspersonname张三/nameage23/age/person
/persons 引入本地dtd !DOCTYPE 根元素名称 SYSTEM DTD文件的路径 !--在person1.xml文件中引入persondtd.dtd约束--
?xml version1.0 encodingUTF-8 ?
!DOCTYPE persons SYSTEM persondtd.dtd
personspersonname张三/nameage23/age/person
/persons 引入网络dtd !DOCTYPE 根元素的名称 PUBLIC DTD文件名称 DTD文档的URL ?xml version1.0 encodingUTF-8 ?
!DOCTYPE persons PUBLIC dtd文件的名称 dtd文档的URL
personspersonname张三/nameage23/age/person
/persons
5.2 Schema约束
①编写schema约束 步骤 1.创建一个文件这个文件的后缀名为.xsd 2.定义文档声明 3.schema文件的根标签为schema 4.在scheam中定义如下属性 xmlnshttp://www.w3.org/2001/XMLSchema targetNamespace 唯一的url地址指定当前这个schema文件的名称空间理解起个名字顺便打广告 elementFormDefaultqualified“表示当前schema文件是一个质量良好的文件 5.通过element定义元素 6.判断当前元素是简单元素还是复杂元素 代码实现 ?xml version1.0 encodingUTF-8 ?
schema xmlnshttp://www.w3.org/2001/XMLSchematargetNamespacehttp://www.itheima.comelementFormDefaultqualifiedelement namestudentscomplexTypesequenceelement namestudent maxOccursunboundedcomplexTypesequenceelement namename typestring/elementelement nameage typeint/element/sequenceattribute nameid userequired//complexType/element/sequence/complexType/element
/schema
②引入schema约束
?xml version1.0 encodingUTF-8 ?
!--这里xsi只是因为需要引入多个约束怕属性重名所以取的别名--
students xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlnshttp://www.itheima.comxsi:schemaLocationhttp://www.itheima.com students.xsdstudent id1name张三/nameage23/age/student
student id2name李四/nameage24/age/student
/students
5.3 Schema和dtd的区别 schema约束文件也是一个xml文件符合xml的语法这个文件的后缀名.xsd。Schema文件用来约束一个xml文件同时它自己也被其他文件约束着 一个xml中可以引用多个schema约束文件多个schema使用名称空间区分名称空间类似于java包名 dtd里面元素类型的取值比较单一常见的是PCDATA类型但是在schema里面可以支持很多个数据类型 schema 语法更加的复杂
6、XML解析
解析方式有两种SAX解析和DOM解析
SAX解析DOM解析解析方式不会把整体的xml文件都加载到内存中而是从上往下逐行进行扫描会把整体的xml文件都加载到内存优点因为逐行解析无需将整体的xml文件都加载到内存所以可以解析较大的xml文件可以读取可以添加可以删除可以做任何事情缺点只能读取不能添加不能删除需要xml文件全部加载到内存所以不能解析非常大的xml文件
6.1 DOM解析
6.1.1 解析文档对象模型 6.1.2 常见解析工具
名称说明JAXPSUN公司提供的一套XML解析的APIJDOMJDOM是一个开源项目它基于树型结构利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作Dom4j是JDOM的升级品用来读写XML文件的。具有性能优异功能强大和极其易使用的特点它的性能超过sun公司官方的dom技术同时它也是一个开放源代码的软件Hibernate也用它来读写配置文件jsoup功能强大DOM方式的XML解析开发包尤其对HTML解析更加方便
6.1.3 准备动作 ①导入jar包 ②获取Document对象 SAXReader reader new SAXReader();
Document document reader.read(url);
System.out.println(document); 6.1.4 方法
方法说明Element getRootElement()获取根元素对象
方法说明ListElement elements()得到当前元素下所有子元素ListElement elements(String name)得到当前元素下指定名字的子元素返回集合Element element(String name)得到当前元素下指定名字的子元素如果有很多名字相同的返回第一个String getName()得到元素名字String attributeValue(String name)通过属性名直接得到属性值String elementText(子元素名)得到指定名称的子元素的文本String getText()得到文本
6.1.5 Demo解析xml信息存入集合
public class ParseXml {public static void main(String[] args) throws DocumentException {//准备集合ArrayListStudent list new ArrayList();SAXReader reader new SAXReader();Document document reader.read(day16\\src\\com\\itheima\\xml\\students.xml);//1、获取根标签Element rootElement document.getRootElement();//2、获取根标签下的所有子标签ListElement elements rootElement.elements();//3、遍历集合for (Element element : elements) {//4、获取标签属性String id element.attributeValue(id);//5、获取name标签的值String name element.element(name).getText();//6、获取age标签的值String age element.element(age).getText();//7、封装为Student学生对象Student stu new Student(id,name,Integer.parseInt(age));//8、添加到集合list.add(stu);}list.forEach(System.out::println);}
}
三、注解
Annotation标识注解是JDK1.5的新特性作用是对程序进行标注。其实可以对照注释理解注释是给人看的而注解是给编译器或虚拟机看的通过注解可以给类增加一些额外的信息让编译器或jvm可以根据注解来完成对应的功能
1、JDK常见注解 Override表示方法的重写 Deprecated表示修饰的方法已过时 SuppressWarinings(all)压制警告
除此之外还需要掌握第三方框架中提供的注解比如Junit中 Test表示运行测试方法 Before表示在Test之前运行进行初始化 After表示在Test之后运行进行收尾
2、自定义注解了解
自定义注解单独存在没有意义一般会跟反射结合起来使用
2.1 格式 public interface 注解名称 {public 属性类型 属性名 () default 默认值 ;
}
public interface Anno {String show() default show... ;
} 属性类型可以是基本数据类型、String、Class、注解、枚举、以及上述类型的一维数组 public interface MyAnno {public static final int num1 100;public static final String num2 abc;public static final MyAnno num3 null;public static final Class num4 String.class;public static final int[] num5 {};
public abstract String show1() default show1;public abstract int show2() default 132;public abstract MyAnno2 show3() default MyAnno2;public abstract Class show4() default String.class;public abstract int[] show5() default {1, 2, 3};
} public interface MyAnno {int num1 100;String num2 abc;MyAnno num3 null;Class num4 String.class;int[] num5 {};
String show1() default 123;int show2() default 132;MyAnno2 show3() default MyAnno2;Class show4() default String.class;int[] show5() default {1, 2, 3};
} 注意事项 在使用注解时如果注解的属性没有给出默认值需要手动给出如Anno(name张三) 如果数组中只有一个属性值在使用时{}是可以省略的 定义注解中如果有多个属性没有赋值使用时需要全部赋值 定义注解中如果只有一个属性名称为value没有赋值使用时直接给出值不需要写属性名。如Anno(要给value赋的值)
3、元注解了解
元注解就是描述注解的注解
元注解名说明Target指定了注解能在哪里使用Retention可以理解为保留时间生命周期
3.1 Target注解
用来标识注解使用的位置如果没有使用该注解标识则自定义的注解可以使用在任意位置可使用的值定义在ElementType枚举类中常用值如下 TYPE类接口 FIELD成员变量很少用 METHOD成员方法 PARAMETER方法参数 CONSTRUCTOR构造方法 LOCAL_VARIABLE局部变量 3.2 Retention注解
用来标识注解的生命周期有效范围可使用的值定义在RetentionPolicy枚举类中常用值如下 SOURCE注解只作用在源码阶段生成的字节码文件中不存在 CLASS注解作用在源码阶段字节码文件阶段运行阶段不存在默认值 RUNTIME注解作用在源码阶段字节码文件阶段运行阶段 4、案例自定义注解) 需求自定义一个注解MyAnno,用于指定类的方法上,如果某一个类的方法上使用了该注解,就执行该方法 实现步骤 1.自定义一个注解MyAnno并在类中的某几个方法上加注解 2.在测试类中获取注解所在的类的Class对象 3.获取类中所有的方法对象 4.遍历每一个方法对象判断是否有对应的注解 //自定义注解
Target(ElementType.METHOD)
Retention(RetentionPolicy.RUNTIME)
public interface MyAnno {
} //Test类
public class MethodTest {MyAnnopublic void show1(){System.out.println(show1...);}
MyAnnopublic void show2(){System.out.println(show2...);}
public void show3(){System.out.println(show3...);}
} public class ReflectTest {/*简易的测试框架通过反射操作字节码对象执行需求的逻辑*/public static void main(String[] args) throws Exception{//1、通过反射获取字节码文件对象ClassMethodTest methodTestClass MethodTest.class;//2、创建对象MethodTest mt methodTestClass.getConstructor().newInstance();
//3、通过反射获取这个类里面所有的方法对象Method[] methods methodTestClass.getMethods();//4、遍历数组得到每一个方法对象for (Method method : methods) {//核心判断这个方法头上有没有注解if(method.isAnnotationPresent(MyAnno.class)){//执行方法method.invoke(mt);}}}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87495.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!