JavaEE:Eclipse开发工具的相关使用和XML技术

时间:2021-09-10 21:05:21

Eclipse开发工具的知识点
1.工程的属性(properties)
1)Text file encoding  工程编码(在导入其他工程时,注意编码类型一致)
2)Java build path设置classpath位置,指定当前工程引入类库
source中指定.java文件和.class文件存放位置(Default output folder是存放.class的)
Libraries指定当前工程引用类库
3)Java Compiler指定.java采用哪个版本编译.class文件(指定编译器版本)
 当jre版本低于编译器版本:会抛出Bad version number in .class file的异常
4)快捷键
alt+/    Content Assist模板键   用于将代码快速补全
ctrl+1   Quick Fix快速修复    用于提供代码修改建议
模板配置方式:window->preferences->java->editor->templates
*使用alt+/等快捷键无反应时,应修改快捷键设置
修改方式window->preferences->general->keys
*设置代码保存时进行格式化 window->preferences->java->editor->save actions

程序的调试和运行
1)程序调试思路
1、当代吗出错了——查看错误信息——找到错误发生位置
*技巧:从上到下找第一行你写的程序
2、根据经验猜测错误原因
例如以下程序,当使用System.out.println((char)b);打印的时候会出现乱码,我们可以根据以往的经验,判断是用System.out.write(b);打印

package cn.it.lsl;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; public class HelloWorld {
public static void main(String[] args) throws IOException {
InputStream fi = new FileInputStream("info.txt");
int b;
while((b = fi.read()) != -1){
//System.out.println((char)b);
System.out.write(b);
}
}
}

3.通过System.out或者日志技术打印关键数据信息到控制台
eg:以下程序将发生错误,我们可以将关键数据输出到控制台,以便判断错误

package cn.it.lsl;
public class HelloWorld {
public static void main(String[] args) {
String data = "abc";
int d = convert(data);
} public static int convert(String data){
//通过System.out将关键数据输出到控制台
System.out.println("data:" + data);
return Integer.parseInt(data);
}
}

4.通过Eclipse自带断电调试功能,查看关键位置数据——断点调试 Break Point——程序通过Debug as运行
查看某变量的数值,右键——watch
F5和F7一般一起使用,查看具体代码实现
F6单独使用直接跳到代码下一行
F3查看类代码
F4查看类继承关系
open call Hierarchy查看调用关系

单体测试
1.关于代码测试有白盒测试和黑盒测试两种
白盒测试测试代码结构和逻辑(可见代码测试),黑盒测试测试代码功能和性能(不可见代码测试)
*白盒测试局限性1、白盒测试不可能测试所有代码;2、白盒测试难度比较高
单体测试是一种白盒测试,测试代码功能模块 —— 测试代码单个功能
2.junit是java的单体测试技术
1)编写junit在工程引用junit类库
Properties-->Java Build Path-->Libraries-->Add Library-->JUnit
2)编写单体测试用例
*创建public void无参数的方法、在方法前添加@Test注解
eg:

package cn.lsl.test;
import org.junit.Test;
public class JunitTest {
@Test
public void test1(){
System.out.println("HelloWorld");
} @Test
public void test2(){
int sum=0;
for(int i=1; i<=100; i++){
sum += i;
}
System.out.println(sum);
}
}

3)每个测试方法相当于以前编写main函数,每个测试方法可以单独执行
3.在使用junit进行测试当方法非常多,每个方法输出内容到控制台,人们无法通过人工进行检查
*自动化结果检查 --- 断言 Assert
断言原理:调用方法,调用方法前,准备测试数据,测试数据运行结果 ------ 比较实际结果与预期结果是否相同
*编写单体测试时,不要仅测试正确的数据和结果,测试不正确数据(非法数据)
4.一些@XXX的含义
@Test:测试方法
@Ignore:被忽略的测试方法
@Before:在每个测试方法执行之前都要执行一次
@After:在每个测试方法执行之后要执行一次
@BeforeClass:所有测试开始之前运行  static
@AfterClass:所有测试结束之后运行 static

package cn.lsl.test;

public class Calculator {
public int add(int a, int b){
return a+b;
}
public int sub(int a, int b){
return a-b;
}
public int mul(int a, int b){
return a*b;
}
public int div(int a, int b){
if(b == 0){
throw new RuntimeException("除数不能为0");
}
return a/b;
}
}
package cn.lsl.test;
import junit.framework.Assert;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test; public class CalcuatorTest {
@Before
public void before(){
System.out.println("before.....");
}
@After
public void after(){
System.out.println("after.....");
}
@BeforeClass
public static void beforeClass(){
System.out.println("before class...");
}
@AfterClass
public static void afterClass(){
System.out.println("after class...");
}
@Test
public void testAdd(){
System.out.println("testAdd....");
int a = 10;
int b = 20;
int expect = 30;
Calculator calculator = new Calculator();
int result = calculator.add(a, b);
//比较实际结果和预期结果的值
Assert.assertEquals(expect, result);
} @Test
public void testSub(){
int a = 10;
int b = 20;
Calculator calculator = new Calculator();
int result = calculator.sub(a, b);
} @Test
public void testMul(){
int a = 10;
int b = 20;
Calculator calculator = new Calculator();
int result = calculator.mul(a, b);
} @Test
@Ignore
public void testDiv(){
System.out.println("testDiv....");
int a = 10;
int b = 20;
Calculator calculator = new Calculator();
int result = calculator.div(a, b);
}
}

XML语言
1.XML技术:与数据相关技术,在企业中xml技术常用来存储数据和传输数据,且XML与任何编程语言无关,可用于php、java、.net等任何编程语言
*通过标签来标记数据
2.什么是标记语言?
例如<xxx>aaa</xxx>,典型标记语言HTML ---- 用标记修饰文本信息
3.XML是可扩展标记语言,XML标签没有被预定义 (XML标记随意定义 --- 可扩展)
在HTML中预定义了很多标记,每个标记都有相应显示效果,xml所有标记没有被预定义
在xml中<name>HLG</name> --- 想确定name标记含义,需要对xml添加约束
4.XML典型存储和传输应用:
1)XML充当数据库,保存数据信息
2)在AJAX传输数据、WebService 网络中传输数据时,格式采用xml
5.XML语法
1)文档声明
任何xml必须具备文档声明 <?xml version="1.0" ?>
没有指定xml编码集 --- 默认采用ISO-8859-1编码 (不支持中文数据)
*当xml指定encoding="utf-8"是浏览器查看编码集 --- 浏览器查看编码集必须和文件保存编码集一致
*新建记事本程序采用默认编码集 --- 默认编码集gbk --- 使用utf-8编码
例如以下程序若是采用记事本编写,应另存为utf-8
eg:

<?xml version="1.0" encoding="utf-8" ?>
<book>
<id>100</id>
<name>java编程思想</name>
</book>

当声明standalone="yes"该xml是独立xml,不依赖外面其它文件,standalone="no"该xml依赖外部一些文件
2)元素
XML通过元素描述复杂关系模型数据
xml语法规范
(1)XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,所有xml元素必须结束
<abc></abc> ---- 在xml文件中如果标签中没有内容也应该用自结束<abc />
格式良好的XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子孙标签。
(2)标签不允许交叉嵌套
(3)有且仅有一个根元素
(4)xml文件中,空格和换行会被解析器进行解析的
例如:下面两段内容的意义是不一样的
第一段:

<a>www.baidu.com</a>

第二段

<a>
www.baidu.com
</a>

注意:由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让文件中的内容清晰可读的“良好”书写习惯可能要*改变。
(5)严格区分大小写,元素和属性名称不能以数字开始
3)属性
属性的值必须用单引号或者双引号引起来
eg:

<input type="text">

多学一招:在XML中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:

<input>
<type>text</type>
</input>

4)注释
xml注释与html注释相同<!-- -->注释不能嵌套
5)CDATA块
CDATA区域内保留不被解析器解析的内容 --- 通常存放特殊代码,这些代码造成xml格式混乱
eg:

<?xml version="1.0" encoding="UTF-8"?>
<exams>
<exam>
<subject>测试一下大家HTML学的怎么样</subject>
<question>
<![CDATA[
以下哪个标记不能直接输入内容<input type="text" /> <input type="password" /> <input type="file" /> <input type="hidden" /> <a href="aaa">link</a>
]]>
</question>
<answer>hidden</answer>
</exam>
<exam>
<subject>测试一下大家HTML学的怎么样</subject>
<question>
&lt;a&gt;标记有什么作用
</question>
<answer>链接</answer>
</exam>
</exams>

6)处理指令
通过PI指令控制xml显示样式(指令之前不能有注释)
当xml使用pi指令引用CSS --- 效果等同于HTML,进行页面数据展示
*通过xml进行显示数据,通过XSLT修饰xml数据显示(类似CSS)
eg:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="1.css"?>
<exams>
<exam>
<subject>测试一下大家HTML学的怎么样</subject>
<question>
<![CDATA[
以下哪个标记不能直接输入内容<input type="text" /> <input type="password" /> <input type="file" /> <input type="hidden" /> <a href="aaa">link</a>
]]>
</question>
<answer>hidden</answer>
</exam>
<exam>
<subject>测试一下大家HTML学的怎么样</subject>
<question>
&lt;a&gt;标记有什么作用
</question>
<answer>链接</answer>
</exam>
</exams>

1.css

@CHARSET "UTF-8";
subject{
font-size:30px;
} answer{
color:red;
}

DTD
1.DTD快速入门
1)编写数据xml --- books.xml
2)编写dtd文件
*为文档每一个元素(不同名称) 编写一个 <!ELEMENT
语法格式:<!ELEMENT 元素名称 子元素>
如果元素内部为文本,则应该写#PCDATA
3)将xml文件与dtd文件关联起来
eg:

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books SYSTEM "books.dtd">
<books>
<book>
<name>Java编程</name>
<price>50</price>
</book>
</books>
books.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT books (book)>
<!ELEMENT book (name, price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>

2.DTD与XML三种关联方式
1)内部DTD ---- 语法 <!DOCTYPE 根元素 []>
eg:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book)>
<!ELEMENT book (name, price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<books>
<book>
<name>Java编程</name>
<price>50</price>
</book>
</books>

2)外部DTD (引用本地DTD) ----  语法 <!DOCTYPE 根元素 SYSTEM "本地DTD文件位置">
3)公共DTD (引用网络上DTD)  ----  语法 <!DOCTYPE 文档根节点 PUBLIC "DTD名称" "DTD文件的URL">
3.DTD的语法细节
1)元素
<!ELEMENT 元素名称 声明内容>
(1)以下符号的含义
+:一个到多个
*:任意个(0到多个)
?:0或1个
|:多选一
eg:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book+)>
<!ELEMENT book (name, price?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<books>
<book>
<name>Java编程</name>
</book>
<book>
<name>Java编程</name>
<price>50</price>
</book>
</books>

(2)元素内容
文类类型内容:#PCDATA
EMPTY:子元素内容如果为空,使用EMPTY
2)属性 (ATTLIST)定义
语法:<!ATTLIST 元素名称 属性列表>
属性列表:
属性名称 类型 约束
属性类型
(1)CDATA 文本类型属性
(2)(值1|值2|值3)三个选一个
(3)ID表示属性值唯一
约束:
(1)#REQUIERD 属性必须
(2)#IMPLED 属性可选
(3)fixed value 属性值固定
(4)default 默认值
3)实体
对于xml数据内容重复,可以抽取实体
语法:<!ENTITY 实体名称 "实体内容">
引用方式:&实体名称;

eg:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book+)>
<!ELEMENT book (name, price+,public)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price EMPTY>
<!--ID属性 不能以数字开始-->
<!ATTLIST book
bid ID #REQUIRED
author (金庸|古龙) "古龙"
>
<!ELEMENT public (#PCDATA)>
<!--将公共的重复内容 提取实体-->
<!ENTITY cbs "出版社">
]>
<books>
<book bid="b100" author="金庸">
<name>神雕侠侣</name>
<price></price>
<public>&cbs;</public>
</book>
<book bid="b200">
<name>Java</name>
<price></price>
<public>&cbs;</public>
</book>
</books>

Schema
一些概念:
XML Schema文件本身就是一个XML文件,但它的扩展名通常为.xsd
和XML文档一样,一个XML Schema文档也必须有一个根节点,但这个根节点的名称为Schema
1.Schema原理
预先定义元素和属性--->Schema文档(模式、约束文档)--->XML实例(实例文档)
步骤:
1)引用W3C元素和属性的名称空间,为了使用W3C预定义元素和属性
xmlns="http://www.w3.org/2001/XMLSchema"
2)定义Schema元素
想让xml实例使用schema中定义定义元素,为定义元素指定名称空间
targetNamespace="http://www.lsl.com"
3)在xml实例文件中引用自定义schema名称空间
xmlns="http://www.lsl.com"
4)声明xml文件是一个应用schema技术实例
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5)指定schema文件位置
xsi:schemaLocation="http://www.lsl.com books.xsd"
名称空间:http://www.lsl.com
schema文件位置:books.xsd

2.Schema快速入门
1、编写数据xml文件
2、编写schema文件 .xsd
1) 引入 W3C 名称空间 xmlns="http://www.w3.org/2001/XMLSchema"
每一个元素 对应 <element>
区分复杂元素和简单元素
2) 为schema定义元素指定名称空间 URI (URI可以是任何路径)
3、在xml实例数据文件中 ,引用自定义Schema

eg:
books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns="http://www.lsl.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.lsl.com books.xsd"
>
<book>
<name>java</name>
<price>100</price>
</book>
</books>

books.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.lsl.com"
elementFormDefault="qualified"
>
<element name="books">
<complexType>
<sequence>
<element name="book" minOccurs="0" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="price" type="double"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>

elementFormDefault="unqualified"
1.如果schema将elementFormDefault="unqualified",xml文档实例引用名称空间必须使用前缀 --- 前缀修饰根元素
2.当前xml实例文档所有子元素必须不能用前缀

名称空间的作用 --- 唯一标识schema当中定义元素

引用两个schema文件
company.xml

<?xml version="1.0" encoding="UTF-8"?>
<company xmlns="http://www.example.org/company"
xmlns:dept="http://www.example.org/department"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/company company.xsd http://www.example.org/department department.xsd"
>
<employee age="20">
<dept:name>人力资源部</dept:name>
<name>小刘</name>
</employee>
</company>

company.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/company"
elementFormDefault="qualified">
<element name="company">
<complexType>
<sequence>
<element name="employee">
<complexType>
<sequence>
<any></any>
<element name="name"></element>
</sequence>
<attribute name="age" type="int"></attribute>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>

department.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/department"
elementFormDefault="qualified">
<element name="name" type="string"></element>
</schema>